Swift Package - 分发带有包的独立可执行文件

标签 swift bundle software-distribution swift-package-manager

我正在编写一个 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"]),
    ]
)
我的文件夹结构:
folder structure
如何分发我的脚本以便它也包含其资源?

最佳答案

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/

相关文章:

java - 如何分发具有依赖项的开源 jar?

使用 Protocol Buffer 的 Python 项目,部署问题

ios - 如何在 firebase 的节点中添加子节点

javascript - 将 CSS 和 JavaScript 组合成一个文件并链接它

css - 如何 bundle Angular 2 组件 css?

java - 在嵌入 Android 的 Knopflerfish 上启动 Bundle 不起作用

java - 如何为 Linux 打包游戏?

ios - swift/用户界面开关 : how to implement a delegate/listener

swift - 在 NSStackView 中设置 NSButton 大小

swift - 使用 Generics/Codable w/API 响应 204 NO CONTENT