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
相关产品推荐
相关产品推荐

