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

Xcode 9.2中Swift 4项目使用Firestore触发EXC_BAD_ACCESS问题求助

排查Firestore在Xcode9.2 Swift4项目中EXC_BAD_ACCESS崩溃问题

我来帮你分析这个常见的崩溃问题!EXC_BAD_ACCESS通常和内存访问错误或者环境不兼容有关,结合你的场景,大概率是以下几个原因,逐一排查应该能解决:

1. 缺失Firebase全局初始化步骤

Firestore依赖FirebaseApp的全局配置,如果你没在App启动时初始化Firebase,就会导致Firestore实例异常,进而触发内存错误。

解决办法:
打开AppDelegate.swift,在application(_:didFinishLaunchingWithOptions:)方法中添加Firebase初始化代码:

import Firebase

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // 必须在使用Firestore之前调用
    FirebaseApp.configure()
    return true
}

2. Firebase库版本与Xcode/Swift版本不兼容

Xcode9.2对应Swift4,而新版本的Firebase(7.x及以上)已经不再支持这个老旧环境,强行使用会出现各种底层兼容性问题,包括EXC_BAD_ACCESS。

解决办法:
修改你的Podfile,指定适配Swift4和Xcode9的Firebase版本,比如:

# 适配Swift4/Xcode9的Firebase版本
pod 'Firebase/Core', '~> 5.20.0'
pod 'Firebase/Firestore', '~> 5.20.0'

然后在终端执行pod install --repo-update,确保安装的是指定的兼容版本。

3. Bitcode兼容性问题

Xcode9.2默认开启Bitcode,但部分旧版本Firebase库对Bitcode的支持不完善,会导致运行时崩溃。

解决办法:

  • 打开项目Target的Build Settings
  • 搜索Bitcode,将其设置为No

4. 项目缓存导致的异常

有时候旧的编译缓存会干扰新库的运行,清理缓存能解决很多奇怪的问题。

解决办法:

  • 按下Cmd+Shift+K清理Build Folder
  • 重启Xcode后重新编译运行

额外优化:避免强制解包风险

虽然这不是导致当前崩溃的直接原因,但你的代码中ref!.documentID存在强制解包风险,建议改成更安全的写法:

ref = db.collection("users").addDocument(data: [
    "first": "Ada",
    "last": "Lovelace",
    "born": 1815
]) { err in
    guard let currentRef = ref else {
        print("Document reference is nil")
        return
    }
    if let err = err {
        print("Error adding document: \(err)")
    } else {
        print("Document added with ID: \(currentRef.documentID)")
    }
}

按照上面的步骤逐一排查,应该能解决你的崩溃问题!

内容的提问来源于stack exchange,提问作者drekka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:08:59