XCode 9.1归档失败:找不到RealmSwift/ObjectMapper模块及架构兼容问题
解决Xcode 9.1归档时找不到RealmSwift/ObjectMapper且兼容旧设备的方案
你遇到的这个问题在Xcode版本迁移中很常见,真机调试正常但归档失败,核心原因是Release模式下的架构编译逻辑和调试模式不一致,第三方库的架构配置和主项目出现了不匹配。结合你已经定位到的架构问题,这里有几个可行的解决办法,既能成功归档,又能保留对iPhone 5s及以下设备的支持:
方案1:统一主项目与Pods的架构配置
首先确保主项目和所有第三方库Target的架构设置完全对齐:
- 打开Xcode主项目的
Build Settings,找到Architectures分组:- 将
Architectures设置为Standard Architectures (armv7, arm64) - 将
Valid Architectures设置为armv7 armv7s arm64 - 在
Release模式下,把Build Active Architecture Only改为NO(这是关键,Release模式需要编译所有指定架构,而非仅当前设备的架构)
- 将
- 接着打开项目中的
Pods.xcodeproj,对RealmSwift、ObjectMapper等所有用到的第三方库Target,重复上述架构设置步骤,保证和主项目完全一致
方案2:通过Podfile自动统一所有Pod的架构
如果一个个修改Pod Target太繁琐,可以修改Podfile的post_install钩子,让CocoaPods自动为所有依赖配置正确的架构:
post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['SWIFT_VERSION'] = '4.0' # 添加架构统一配置 config.build_settings['ARCHS'] = 'armv7 armv7s arm64' config.build_settings['VALID_ARCHS'] = 'armv7 armv7s arm64' # 仅在Release模式下关闭"仅编译活跃架构" if config.name == 'Release' config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO' end end end end
修改完成后,执行终端命令pod install让配置生效。
方案3:清理缓存并重新构建
旧的编译缓存可能会导致架构不匹配的遗留问题,建议彻底清理后重新构建:
- 执行终端命令:
pod deintegrate,完全移除当前Pods配置 - 再执行
pod install重新安装所有依赖 - 在Xcode中按下
Cmd+Shift+K清理项目缓存,接着按下Cmd+Option+Shift+K清理DerivedData - 重启Xcode后尝试归档
问题根源说明
Xcode 9之后默认的架构编译逻辑有调整,部分第三方库的Podspec可能未明确声明对armv7/armv7s的支持。另外,真机调试时Xcode默认仅编译当前设备的架构(比如arm64),所以运行正常;但归档时如果指定了多架构,而Pod没有编译对应架构的版本,就会出现"找不到模块"的错误。
内容的提问来源于stack exchange,提问作者Florian Mac Langlade
相关产品推荐
相关产品推荐

