You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xcode13搭配CocoaPods发布App到TestFlight时模块资源丢失问题

问题根因

这是Xcode 13新增的App Store资源优化机制导致的问题,该机制仅对上传到App Store Connect(含TestFlight)的构建包生效,本地开发、真机调试、adhoc打包都不会触发:
苹果会默认将所有子bundle中的xcassets资源全部合并到主App的统一Assets.car文件中,同时删除各个子bundle内原本存在的Assets.car文件。你现有模块的资源加载逻辑是从模块自身的独立bundle中读取资源,TestFlight构建包中模块bundle下已经不存在Assets.car,所以会出现资源加载失败的问题。

解决方案

  • 方案1(最快适配,无需修改业务代码/模块配置)
    在主App的Xcode构建设置中,找到Asset Catalog Compiler - Options分组下的Optimize Asset Catalogs for App Store Distribution配置项,将值改为NO即可。关闭该优化后苹果不会再合并各子bundle的xcassets资源,原有逻辑可以直接复用。
  • 方案2(适配优化机制,长期推荐)
    修改各业务模块的资源加载逻辑,加载xcassets中的图片、颜色资源时,使用官方推荐的API指定查找范围:
    OC示例:[UIImage imageNamed:@"resource_name" inBundle:module_bundle compatibleWithTraitCollection:nil];
    Swift示例:UIImage(named: "resource_name", in: moduleBundle, with: nil)
    注意该写法需要配合CocoaPods 1.11.3及以上版本使用,你当前用的1.11.2版本存在资源映射bug会导致该API失效,建议先升级CocoaPods版本。
  • 方案3(临时验证用)
    上传TestFlight时,在Xcode导出构建包的界面,取消勾选「包含位码」选项,也可以规避该优化,但苹果后续会强制要求开启bitcode,该方案仅适合临时验证问题。

另外你当前的podspec配置中resource_bundles的资源规则存在冗余:你已经包含了*.xcassets,不需要额外添加imageset、colorset后缀,删除冗余的后缀配置可以避免部分场景下资源重复打包的问题。

内容的提问来源于stack exchange,提问作者llKoull

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:54:02