目前,从Xcode 15开始,可以为资产目录中的每个资产项目自动创建静态变量,例如颜色或图像
,例如,我有一种名为ColorTestInsidePackage
的颜色,包装结构看起来像这样:
// swift-tools-version: 6.0
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "MyLibrary",
platforms: [
.iOS(.v17),
],
products: [
.library(
name: "MyLibrary",
targets: ["MyLibrary"]),
],
targets: [
.target(
name: "MyLibrary",
resources: [
.process("Resources")
]),
]
)
在包装中,我可以通过以下方式访问颜色:
import SwiftUI
public final class TestClass {
let colorResource = ColorResource.colorTestInsidePackage
let color = Color(.colorTestInsidePackage)
let colorFromExtension = Color.colorTestInsidePackage
}
最后一行之所以可能仅仅是因为我在资产目录设置中强迫扩展生成:,但是,当我尝试从应用程序中访问这些颜色时,生成的资产都无法访问,并且我遇到了汇编错误,仅仅是因为扩展程序是使用
internal
访问修改器创建的。问题
有任何方法可以确保编译器使用public
访问修饰符创建这样的扩展名,以便我可以使用此软件包在其他目标中使用它(例如,应用程序目标或其他软件包目标)?
用语case
在包装中创建UI组件库和设计系统,以便我可以使用UI组件库和应用程序本身内部的颜色(由于颜色显然是共享的),并且不要导入相同的颜色资产库进入应用程序目标。如果您想从主应用程序访问这些颜色,则必须自己制作扩展名:
public extension Color {
static var primaryColorInDesignSystem : Color = Color("primaryColorInDesignSystem", bundle: Bundle.module)
static var secondaryColorInDesignSystem : Color = Color("secondaryColorInDesignSystem", bundle: Bundle.module)
...
}