2017-02-20 22 views
4

У меня есть приложение iOS, написанное в Swift 2 в Xcode 8.2.1, которое построено для iOS 10.2.Как сохранить сообщение fatalError в журнал сбоев iOS?

У меня было несколько отчетов о сбоях от TestFlight и, несмотря на символику, ни один из журналов сбоев не показывает какое-либо состояние программы, кроме трассировки стека (без значений аргументов, без локалей, без объектов кучи и т. Д.).

... но внутри этих функций я могу видеть код, который может сбой (например, принудительное разворот), но журнал сбоев не говорит мне, где и почему он терпит неудачу.

При отладке в Xcode, я могу использовать fatalError(message: String), где я могу поставить свое собственное сообщение как "functionFoo returned nil" или "variable bar == \"" + bar + "\"", кроме случаев, когда развертываются с помощью TestFlight или App Store fatalError будет хит, и программа завершается, но значение message не сохраненный в журнале сбоев, что делает его бессмысленным.

В других средах, таких как C# /. NET и Java, я могу просто throw new SomeExceptionType("my message"), и вся информация доступна в любом глобальном catch(Exception) обработчике.

Как я могу достичь той же цели в iOS/Swift?

+0

Вы когда-нибудь находили путь? –

ответ

0

Для хранения внутренних ошибок сообщений вы можете изменить все fatalError вызовы на вызовы пользовательского метода подобно следующему:

public func internalCriticalError(_ message: String = "") -> Never { 
    // Save the message in a crash log here 
    // ... 

    fatalError(message) 
} 

К сожалению, это решение не распространяется на третьей стороной фатальные ошибки отлова.