Xcode引入Kingfisher SPM报错找不到x86_64-apple-ios-simulator模块怎么办
问题根因
之前为适配CocoaPods依赖,你在项目Excluded Architectures配置中添加了arm64架构排除规则,该配置仅对主项目和CocoaPods管理的依赖生效,Swift Package Manager(以下简称SPM)引入的依赖不会自动继承该编译配置:
- 主项目编译iOS模拟器产物时,被强制指定使用x86_64架构
- SPM管理的Kingfisher依赖默认按照当前运行环境编译模拟器产物,Apple Silicon Mac下会输出arm64架构的模块
- 架构不匹配直接触发找不到对应模块的报错
对应参考配置截图:
报错信息原文:
Could not find module 'Kingfisher' for target 'x86_64-apple-ios-simulator'; found: arm64-apple-ios-simulator, at: /Users/amin/Library/Developer/Xcode/DerivedData/MKAMovies-dlhggzhzyxovkxfddvoeqlirqfxi/Build/Products/Debug-iphonesimulator/Kingfisher.swiftmodule
修复方案
任选一种方案操作即可,优先推荐第一种,适配最新Xcode和Apple Silicon原生运行环境:
方案1:移除全局arm64排除规则,统一配置Pods依赖架构(推荐)
CocoaPods 1.10及以上版本已经原生支持Apple Silicon模拟器架构,不需要全局排除arm64即可正常运行,调整配置如下:
- 打开项目Build Settings面板,找到
Excluded Architectures配置项,删除所有环境下针对arm64的全局排除规则 - 打开项目Podfile,在文件末尾添加如下post_install脚本,自动统一所有Pods依赖的模拟器编译架构:
post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| # 适配Apple Silicon模拟器,移除Pods对arm64模拟器的无效排除 config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = '' # 如果你当前使用Rosetta模式运行Xcode,可替换为下行配置 # config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64' end end end
- 终端进入项目目录执行
pod install,执行完成后清理Xcode编译缓存:按快捷键Shift+Command+K清理当前build缓存,再删除~/Library/Developer/Xcode/DerivedData路径下对应项目的缓存文件夹,重新编译项目即可。
方案2:对齐SPM依赖的架构排除配置
如果暂时不想调整现有CocoaPods配置,直接给Kingfisher添加和主项目一致的架构排除规则即可:
- 打开Xcode左侧项目导航栏,找到SPM依赖分类下的Kingfisher target
- 进入Kingfisher的Build Settings面板,找到
Excluded Architectures配置项 - 在
Any iOS Simulator SDK选项下添加arm64,强制Kingfisher编译模拟器产物时同样排除arm64架构,和主项目保持x86_64架构对齐 - 清理编译缓存后重新编译即可。
方案3:使用Rosetta模式运行Xcode
如果是Apple Silicon芯片的Mac,可直接调整Xcode运行模式,让SPM和主项目保持一致的x86_64编译架构:
- 完全退出Xcode,打开应用程序文件夹找到Xcode图标,右键选择「显示简介」
- 勾选「使用Rosetta打开」选项,重新启动Xcode
- 清理编译缓存后重新编译项目即可。
内容的提问来源于stack exchange,提问作者a.rz
相关产品推荐
相关产品推荐

