クラッシュログ収集Crittercism を仕込む時のメモ

  • 32
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

iOSアプリでクラッシュしたときにログを送信するサービスはいくつかありますが、自分はCrittercismをよく使います。ドキュメントを読んでその通りに実装すればすぐ動くので使いやすいです。
さらに手間も省く事ができるので、その辺りをメモしておきます。

SDKのインストール

zipファイルをダウンロードして入れる事も出来ますが、CocoaPodsでインストールする事も出来ます。

$ pod search crittercism
-> CrittercismSDK (4.3.1)
   Mobile App Performance Monitoring and Crash Reporting.
   pod 'CrittercismSDK', '~> 4.3.1'
   - Homepage: http://www.crittercism.com
   - Source:   https://app.crittercism.com/images/Crittercism_v4_3_1.zip
   - Versions: 4.3.1, 4.3.0, 4.1.2, 4.1.1, 4.1.0, 4.0.7, 4.0.6, 4.0.5, 4.0.4, 4.0.3, 4.0.2, 4.0.1, 4.0.0, 3.5.3, 3.5.1,
   3.4.9, 3.4.8, 3.4.0, 3.3.4, 3.3.1 [master repo]

リリースビルドの時だけCrittercismを動かす

デバッグ中のクラッシュはCrittercismが拾っても意味が無いので、リリースビルドの時のみ動くようにします。

AppDelegate.m
#ifndef DEBUG
    [Crittercism enableWithAppID: @"〜〜"];
#endif

dSYMファイルの自動アップロード

ドキュメントにも書いてありますが、CrittercismSDKにはdSYMファイルのアップロードスクリプトが含まれています。これをBuild Phasesの"Run Script"に追加しておくと、dSYMファイルが自動でアップロードされます。

ただし実装中やデバッグ中は何度もビルドし直します。その都度dSYMファイルがアップロードされるのも気になりますし、ネットワーク的にアップロードに時間がかかったりする時もあります。なので、リリースビルド時のみファイルをアップロードするように、RunScriptを書きます。

RunScript
if [ "${CONFIGURATION}" = "Release" ]; then
    APP_ID="〜〜"
    API_KEY="〜〜"
    source ${SRCROOT}/Pods/CrittercismSDK/CrittercismSDK/dsym_upload.sh
fi

↑は、CocoaPodsでCrittercismSDKをインストールしているので、Pods/ディレクトリの中のdsym_upload.sh ファイルを指定しています。

dsym_upload.shにタイムアウト設定を追加

dSYMファイルのアップロードが遅い時があります(APIのトラブルやネットワーク的に遅い時等)。失敗するのは良いとしても無反応になってXCodeそのものが固まり中断も出来なくなる場合があります。なので、早めにタイムアウトするように、dsym_upload.shを修正します。

dsym_upload.sh
STATUS=$(curl "${URL}" --write-out %{http_code} --silent --output /dev/null -F dsym=@"${DSYM_ZIP_FPATH}" -F key="${API_KEY}" -m 30)  #-m 30 を追加

CFBundleVersionの自動更新

アプリをiTunesConnectにアップロードする際には、CFBundleShortVersionStringを修正する事が多いと思います。
しかしCrittercismは、CFBundleVersion毎にクラッシュを集計します。
4sqPhoto_xcworkspace_—_4sqPhoto_xcodeproj-9.png

両方を更新するような運用ルールにするのも良いのですが、CFBundleVersionを自動で設定するようにRunScriptを追加しておきます。このRunScriptは、Compileの前に実行する順番にします。

RunScript
if [ "${CONFIGURATION}" = "Release" ]; then
    versionStr=`/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" ${SRCROOT}/(Info.plistのパス)`
    echo $versionStr
    dateStr=`date "+%Y%m%d"`
    echo $dateStr
    bundleVersion=$versionStr.$dateStr
    echo $bundleVersion
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $bundleVersion" ${SRCROOT}/(Info.plistのパス)
fi

このRunScriptで、CFBundleVersionがCFBundleShortVersionString+(日付) となります。
このRunScriptの欠点は、ビルドした後でInfo.plistが書き変わる事があるので、ビルド後にgitの差分が出る事です。自分はあまり気にせずやっています。