【问题标题】:Swift 4: Local Dependencies with Swift Package Manager?Swift 4:使用 Swift 包管理器的本地依赖?
【发布时间】:2018-09-23 23:08:43
【问题描述】:

我正在将相当大的代码库从 Java 移植到服务器端 Swift 4。代码本身将在 macOS 上开发,但最终会部署在 Linux 上。我使用 Swift 包管理器创建了单独的模块项目。其中一些是库项目,最终是一个可执行文件,可以将它们捆绑在一起以启动。我已经为每个模块生成了 Xcode 项目文件,以便我可以轻松地在 Xcode 中进行开发,并且我已经创建了一个 Xcode 工作区来将它们全部组合到一个视图中。

我的问题是,如何指示这些本地模块之间的依赖关系?我的可执行模块显然将依赖于所有的库模块。如何在我的 Package.swift 文件中表示这一点?我已经尝试过这样的事情......

let package = Package(
    name: "MySwiftExe",
    dependencies: [
        //.package(url: "../MySwiftLib", from: "1.0.0"),

...

但这无法构建。有没有办法指定位于同一文件系统上的依赖项?还是我需要从 Git 中获取依赖项?

【问题讨论】:

    标签: swift linux dependencies swift-package-manager


    【解决方案1】:

    设置url值为file:///path/to/swiftlib:

    let package = Package(
    name: "MySwiftExe",
    dependencies: [
        .package(url: "file:///path/to/MySwiftLib", from: "1.0.0"),
    
    ...
    

    【讨论】:

    • 我可以使用相对路径吗?还是必须是绝对的?
    • 此时必须是绝对的。但是,我确实找到了这个最近接受的提议:SE-0201: Package Manager Local Dependencies。未来似乎会改变这一点。
    • 而且我认为它也必须是一个 git repo,对吗?
    • 是的,它也必须是一个 git repo。
    • 你可以通过这种方式使用相对路径(url中没有file方案):.package(url: "../MySwiftLib", from: "1.0.0")。请注意,依赖包仍然必须是带有标签的 git 存储库(本地)。不会获取本地依赖项中未标记的更改。
    【解决方案2】:

    您的 URL 可以是相对的,因此 ../MySwiftLib 完全有效。但是,源目录必须是 git 存储库。建议标记此 repo,但您也可以这样做:

    .package(url: "../MySwiftLib", .branch("master"))

    如果你想使用master 分支上的任何代码。

    希望这会有所帮助!

    【讨论】:

    • 您能否展示您正在加载到某个项目中的库的 Package.swift 和 Info.plist ?以及用于加载库的 Package.swift。我无法让它工作。获取error: no such module foo
    • @LancePollard 在 swift.org 上有示例可用,例如这个页面:swift.org/package-manager
    • 您只需将网址更改为相对网址或file://网址
    猜你喜欢
    • 1970-01-01
    • 2020-08-11
    • 2022-08-12
    • 1970-01-01
    • 2017-02-04
    • 2021-10-10
    • 2021-09-25
    • 1970-01-01
    • 2017-05-15
    相关资源
    最近更新 更多