You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在iOS应用启动时检测上一次运行是否因致命错误崩溃

如何在iOS应用启动时检测上一次运行是否因致命错误崩溃

好问题!我之前做项目的时候刚好碰到过一模一样的需求,这儿有几个亲测有效的办法,你可以参考下:


方法一:用UserDefaults标记正常退出(无第三方依赖)

这个思路的核心是:只有当应用正常退出时,才写入一个“正常退出”的标记。下次启动时如果这个标记不存在或者为false,就说明上次大概率是崩溃退出了。

具体实现步骤:

  1. 应用启动时先检查标记:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    let defaults = UserDefaults.standard
    let didExitNormally = defaults.bool(forKey: "AppDidExitNormally")
    
    // 如果标记为false,说明上次可能是崩溃或异常终止
    if !didExitNormally {
        // 这里写你要显示的提示逻辑
        showCrashNotification()
    }
    
    // 重置标记,默认当前启动后还未正常退出
    defaults.set(false, forKey: "AppDidExitNormally")
    return true
}
  1. 在应用正常退出/进入后台时更新标记:
// 应用将要被终止时(比如用户手动划掉)
func applicationWillTerminate(_ application: UIApplication) {
    let defaults = UserDefaults.standard
    defaults.set(true, forKey: "AppDidExitNormally")
}

// 应用进入后台时也更新,避免系统因内存不足杀掉被误判
func applicationDidEnterBackground(_ application: UIApplication) {
    let defaults = UserDefaults.standard
    defaults.set(true, forKey: "AppDidExitNormally")
}

注意事项:

这个方法唯一的小缺陷是:如果应用被系统强制终止(比如后台内存不足被回收),applicationWillTerminate可能没机会执行,这时候会被误判为崩溃。如果你的应用后台运行场景不多,这个方法完全够用。


方法二:利用Crashlytics自带的崩溃检测API(推荐,如果你已经在用Crashlytics)

既然你已经集成了Crashlytics,那它自带的API就是最省心的方案——它能精准区分“崩溃退出”和“系统主动终止”,不会有上面的误判问题。

具体代码:

import Crashlytics

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // 检查上次运行是否崩溃
    if Crashlytics.sharedInstance().didCrashDuringPreviousExecution() {
        // 触发你的提示逻辑
        showCrashAlert()
    }
    
    // 别忘了初始化Crashlytics(如果还没在其他地方做的话)
    Crashlytics.sharedInstance().start(withAPIKey: "你的APIKey")
    return true
}

为什么推荐?

Crashlytics会在应用崩溃的瞬间,就本地记录一个崩溃标记,下次启动时直接读取这个标记即可,完全不需要我们自己处理复杂的边界情况,准确率极高。


补充:不推荐的方案(读取系统崩溃日志)

有些朋友会想到直接去读取应用沙盒里的崩溃日志文件,但这个方法不仅需要解析复杂的日志格式,而且在iOS 10+之后,应用访问崩溃日志目录的权限有诸多限制,调试时可能能用,但上线后很容易出问题,所以不建议用。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 09:59:30