Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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の差分が出る事です。自分はあまり気にせずやっています。

paming
Android修行中
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした