2015-11-21 2 views
1

Я видел пару приложений, которые обнаруживают, что приложение разбилось в последний раз, когда оно использовалось, чтобы побудить пользователя сообщать об ошибке.Detect App Crash on Launch

Как я могу это сделать? Я попробовал this solution, но не получил его для работы в моем быстром проекте ...
Подход, который я думал, состоит в том, чтобы сохранить что-то каждый раз, когда приложение вот-вот будет закрыто, а затем прочитайте значение при запуске приложения, я догадаться, когда приложение выйдет из строя, тогда он больше ничего не сможет сохранить, верно?
Но это не очень элегантно. Есть ли лучший способ обнаружения аварии?

Заранее спасибо :)

+0

я рекомендую использовать аварии репортеру как ткань & ... это очень простой в использовании и поможет вам решить вашу проблему легко – Mohamad

+0

решение по вашей ссылке соответствует всем вашим требованиям. если приложение аварийно, сохраните информацию. при запуске приложения, проверьте сохраненную информацию и очистите сохраненный контекст. почему это не работает в вашем приложении? – user3441734

+0

Я думаю, что мне удалось перевести его, но он жаловался на вещь с '&' – LinusGeffarth

ответ

0

Вы можете использовать crashlytics на твиттере.

  1. Скачать ткань Mac App
  2. Открыть это & подписаться на новую учетную запись
  3. Добавьте свой проект Xcode в список проектов в ткани
  4. Выберите для добавления рамки crashlytics к вашему приложению
  5. построить приложение
  6. Смотрите данный фрагмент кода, чтобы начать с crashlytics
  7. Визит Fabric documentation для получения дополнительной информации
+0

Как Fabric реализует отчеты о сбоях? – kelin

1

Вы можете использовать встроенное закрытие для выполнения регистрации во время сбоя.

NSSetUncaughtExceptionHandler { exception in 
    // Do necessary logging work here 
} 

Это SO thread может быть полезным для вас ..

+0

это работает только на UncaughtException, если вы обращаетесь к разворачиваемому нолю, обработчик ничего не выполняет ... – user3441734

+0

Я согласен, но Swift разработан с учетом безопасности, устраняя небезопасный код во время компиляции. Предполагается, что опционы должны безопасно управляться в любое время с помощью различных механизмов (например, необязательного связывания), предоставляемых языком. IMHO, принудительное разворачивание/неявное развертывание следует избегать. –

+1

в чистом быстром коде не должно быть никакого невостребованного исключения вообще ... на самом деле приложение может сбой с другим, чем неперехваченное исключение очень легко. OP хотел бы знать, сбой приложения или нет. может быть «не очень элегантным», но его метод кажется единственным доступным. – user3441734

0
import XCPlayground 
import Foundation 


let fm = NSFileManager() 
if fm.fileExistsAtPath("terminated") { 
    try! fm.removeItemAtPath("terminated") 
} else { 
    print("an app crashed last time") 
} 
// set i to nil to force the app to crash 
// than set it to 0 and execute it again 
let i: Int! = 0 
let j: Int = i 

fm.createFileAtPath("terminated", contents: nil, attributes: nil) 
print("terminated")