如何解决Xcode中DerivedData下模块文件的signature mismatch错误
错误根因
该报错是Xcode 12.5版本的已知缺陷,隐式模块缓存的签名校验逻辑存在bug,当出现切换Xcode版本、修改SDK配置、增量编译改动依赖头文件等场景时,就会触发模块缓存签名不匹配的问题,仅在缓存生成后出现,首次无缓存构建不会触发。
彻底解决方案
- 方案1:调整项目构建设置禁用隐式模块
打开项目Build Settings,找到Build Options分类下的Enable Modules (C and Objective-C)配置,若项目没有强依赖模块特性,可直接将Debug模式下的该项设置为NO,从根源关闭模块缓存机制,彻底避免该报错。如果需要保留模块能力,可将Explicit Modules配置设置为YES,强制使用显式模块声明,避免Xcode自动生成的隐式缓存出现签名冲突。 - 方案2:添加构建前置脚本自动清理模块缓存
在项目构建阶段的最前面新增Run Script脚本,填入以下命令:
rm -rf ~/Library/Developer/Xcode/DerivedData/ModuleCache.noindex
每次Debug构建前会自动清理模块缓存,无需手动删除全量DerivedData,执行速度快也不会影响其他项目的缓存。
- 方案3:为不同版本Xcode指定独立缓存路径
如果团队同时使用多个版本的Xcode,可在Xcode > Preferences > Locations中,将DerivedData设置为自定义路径,给每个Xcode版本指定单独的缓存文件夹,例如Xcode12.5专属路径命名为DerivedData-Xcode125,避免不同版本Xcode生成的缓存互相覆盖导致签名不匹配。 - 方案4:升级Xcode版本
该模块缓存签名校验缺陷在Xcode 13.4及以上版本已经被官方修复,如果项目没有兼容限制,升级Xcode到最新稳定版是最一劳永逸的解决方式。
内容的提问来源于stack exchange,提问作者JimmyDeemo
相关产品推荐
相关产品推荐

