无法访问Swift Package中的xcassets资源,调用颜色集失败求助
解决Swift Package中xcassets颜色无法加载的问题
核心问题
直接调用Color("brandPrimary")会默认在当前App模块内查找颜色资源,但你的颜色集属于Swift Package模块,必须显式指定资源所在的Bundle才能正确加载。
具体解决方案
1. 在Swift Package中暴露专属Bundle
在Package的源码目录下新增一个工具文件(比如Bundle+GoodPackage.swift),添加以下代码:
import Foundation extension Bundle { static var goodPackage: Bundle { Bundle.module } }
Swift Package会自动生成Bundle.module变量,指向自身的资源Bundle,无需手动配置路径。
2. 在App代码中指定Bundle加载颜色
修改你的视图代码,使用带Bundle参数的Color初始化器:
Text("Hello") .foregroundColor(Color("brandPrimary", bundle: .goodPackage))
3. 确认Package.swift的资源配置
确保Package的target正确包含资源目录,无需额外复杂配置,保持如下结构即可:
targets: [ .target( name: "GoodPackage", resources: [.process("Resources/Colors.xcassets")] ), // 其他target配置... ]
注意路径要和Package内xcassets的实际存放位置对应,如果颜色集直接在Package根目录下,就写成.process("Colors.xcassets")。
为什么之前的方法无效?
WWDC提到的“资源自动引入”是指Package会将资源打包到自身的专属Bundle中,但App模块无法直接跨模块访问资源。默认的Color(_ name: String)初始化器只会搜索当前模块的资源,因此找不到Package中的颜色集。
内容的提问来源于stack exchange,提问作者Kelvin Lau
相关产品推荐
相关产品推荐

