【问题标题】:Swift Package Manifest - What is the difference between library targets and target dependencies?Swift Package Manifest - 库目标和目标依赖项有什么区别?
【发布时间】:2022-02-03 14:56:42
【问题描述】:

在 Package.swift 中,将目标添加到库中的目标数组与将目标添加到依赖项数组有什么区别。

在第一个示例中,“Helpers”作为依赖项添加到“MySwiftPackage”目标。

let package = Package(
    name: "MyTestPackage",
    products: [
        .library(
            name: "MyTestPackage",
            targets: ["MyTestPackage"]),
        .library(
            name: "Helper",
            targets: ["Helper"]),
    ],
    dependencies: [
    ],
    targets: [
        .target(
            name: "MyTestPackage",
            dependencies: ["Helper"]), // <---- 'Helper' defined as dependency
        .target(
            name: "Helper",
            dependencies: []),
    ]
)

在下一个示例中,“Helper”作为另一个目标添加到“MySwiftPackage”库中。

let package = Package(
        name: "MyTestPackage",
        products: [
            .library(
                name: "MyTestPackage",
                targets: ["MyTestPackage","Helper",]), // <-- 'Helper' defined in targets
            .library(
                name: "Helper",
                targets: ["Helper"]),
        ],
        dependencies: [
        ],
        targets: [
            .target(
                name: "MyTestPackage",
                dependencies: []),
            .target(
                name: "Helper",
                dependencies: []),
        ]
    )

据我所知,这两个选项产生相同的结果:当我将 MySwiftPackage 声明为 Xcode 项目中的依赖项时,我可以同时导入“MySwiftPackage”模块和“Helper”模块。

除了 'Helper' 的放置位置之外,这两个清单文件之间是否存在显着差异?

【问题讨论】:

    标签: swift dependencies swift-package-manager swift-package


    【解决方案1】:

    来自Swift Package Manager Documentation

    A target may build either a library or an executable as its product.
    A library contains a module that can be imported by other Swift code. 
    ...
    

    库是可以被其他 swift 代码导入的东西。

    您的库所依赖的依赖项在

    中定义
    .target(name: "MyTestPackage", dependencies: ["Helper"])
    

    目标可以被认为是模块,组织在文件夹中。

    当您定义MyTestPackage 时,您在包的目标数组中声明其依赖关系Helper。如果您没有在此处声明,MyTestPackage 中的代码将无法导入 Helpers。

    在第一个示例中,库MyTestPackage 的目标包括作为MyTestPackage 的依赖项的帮助程序,因此您可以删除Helper 库并且应该仍然能够在您的项目中导入MyTestPackage 和Helper。

    在第二个示例中,您将MyTestPackageHelpers 声明为构成MyTestPackage 库的目标,因此您应该能够再次删除Helper 库并仍然从两个模块中导入代码。

    如果您要从任一示例中删除这两个库,您将无法将任何代码导入到您的项目中

    【讨论】:

    • 感谢您的信息!
    • @Nobadi 没问题!我自己最近才知道这一点。我在 Swift Package Manager github 项目中发布的文档链接真的很好阅读。
    猜你喜欢
    • 2012-06-30
    • 2014-12-09
    • 2011-08-18
    • 2020-08-31
    • 2017-12-27
    • 2023-03-11
    • 2011-08-10
    • 2017-08-13
    相关资源
    最近更新 更多