我尝试使用Swift Package(src)中xcassets
文件夹中的颜色集。它似乎不起作用。我通过编写一个简单的视图尝试使用该颜色来测试这一点:
Text("Hello")
.foregroundColor(Color("brandPrimary")
我从这段代码中得到了一个空视图;文本找不到颜色。
我在网络上做了大量的研究--回顾了一些WWDC视频,比如Swift packages: Resources and localization,他们似乎建议xcassets
文件夹自动包含为资源。
我试着在package manifest中添加process("Resources/Colors.xcassets")
,但也无济于事。
1条答案
按热度按时间vxbzzdmp1#
从the
Color
documentation开始:init(_ name: String, bundle: Bundle? = nil)
...
一米二米一x
要在其中搜索颜色资源的捆绑包。如果您未指定捆绑包,则初始化程序默认情况下会在应用的主捆绑包中查找。
GoodPackage库的资源不是应用的主包,因此您需要告诉
Color
初始化器要搜索哪个包。Swift包管理器的构建过程会自动为每个包含资产的目标/模块创建一个
Bundle
。在模块中,你可以使用表达式Bundle.module
访问生成的Bundle
。SwiftPM实际上会将Swift代码写入DerivedData中名为resource_bundle_accessor.swift
的文件中,以使其正常工作。生成的源代码如下所示:如您所见,
static let module
属性具有(默认)内部访问权限,因此您只能从该模块内的源代码使用它,默认情况下,无法从模块外部访问模块的Bundle
。一种解决方案是为GoodPackage模块中的模块
Bundle
添加一个公共访问器。例如,将以下内容添加到GoodPackage模块中的源文件:然后,在您的应用中: