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

Swift Package:共享代码的双颜色资产库,Color扩展无法使用

解决Swift Package多颜色资产共享代码的问题

你的思路完全可行——可以创建两个共享核心代码、仅颜色资产不同的库,让用户通过SPM选择使用。问题出在核心代码的访问权限和Package.swift的配置细节上,下面是具体解决步骤:

1. 修正核心代码的访问权限

PackageName目标里的Color扩展默认是internal权限(仅能在同一目标内访问),必须改成public才能让依赖它的Library1/Library2以及外部项目调用。

修改你的Color扩展代码:

// 原来的默认internal代码
// extension Color {
//     static let primary = Color("Primary")
// }

// 修改为public权限
public extension Color {
    static let primary = Color("Primary")
    // 其他颜色扩展同理设置为public
}

2. 调整Package.swift配置

确保核心目标PackageName的路径正确,Library1/Library2能正确依赖它,同时保证资源文件路径结构规范:

  • 核心代码建议迁移到Sources/PackageName子目录(如果原文件都在/Sources根目录,迁移后结构更清晰)
  • 在Package根目录创建Resources文件夹,分别放入Library1.xcassets和Library2.xcassets,各自存放对应颜色资产

修改后的Package.swift示例:

let package = Package(
    name: "PackageName",
    platforms: [.iOS(.v14)],
    products: [
        .library(name: "Library1", targets: ["Library1"]),
        .library(name: "Library2", targets: ["Library2"])
    ],
    targets: [
        // 核心代码目标:包含所有共享逻辑和Color扩展
        .target(
            name: "PackageName",
            path: "Sources/PackageName"
        ),
        // 绑定Library1颜色资产的库
        .target(
            name: "Library1",
            dependencies: ["PackageName"],
            resources: [.process("Resources/Library1.xcassets")]
        ),
        // 绑定Library2颜色资产的库
        .target(
            name: "Library2",
            dependencies: ["PackageName"],
            resources: [.process("Resources/Library2.xcassets")]
        ),
        // 可选:测试目标
        .testTarget(
            name: "PackageNameTests",
            dependencies: ["PackageName"]
        )
    ]
)

3. 验证使用流程

外部项目通过SPM添加你的包时:

  1. 只需选择Library1或Library2作为依赖(无需选择PackageName)
  2. 代码中直接调用Color.primary这类扩展,系统会自动加载对应库的颜色资产

关键注意点

  • 颜色资产的名称必须和Color扩展里引用的名称完全一致(比如扩展用Color("Primary"),xcassets里就要有名为Primary的颜色)
  • 如果不想迁移核心代码目录,可将PackageName目标的path设为"Sources",但分目录管理更利于后续维护

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:51:09