一尘不染

如何在Swift Package Manager库中包含资产/资源?

swift

我想使用Apple的Swift Package
Manager来运送我的图书馆。但是,我的lib包含一个.bundle文件,其中包含多个以不同语言翻译的字符串。使用cocoapods,我可以使用spec.resource包含它。但是在SwiftPM中,我做不到。有什么办法吗?


阅读 371

收藏
2020-07-07

共1个答案

一尘不染

使用Swift 5.3,最终可以添加本地化的资源🎉

包初始化程序知道一个defaultLocalization参数,该参数可用于本地化资源。

public init(
    name: String,
    defaultLocalization: LocalizationTag = nil, // New defaultLocalization parameter.
    pkgConfig: String? = nil,
    providers: [SystemPackageProvider]? = nil,
    products: [Product] = [],
    dependencies: [Dependency] = [],
    targets: [Target] = [],
    swiftLanguageVersions: [Int]? = nil,
    cLanguageStandard: CLanguageStandard? = nil,
    cxxLanguageStandard: CXXLanguageStandard? = nil
)

假设Icon.png您要针对英语和德语的人进行本地化。

图像应包含在Resources/en.lproj/Icon.png&中Resources/de.lproj/Icon.png

在可以像这样在包中引用它们之后:

let package = Package(
    name: "BestPackage",
    defaultLocalization: "en",
    targets: [
        .target(name: "BestTarget", resources: [
            .process("Resources/Icon.png"),
        ])
    ]
)

请注意LocalizationTagIETF语言标签的包装。

以下提案概述的功劳和贡献,请检查更多细节。

2020-07-07