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

如何在Xcode多Target间共享Asset Catalog且不重复拷贝资源文件

解决iOS扩展与主App共享Asset Catalog资源且避免重复拷贝的方法

当你将同一个xcassets目录添加到多个Target(主App和扩展)时,每个Target在编译阶段都会将xcassets编译为独立的.car资源包,并打包到各自的产物中,这就是你观察到产品体积增大的核心原因。以下是符合Apple开发规范的解决方案:

方法一:通过动态共享框架(Dynamic Framework)共享Asset Catalog

这是最可靠的方案,能确保资源仅被打包一次:

  • 创建动态框架Target
    在Xcode中选择File > New > Target,选择iOS > Framework & Library > Cocoa Touch Framework,完成命名后创建。
  • 迁移资源到框架
    将主App中的xcassets文件拖到新框架Target中,弹出选项里仅勾选框架Target,取消主App和扩展的勾选(后续通过依赖框架访问资源)。
  • 配置主App与扩展的依赖
    • 主App Target:进入General > Frameworks, Libraries, and Embedded Content,添加该框架,设置Embed选项为Embed & Sign。
    • 扩展Target:同样添加框架依赖,设置Embed选项为Do Not Embed(扩展运行时会从主App沙盒加载框架资源)。
  • 访问共享资源
    在主App和扩展中,通过指定框架的Bundle加载资源,示例代码:
    // 替换为你框架中的任意类名,比如SharedAssetsKit
    let frameworkBundle = Bundle(for: SharedAssetsKit.self)
    let sharedImage = UIImage(named: "yourImageName", in: frameworkBundle, compatibleWith: nil)
    

方法二:App Groups共享(不推荐用于Asset Catalog)

虽然App Groups允许主App和扩展共享文件系统资源,但Asset Catalog编译后的.car是二进制打包格式,无法直接通过文件系统共享。该方法仅适合原始图片文件,而非Asset Catalog,因此不推荐作为首选方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 14:47:04