Xcode 8.2.1 で Swift 2 で記述され、iOS 10.2 用にビルドされた iOS アプリケーションがあります。
TestFlight から多数のクラッシュ レポートを受け取りましたが、シンボル化にもかかわらず、クラッシュ ログにはスタック トレース以外のプログラム状態 (引数値、ローカル、ヒープ オブジェクトなど) は表示されません。
...しかし、これらの関数内には失敗する可能性のあるコード (強制アンラップなど) が見つかりますが、クラッシュ ログにはどこで、なぜ失敗するのかが示されません。
Xcode でデバッグする場合、やfatalError(message: String)
などの独自のメッセージを配置できる を使用できますが、TestFlight または App Store を使用してデプロイされた場合は がヒットしてプログラムが終了しますが、値はクラッシュ ログに保存されないため意味がありません。"functionFoo returned nil"
"variable bar == \"" + bar + "\""
fatalError
message
C#/.NET や Java などの他の環境では、throw new SomeExceptionType("my message")
グローバルcatch(Exception)
ハンドラーがあれば、すべての情報を簡単に利用できるようになります。
iOS / Swift で同じ目標を達成するにはどうすればよいでしょうか?
ベストアンサー1
おそらくこれが役に立つでしょう
import os
let osLogger = Logger(subsystem: yourBundleIdentifier, category: yourCategory)
osLogger.log(level: .debug, "\(yourCategoryName): \(message)")