升级Xcode13.4后Swift编译报No such module 'ObjectMapper'错误
Xcode13.4下Carthage依赖报"No such module 'ObjectMapper'"解决方法
按以下优先级逐一排查操作:
- 前置环境校验
先将本地Carthage升级到0.38.0及以上版本,执行命令brew upgrade carthage,低版本Carthage生成的xcframework无法被Xcode13正确识别。 - 清理冗余缓存重新编译依赖
旧版本预编译依赖的Swift版本、架构和Xcode13.4不匹配是这类问题的最高发原因:- 删除项目根目录下整个
Carthage文件夹 - 执行
rm -rf ~/Library/Caches/org.carthage.CarthageKit清除Carthage全局缓存 - 进入项目根目录,执行
carthage update --use-xcframeworks --platform iOS --no-use-binaries,附加--no-use-binaries参数强制在本地环境编译所有依赖,跳过官方提供的旧版本预编译包
- 删除项目根目录下整个
- 修正Build Phases配置
xcframework格式依赖的拷贝脚本和旧版framework不同,原有配置不适配新格式:- 打开Target的Build Phases标签,删除原有执行
/usr/local/bin/carthage copy-frameworks的Run Script条目 - 新增Run Script条目,脚本内容填写
/usr/local/bin/carthage copy-xcframeworks - 在该脚本的Input Files列表中,添加路径
$(SRCROOT)/Carthage/Build/ObjectMapper.xcframework - 检查Link Binary With Libraries列表,删除所有旧的ObjectMapper.framework条目,重新添加Carthage/Build目录下新生成的
ObjectMapper.xcframework
- 打开Target的Build Phases标签,删除原有执行
- 修正Build Settings配置
- 在Build Settings中搜索
Framework Search Paths,确认添加路径$(SRCROOT)/Carthage/Build,并将搜索规则设为recursive - 搜索
Always Embed Swift Standard Libraries,将值设置为Yes - 执行
Cmd+Shift+K清理项目构建产物,关闭Xcode后删除~/Library/Developer/Xcode/DerivedData下对应项目的缓存文件夹,重启Xcode重新构建
- 在Build Settings中搜索
- 仓库地址兼容修正
若以上操作后仍报错,检查Cartfile配置:ObjectMapper原仓库已从Hearst-DD组织迁移,将Cartfile中对应配置修改为github "tristanhimmelman/ObjectMapper" ~> 4.2后重新执行依赖更新流程即可。
注意:不要混用framework和xcframework两种格式的依赖,若项目中残留旧版Carthage生成的.framework格式依赖,会导致Xcode的模块索引逻辑混乱,触发找不到模块的报错。
内容的提问来源于stack exchange,提问作者Zek
相关产品推荐
相关产品推荐

