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

无法访问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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:33:22