リリース後のデバッグのために、ログと DB のダンプを送る機能を付ける
アプリはリリースするととにかくデバッグしにくいです。 Crashlytics を入れておくのは当然としても、これだけでは対応しにくいケースが沢山あります。
たとえば、データの不整合が出たり、予期せずデータが消えてしまったりするケース。 これらのケースは例外が発生しないので、とてもデバッグがしにくい。サポートもしにくい。
という事態が現在進行形なので対策を考えました。
解決策
「ログ」と「DB」のダンプを送れる機能を付ける。
容量の問題。 DB については、件数にもよりますが 1000 件のレコードがあっても ~1MB で済むと思いますので、送れない範囲ではない。 ログについては、1 レコード ~100bytes ほどだと思うので、直近のレコード数で切って送信すれば問題ないでしょう。
とりあえず実装方法を妄想するだけしてみました
ログの保管の仕方(妄想)
iOS の場合、マクロを使って専用のロガーを作って上げると良いと思います。
つまり、NSLog
を直接つかうのではなく適当な Prefix を付けた SOMELog
を使ってログするようにします。
#if DEBUG #define SOMELog(...) NSLog(@"SOME: %@", [NSString stringWithFormat:__VA_ARGS__]); #else #define SOMELog(...) SOMEStoreLog(@"SOME: %@", [NSString stringWithFormat:__VA_ARGS__]); #endif
これで SOMEStoreLog
を実装すれば OK です。中身は適当にバッファしてファイルに保存するだけ。
CocoaLumberjack/CocoaLumberjack · GitHub とかがイイ感じに実装を提供していたと思います。
DB データの取得方法(妄想)
.sqlite
ファイルを丸ごとアップロードすれば良いと思います。
CoreData を使っていれば NSPersistentCoordinator
でファイルパスを指定しているはずなので、こちらを取得してアップロードします。
まとめ
こんな感じでやってみるかもしれないし、良かったらまた書くかも