天天看點

二、iOS端實作sentry日志收集

至于為什麼要搭建?

目的是為了測試移動端程式上傳符号表是否可以定位具體的崩潰代碼。Sentry作為一款開源的日志跟蹤平台。使我們能夠快速定位到錯誤所在的檔案和行号。

內建Sentry

CocoaPods內建:

項目中使用

[SentrySDK startWithConfigureOptions:^(SentryOptions * _Nonnull options) {
        options.dsn = @"http://[email protected]:9000/2";
        options.debug = YES;
    }];
           

dsn 換成你自己。dsn如何尋找,如下圖所示

二、iOS端實作sentry日志收集

就這簡單的就可以收集崩潰日志資訊了。

但是問題來了,我們有時候收集的崩潰資訊定位不到具體的代碼。

二、iOS端實作sentry日志收集

這時候,就需要我們的符号表(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擷取:
    二、iOS端實作sentry日志收集
  • org_slug的擷取
    二、iOS端實作sentry日志收集
  • project_slug的擷取,就是你們sentry上建立的iOS項目
    二、iOS端實作sentry日志收集
    這樣,fastlane上傳的配置資訊就此配置完畢。這一塊上傳可以結合fastlane自動打包來進行自動化上傳,将此lane接在自動化打包之後即可。

####2、 sentry-cli上傳dSYM

1、安裝sentry-cli
  • 第一種
brew install sentry-cli
           
  • 第二種

安裝成功如下所示

二、iOS端實作sentry日志收集

此時用sentry-cli上傳dSYM有兩種方式:

2、終端上傳dSYM

需要先配置SENTRY_URL:

執行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下的打包的符号表。

二、iOS端實作sentry日志收集
二、iOS端實作sentry日志收集
3、XCode的build phases自動上傳dSYM
二、iOS端實作sentry日志收集

配置内容如下:

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中加上以下代碼:

如圖所示:

二、iOS端實作sentry日志收集

成功後顯示

二、iOS端實作sentry日志收集

結果對比,可以檢視正确崩潰代碼位置

二、iOS端實作sentry日志收集
二、iOS端實作sentry日志收集