Xcode12.1日常构建正常但归档时提示Kingfisher模块缺失的问题咨询
归档阶段"No such module 'Kingfisher'"问题排查方案
核心结论:完全不需要无理由把项目最低兼容版本从iOS 9.0强制抬高,该报错是Xcode 12.1环境下依赖版本适配、构建配置错位导致的,和系统兼容范围的基础设置没有直接冲突。
问题本质
日常Debug、真机运行构建能正常完成,是因为这类构建默认只编译当前连接设备/模拟器对应的单架构切片,不会触发全场景编译校验;归档阶段会执行全架构、全系统兼容切片的编译流程,任意环节配置不匹配都会触发模块找不到的报错。之前参考的旧版归档报错方案大多适配iOS 10/11的开发场景,和当前iOS 9.0的兼容配置存在本质差异,直接照搬自然无法生效。
分步修正操作
- 匹配Kingfisher的iOS 9兼容版本线
Kingfisher从7.0版本开始正式终止对iOS 9的支持,编译产物仅包含适配iOS 10及以上系统的二进制切片;如果Podfile中锁定了7.0及以上版本的Kingfisher,归档阶段编译iOS 9兼容切片时会直接跳过该依赖的模块生成,直接触发找不到模块的报错。
对应修正:在Podfile中将Kingfisher版本固定到最后兼容iOS 9的分支版本,即pod 'Kingfisher', '~> 5.15.0'。 - 对齐全链路的构建配置范围
检查主工程、Pods工程中Kingfisher target的最低兼容版本设置,确保所有target的iOS Deployment Target和Podfile全局设置的iOS 9.0完全一致,避免依赖target被默认抬高兼容版本,导致生成的模块二进制和主工程兼容范围不匹配。
检查Release构建配置(即归档使用的配置)下的Build Active Architecture Only选项,设置为No,和Debug构建的架构编译规则保持一致,避免单架构编译导致的模块切片不匹配。
关闭项目的Bitcode开关:Kingfisher 5.x及以上版本不再提供带Bitcode的编译切片,开启Bitcode会导致归档阶段模块校验失败。 - 清理缓存完成全量依赖重装
完全退出Xcode进程后,删除项目目录下的Pods文件夹、Podfile.lock文件、Derived Data缓存目录,执行pod install --repo-update重新拉取匹配版本的依赖,不要复用之前缓存的错误依赖包。
在主工程的User Header Search Paths配置中新增递归搜索路径$(PODS_ROOT)/**,解决Xcode 12.1归档阶段默认不扫描Pods目录下模块文件的已知兼容问题。
以上操作完成后重新执行归档流程,不需要强制升级项目最低兼容版本即可解决该模块缺失报错。
内容的提问来源于stack exchange,提问作者satya dharmawan
相关产品推荐
相关产品推荐

