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

Xcode 16.2:如何使Package中资产生成的Swift符号设为public?

如何让Xcode为Package资源生成public访问级别的扩展?

从Xcode 15开始,编译器会自动为资源目录中的资产(如颜色、图片)生成静态变量。例如在名为MyLibrary的Package中添加了ColorTestInsidePackage颜色资源,Package配置如下:

// swift-tools-version: 6.0
import PackageDescription

let package = Package(
    name: "MyLibrary",
    platforms: [
        .iOS(.v17),
    ],
    products: [
        .library(
            name: "MyLibrary",
            targets: ["MyLibrary"]),
    ],
    targets: [
        .target(
            name: "MyLibrary",
            resources: [
                .process("Resources")
            ]),
    ]
)

在Package内部可通过三种方式访问该颜色:

import SwiftUI

public final class TestClass {
    let colorResource = ColorResource.colorTestInsidePackage
    let color = Color(.colorTestInsidePackage)
    let colorFromExtension = Color.colorTestInsidePackage
}

其中Color.colorTestInsidePackage是通过资源目录设置中强制生成的扩展实现的,但外部应用或其他Package访问这些资产时会触发编译错误——因为自动生成的扩展默认使用internal访问修饰符,外部无法访问。

需求场景:在Package中搭建UI组件库和设计系统,让内部组件与外部应用均可直接使用这些共享颜色资源,无需重复导入资产库。


解决方案

有两种方式可以让编译器生成public级别的资源扩展:

方法1:通过Package配置全局设置

在Package的target配置中,为资源添加access: .public参数,编译器会为该目标下所有资源自动生成public级别的扩展:

.target(
    name: "MyLibrary",
    resources: [
        .process("Resources", access: .public)
    ]),

方法2:针对单个资源目录手动配置

  1. 打开Package中的.xcassets资源目录
  2. 选中目录本身,打开右侧检查器(Inspector)
  3. 在「Code Generation」区域,将「Access Level」从默认的Internal修改为Public

完成上述任一设置后,生成的Color、Image等扩展会带有public修饰符,外部目标导入你的Package后,即可直接通过Color.colorTestInsidePackage这类语法访问资源。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 09:12:02