Xcode 15升级后iOS应用启动崩溃:_OBJC_CLASS_$_RLMApp符号缺失求助
解决方案
核心问题定位
崩溃日志显示RealmSwift.framework依赖的_OBJC_CLASS_$_RLMApp符号无法在Realm.framework中找到,本质原因是项目中存在两套不一致的Realm依赖:你自行用Carthage构建的库内置了一套Realm,应用端又单独引入了GitHub预编译的另一套Realm,两者的版本、编译环境(Xcode版本)不匹配,导致符号兼容性问题。
具体修复步骤
1. 统一Realm依赖方式,消除版本/构建差异
- 方案一:应用端改用Carthage构建Realm,与自定义库保持一致
- 在应用项目的
Cartfile中添加对应版本的Realm依赖:github "realm/realm-swift" ~> 10.45.3 - 执行Carthage命令构建统一版本的Realm:
carthage update Realm --use-xcframeworks --platform ios
- 在应用项目的
- 方案二:自定义库改用GitHub预编译的Realm xcframework,与应用端依赖对齐
删除自定义库中Carthage管理的Realm,替换为和应用端相同的预编译xcframework文件。
2. 清理项目缓存与旧依赖
- 删除项目Derived Data:Xcode菜单 →
File→Project Settings→ 点击Derived Data路径旁的箭头,删除整个文件夹。 - 清理构建缓存:Xcode菜单 →
Product→Clean Build Folder(快捷键Cmd+Shift+K)。 - 删除应用端和自定义库中所有旧的Realm/RealmSwift框架文件,重新添加统一后的xcframework。
3. 检查构建配置,避免重复嵌入
- 在应用项目的Build Phases中:
- 确保
Realm.xcframework和RealmSwift.xcframework仅在Embed Frameworks阶段出现一次,无重复条目。 - 自定义库框架无需嵌入Realm(由应用端统一嵌入,避免重复加载导致冲突)。
- 确保
- 检查
Build Settings中的Framework Search Paths,移除旧的Realm路径,只保留统一后的框架路径。
4. 验证版本与编译环境一致性
- 确认自定义库和应用端使用的Realm版本完全相同,可通过
Cartfile.resolved文件核对版本号。 - 确保自定义库构建时使用的Xcode版本与应用端当前的Xcode 15.1/15.2一致,避免因Xcode版本差异导致ABI不兼容。
内容的提问来源于stack exchange,提问作者Pitoneux
相关产品推荐
相关产品推荐

