npm i --save @nativescript-community/sentry
- 版本:4.6.33
- GitHub: https://github.com/nativescript-community/sentry
- NPM: https://npmjs.net.cn/package/%40nativescript-community%2Fsentry
- 下载
- 昨日: 112
- 上周: 636
- 上月: 2835
安装
tns plugin add @nativescript-community/sentry
在添加插件后,请确保运行新的构建以避免任何问题。
配置
Webpack
您需要将类似以下内容添加到您的 webpack 配置中,以便上传源映射。由于我使用的是 .sentryclirc
配置文件,所以我在选项中未设置 auth
或 project
。
SOURCEMAP_REL_DIR
:我几乎总是将其设置为../../sourcemaps
SENTRY_PREFIX
:默认为app:///
if (!!sentry && !!uploadSentry) {
config.devtool = false;
config.plugins.push(
new webpack.SourceMapDevToolPlugin({
append: `\n//# sourceMappingURL=${process.env.SENTRY_PREFIX}[name].js.map`,
filename: join(process.env.SOURCEMAP_REL_DIR, '[name].js.map')
})
);
let appVersion;
let buildNumber;
if (isAndroid) {
const gradlePath = `${appResourcesPath}/Android/app.gradle`;
const gradleData = readFileSync(gradlePath, 'utf8');
appVersion = gradleData.match(/versionName "((?:[0-9]+\.?)+)"/)[1];
buildNumber = gradleData.match(/versionCode ([0-9]+)/)[1];
} else if (isIOS) {
const plistPath = `${appResourcesPath}/iOS/Info.plist`;
const plistData = readFileSync(plistPath, 'utf8');
appVersion = plistData.match(/<key>CFBundleShortVersionString<\/key>[\s\n]*<string>(.*?)<\/string>/)[1];
buildNumber = plistData.match(/<key>CFBundleVersion<\/key>[\s\n]*<string>([0-9]*)<\/string>/)[1];
}
config.plugins.push(
new SentryCliPlugin({
release: appVersion,
urlPrefix: 'app:///',
rewrite: true,
release: `${nconfig.id}@${appVersion}+${buildNumber}`,
dist: `${buildNumber}.${platform}`,
ignoreFile: '.sentrycliignore',
include: [join(dist, process.env.SOURCEMAP_REL_DIR)]
})
);
}
### 调试
要使调试模式正常工作,您需要在 webpack 中添加以下内容(请参阅示例应用)
nsWebpack.chainWebpack(config=>{
config.entry('bundle').prepend('@nativescript-community/sentry/process');
});
Fastlane
如果您使用 fastlane,则可以使用它来创建发布和上传 dsyms。为此,您需要安装它
fastlane add_plugin sentry
目前,您还应安装 nativescript-set-version
,因为它需要读取应用程序版本和构建号。
npm install -D nativescript-set-version
现在您可以设置您的 Fastfile
- 创建发布
version = ""
versionCode = ""
Dir.chdir("..") do
version = sh("./node_modules/.bin/get-version", platform, "version").gsub(/\n/,'')
versionCode = sh("./node_modules/.bin/get-version", platform, "code").gsub(/\n/,'')
end
sentry_create_release(
version: version, # release version to create
)
- 上传 dsyms
sentry_upload_dsym
在应用程序中使用
import * as Sentry from '@nativescript-community/sentry';
const buildNumber = await getBuildNumber();
const versionName = await getVersionName();
const buildNumber = await getBuildNumber();
const appId = await getAppId();
Sentry.init({
dsn: SENTRY_DSN,
debug: true,
enableAutoPerformanceTracking: true,
});
报告 NativeScript 错误
onerror
方法确保所有未处理的 NativeScript 错误都会在生产环境中被 Sentry 捕获,使用的是 自定义错误处理器。
报告已处理错误
如果您希望将已处理的错误发送到 Bugsnag,可以将任何 Error 对象传递给 Sentry notify 方法
import * as Sentry from '@nativescript-community/sentry';
try {
// potentially crashy code
} catch (error) {
Sentry.captureException(error);
}
报告 promise 拒绝
要报告 promise 拒绝,请在 catch 块中使用 notify()
import * as Sentry from '@nativescript-community/sentry';
new Promise(function(resolve, reject) {
/* potentially failing code */
})
.then(function () { /* if the promise is resolved */ })
.catch(function (error) {
Sentry.captureException(error);
});
发送诊断数据
自动捕获的诊断
Bugsnag 将自动捕获并附加以下诊断数据
- 完整的堆栈跟踪
- 电池状态
- 设备型号和操作系统版本
- 所有线程的线程状态
- 发布阶段(生产、调试等)
- 应用在前台和/或后台运行的时间
- 设备特定的标识符和供应商特定的标识符
识别用户
为了将错误与客户报告相关联,或查看经历过每个错误的用户列表,捕获和显示用户信息非常有帮助。在 Bugsnag 客户端设置的任何信息都会随每个错误报告一起发送
Sentry.setUser({"email": "[email protected]"});
记录面包屑
为了了解每次崩溃之前应用程序中发生了什么,留下简短的日志语句(我们称之为面包屑)可能会有所帮助。最后几个面包屑附加到崩溃中,以帮助诊断导致错误的事件。
自动捕获的面包屑
默认情况下,Bugsnag 捕获常见事件,包括
- 低内存警告
- 设备旋转(如果适用)
- 菜单呈现
- 截图捕获(不是截图本身)
- 撤销和重做
- 表格视图选择
- 窗口可见性更改
- 非致命错误
- 日志消息(默认关闭,请参阅配置选项)
附加自定义面包屑
要附加额外的面包屑,请使用 leaveBreadcrumb 函数
Sentry.addBreadcrumb({
category: 'ui',
message: 'load main view',
level: 'info'
});