Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
22
Help us understand the problem. What is going on with this article?

More than 5 years have passed since last update.

@Takumi_Mori

開発用ビルドにだけ解析ツールを組み込みたい

 Crashlyticsなどのクラッシュ計測ツールを利用するとXcodeに繋いでデバッグしているとき以外でも簡単に、詳細なクラッシュ要因を受け取ることができます。
 ですが、不特定多数のユーザに関する情報を収集することになるので利用規約を準備して、収集内容をユーザに説明した上で収集に同意してもらう必要があります。

 正直なところもの凄く手間な上にチュートリアルの突破率も下がるので、私が開発するアプリではBetaを使ったテスター配布のアプリにだけクラッシュ解析ツールを導入するようにしています。
 今回はその方法について。 Debug/Release版での処理切り分けに使ったり応用性も高いです。

TARGETSを複製する

 Configurationsを複製するだけでもいいんですが、TARGETSから複数用意した方がヒューマンエラーが減るのでいいと思います。
ss1.png
別にiPad版を作るわけではないので、「Duplicate Only」を選択します。

ss2.png
 新しく「元になったTARGET名 copy」というTARGETと、勝手に名前を付けられたplistが増えると思います。
 ちょっとこのままだと微妙な名前なのでリネームします。取り合えず適当にdebugとか。
ss3.png
ss4.png
 TARGETSに戻って、こちらもcopyからdebugに変更。info.plistの名前を変更したので紐付けが外れてしまってますので、「Choose Info.plist File ...」から先ほどリネームしたファイルを紐付けます。

ss5.png
 デバッグ用はBundle Identifierを切り分けて別アプリとしてホーム画面に置きたい場合は、直接Bundle Identifierを書き変えるかProduct Nameを別名にしてしまいます。
 ※Product Nameを変更したらCrashlyticsへはまた再登録してください

Preprocessor Macrosを設定する

ss6.png
 Build Settingsから、もしBasicが選択されていたら「All」を選択してプリプロセッサマクロを設定します。
ss7.png
 取り合えず適当にそれっぽい名前で。これを定義しておくと、ビルドする際にこのTARGETS、このConfigurationsのときにだけこの定義が行われます。

ss8.png
 例えばこんな感じで書くことで、CrashlyticsをインストールしたいビルドにだけPreprocessor Macrosで「VALID_CRASHLYTICS=1」を定義することができます。使わないTARGETSではCrashlyticsのライブラリリンク自体切ってもいいかもしれませんね。
 これでストア申請用のバージョン以外は別のTARGETSからビルドする、というオペレーションにしておけば本番用ビルドには解析ツールを導入することなくクラッシュ解析ツールの導入、またCrashlyticsならばBetaによるテスターへの配布ということが行えるようになります。

 例えば私がいま開発中のアプリでは、アプリ名の後ろにdebug、adhocの名称がついているTARGETSを別に用意していてデバッグ版、本番環境のAdHoc版で切り分けるようにしています。

その他

 Preprocessor Macrosは色々なことに応用できます。
例えばNSLogの出力内容はリリース後のアプリからでも閲覧可能なので、実機をPCにつないでOrganizerとかiPhone構成ユーティリティを開いてアプリ起動して見ると表示されてしまいます。
 そのため、例えば以下のように記述してNSLogは本番環境では動作しないようにさせることができます。

#ifdef  DEBUG
#define NSLog(...); NSLog(__VA_ARGS__);
#else
#define NSLog(...); // NSLog(__VA_ARGS__);
#endif
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
22
Help us understand the problem. What is going on with this article?