我正在编写一个 Swift 脚本作为一个独立的 Swift 包。这个脚本的一部分需要生成一些文件,我有模板。
现在,这些模板不可编译(它们是 HTML 文件);所以为了将它们包含在包中,我将它们包含为 .copy("Templates")
.
在调试我的脚本时,我可以很好地访问模板,但是 当我尝试归档产品时,可执行文件无权访问它们 了。
这是我的 Package.swift:
let package = Package(
name: "flucs",
products: [
.executable(name: "Flucs",
targets: ["flucs"])
],
dependencies: [
.package(url: "https://github.com/MrSkwiggs/Netswift", .exact(.init(0, 3, 1))),
],
targets: [
.target(
name: "flucs",
dependencies: ["Netswift"],
path: "Sources",
resources: [
.copy("Templates")
]),
.testTarget(
name: "flucsTests",
dependencies: ["flucs"]),
]
)
我的文件夹结构:如何分发我的脚本以便它也包含其资源?
最佳答案
SPM 将您的资源编译为单独的包,但命令行工具只是一个没有包的可执行文件,您添加到可执行文件的任何资源都会被 Xcode(构建阶段 > 复制包资源)忽略以进行发布(存档)构建。
如果你看看里面 Bundle.module
你可以找到:
...
// For command-line tools.
Bundle.main.bundleURL,
...
哪里Bundle.main.bundleURL
是包含命令行可执行文件的目录的有效文件 url,以便它在可执行文件旁边查找您的包。它适用于调试,因为 XCode 只是在您的可执行文件附近编译您的资源包。使用已编译的
.bundle
获取 Release 可执行文件的最简单方法文件是从命令行构建你的包:swift build --configuration release
然后你可以在 .build/release
中找到它们。文件夹。
关于Swift Package - 分发带有包的独立可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65018980/