二、iOS端实现sentry日志收集
至于为什么要搭建? 目的是为了测试移动端程序上传符号表是否可以定位具体的崩溃代码。Sentry作为一款开源的日志跟踪平台。使我们能够快速定位到错误所在的文件和行号。
集成Sentry
CocoaPods集成:
pod Sentry, ~> 6.0.9
项目中使用
#import <Sentry/Sentry.h>
[SentrySDK startWithConfigureOptions:^(SentryOptions * _Nonnull options) { options.dsn = @"http://304ca6bc430645aea25082b1c6426a79@127.0.0.1:9000/2"; options.debug = YES; }];
dsn 换成你自己。dsn如何寻找,如下图所示 就这简单的就可以收集崩溃日志信息了。 但是问题来了,我们有时候收集的崩溃信息定位不到具体的代码。 这时候,就需要我们的符号表(dSYM文件)来进行处理了。
dSYM文件上传到Sentry
官网有两种方案: https://docs.sentry.io/platforms/apple/guides/ios/dsym/#bitcode-sentrycli 第一种是Fastlane 第二种是sentry-cli
1、Fastlane上传dSYM
Fastlane的安装就不描述了。具体我说下插件的安装,进入项目文件夹后,可以通过命令fastlane add_plugin sentry 进行插件的安装,完成之后,我们可以通过查看fastlane 文件夹下的Pluginfiles来确定插件的安装情况,如下:
gem fastlane-plugin-pgyer gem fastlane-plugin-sentry
完成插件安装之后,我们需要配置一下sentry的lane,打开Fastfile,创建一个新的lane。如下:
desc "上传到sentry" lane :upload_symbols do sentry_upload_dsym( #api_host: http://127.0.0.1:9000/, //替换成你自己的sentry地址 auth_token: 9afb0adf98a340b1bc8d1445e38f01921c5ec1d5cd5640bd8cf81f404e2a0b91, org_slug: sentry, project_slug: ios, ) end
这里我们说下
-
auth_token获取: org_slug的获取 project_slug的获取,就是你们sentry上创建的iOS项目 这样,fastlane上传的配置信息就此配置完毕。这一块上传可以结合fastlane自动打包来进行自动化上传,将此lane接在自动化打包之后即可。
####2、 sentry-cli上传dSYM
1、安装sentry-cli
-
第一种
brew install sentry-cli
-
第二种
curl -sL https://sentry.io/get-cli/ | bash
安装成功如下所示 此时用sentry-cli上传dSYM有两种方式:
2、终端上传dSYM
需要先配置SENTRY_URL:
export SENTRY_URL=http://127.0.0.1:9000/ //替换自己的sentry地址
执行sentry-cli上传
sentry-cli --auth-token YOUR_AUTH_TOKEN upload-dif --org example-org --project example-project PATH_TO_DSYMS
YOUR_AUTH_TOKEN 就是上图的auth_token获取结果。 example-org 就是org_slug的获取结果 example-project就是project_slug的获取结果 PATH_TO_DSYMS 就是你Release下的打包的符号表。
3、XCode的build phases自动上传dSYM
配置内容如下:
if which sentry-cli >/dev/null; then export SENTRY_URL=http://127.0.0.1:9000/ export SENTRY_LOG_LEVEL=debug //SENTRY_ORG org_slug的获取上图的获取的结果 export SENTRY_ORG=sentry //project_slug的获取,就是你们sentry上创建的iOS项目 export SENTRY_PROJECT=ios // auth_token获取 export SENTRY_AUTH_TOKEN=9afb0adf98a340b1bc8d1445e38f01921c5ec1d5cd5640bd8cf81f404e2a0b91 ERROR=$(sentry-cli upload-dif "$DWARF_DSYM_FOLDER_PATH" 2>&1 >/dev/null) if [ ! $? -eq 0 ]; then echo "warning: sentry-cli - $ERROR" fi else echo "warning: sentry-cli not installed, download from https://github.com/getsentry/sentry-cli/releases" fi
如果你的xocde版本是Xcode 10以后的。还需要在Input Files中加上以下代码:
${ DWARF_DSYM_FOLDER_PATH}/${ DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${ TARGET_NAME}
如图所示:
成功后显示