快捷搜索: 王者荣耀 脱发

二、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}

如图所示:

成功后显示

结果对比,可以查看正确崩溃代码位置

经验分享 程序员 微信小程序 职场和发展