使用SPM管理依赖时,Realm Swift单元测试遇模块缺失等问题求助
SPM集成RealmSwift单元测试的模块缺失与重复崩溃问题解决
问题概述
使用Swift Package Manager管理RealmSwift依赖时,编写单元测试遇到以下问题:
- 导入
RealmSwift后报错:Missing required modules: 'Realm.Private', 'Realm' - 手动将
Realm/RealmSwift添加到「Build Phase/Link Binary With Libraries」后,出现重复实现崩溃:Class _TtGC10RealmSwift4ListC3AMA14ROOperatorItem_ is implemented in both ?? (0x7fdf040223b8) and ?? (0x7fdf040c8468). One of the two will be used. Which one is undefined. - MongoDB官方方案针对本地嵌入框架,不适用于SPM场景,需获取SPM下RealmSwift.framework的父路径及有效解决方案。
SPM下RealmSwift.framework的父路径
SPM拉取的RealmSwift框架默认存放在项目的DerivedData目录中,具体路径为:
~/Library/Developer/Xcode/DerivedData/[项目名称]-[随机哈希串]/SourcePackages/checkouts/realm-swift/package/RealmSwift/build/[构建配置(如Debug)]/
可通过Xcode「File > Project Settings」查看DerivedData的具体位置,再按上述层级定位。
解决方案
1. 正确配置单元测试Target依赖
- 选中单元测试Target,进入「Build Phases」
- 在「Dependencies」中添加SPM管理的
Realm和RealmSwift(从依赖列表选择,不要手动添加本地框架) - 移除「Link Binary With Libraries」中手动添加的Realm/RealmSwift条目,避免重复链接
2. 配置Framework Search Paths
- 进入单元测试Target的「Build Settings」
- 找到「Framework Search Paths」,添加以下路径(勾选「Recursive」):
该路径通过环境变量自动适配DerivedData位置,无需硬编码项目名或哈希串。$(DERIVED_FILE_DIR)/../../SourcePackages/checkouts/realm-swift/package/RealmSwift/build/$(CONFIGURATION)
3. 更新RealmSwift版本
- 进入项目「Package Dependencies」,选中RealmSwift,点击「Update to Latest Package Version」
- 确保依赖规则设置为「Up to Next Major Version」,新版本通常修复了SPM集成的测试兼容问题
4. 清理缓存后重建
- 执行「Product > Clean Build Folder」(Cmd+Shift+K)清理构建缓存
- 删除DerivedData目录,重新构建项目,避免缓存残留导致的冲突
内容的提问来源于stack exchange,提问作者stephen
相关产品推荐
相关产品推荐

