[Fabric] Crashlytics 入門 #3 クラッシュレポートを拡張する
クラッシュレポートをもっと便利に使おう
短時間で簡単に導入することが魅力の1つである Crashlytics ですが、 クラッシュレポートをカスタマイズすることでより便利になります。今回はその拡張方法について見て行きましょう。
カスタムの情報を設定する
各クラッシュレポートについて、カスタムの情報を付与することができます。
+ (void)setObjectValue:(id)value forKey:(NSString *)key; + (void)setIntValue:(int)value forKey:(NSString *)key; + (void)setBoolValue:(BOOL)value forKey:(NSString *)key; + (void)setFloatValue:(float)value forKey:(NSString *)key;
setObjectValue:forKey: は、NSString をセットした場合はそのまま文字列になりますし、NSObject を入れれば description が表示されるようになっています。
この情報は最終的に、Issue 画面の (More details...) をクリックすると表示できる、クラッシュの詳細画面で確認できます。
この画面はクラッシュ単位の情報なので、実際にクラッシュが発生したデバイスがどのような状態だったのか細かく調べることが出来ます。「Keys」という欄で、送信したカスタムの情報が反映されていることが確認できました。今回は「Gender」と「Age」というカスタムの情報を付与しています。
なお、以下の注意点があるのでカスタムの情報の入れ過ぎに注意してください。
- キー・バリューのセットは64個まで
- 各キー・バリューのサイズは1KBまで
カスタムログを出力する
Crashlytics では、CLS_LOG を使ってカスタムログを出力することができます。このログはデバッグ時に出力されることはもちろん、リリースビルドにおいてもリモートログのような形式で Crashlytics サービスに出力されます。なお、リリースビルドにおけるログ出力は NSLog よりも10倍高速らしいです。
- Objective-C のクラス名、メソッド名、コード行は自動的に出力される
- デバッグ時は NSLog を経由し、デバイス(またはシミュレータ)のログが Xcode に出力される
- リリース時は NSLog よりも10倍高速に Crashlytics に出力
例えば、次のように記述します。
CLS_LOG(@"startDate : %@", [NSDate date]);
Crashlytics/Crashlytics.h を見てみると、CLS_LOG と CLS_NSLOG の2つのメソッドがあることが分かります。CLS_NSLOG は NSLog を経由します。デバッグ時は CLS_LOG を呼び出した場合でも CLS_NSLOG が呼ばれるようにマクロが組まれています。また、CLS_LOG と CLS_NSLOG はいずれもスレッドセーフです。
#ifdef DEBUG #define CLS_LOG(__FORMAT__, ...) CLSNSLog((@"%s line %d $ " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__) #else #define CLS_LOG(__FORMAT__, ...) CLSLog((@"%s line %d $ " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__) #endif
出力されたログはカスタムの情報と同様、クラッシュ詳細画面から確認できます。
ユーザー情報を設定する
Crashlytics では、ユーザーを一意に特定できるよう、ユーザー情報を設定することもできます。
+ (void)setUserIdentifier:(NSString *)identifier; + (void)setUserName:(NSString *)name; + (void)setUserEmail:(NSString *)email;
こちらも クラッシュ詳細画面で確認できます。
まとめ
カスタマイズと言ってもいずれも1行から初められるので、すぐに実装できます。クラッシュレポートの取り方について、どんな情報があると良さそうか事前に考えておくと良いと思います。後々にかなり価値のある情報になるでしょう。