如何对 swift 包进行版本控制

How to version swift packages

使用 Xcode 12.4 和 Swift 5.3 我已经使用 Package.swift 清单文件定义了一个包。将它包含在应用程序中后,我想更新包。为此,我已将 link 更改为新版本并更新了校验和;文件的相关部分如下所示:

let package = Package(
    name: "MyPackage",
    // omitted platforms and products
    targets: [ .binaryTarget( name: "MyPackage",
                              url: "https://artifactory/mypackage-v1.1.zip",
                              checksum: "..." ) ] )

但是,我收到错误消息 artifact of binary target 'MyPackage' has changed checksum; this is a potential security risk so the new artifact won't be downloaded。通过删除文件夹上的整个 DerivedData 可以忽略此错误,但这显然不会更新版本号。 this answer, but again it doesn't affect versioning. The official documentation 中建议了另一种解决方案,其中广泛介绍了依赖包的版本,但我找不到如何指定当前包的版本。

我如何合法地指定和更新版本号,以便将新工件识别为不同的新版本并正确下载?

当您想使用 xcframework 文件分发(私下或公开)闭源包时,您通常需要创建一个 git 存储库,该存储库仅包含 Package.swift 文件您声明 binaryTarget。 (或 binaryTargets)任何有权访问此存储库的人也应该有权访问您在 binaryTarget 中声明的 url 以安装您的软件包。

正如@Larme 和@matt 在评论中正确提到的那样,要指定每个版本对应哪个提交,您必须像在 cocoapod 存储库中一样使用 git 存储库中的标签,只有您将在包含 Package.swift 文件的存储库中执行此操作。有关详细信息,请参阅 Publishing a Swift Package with Xcode 文档中的“标记您的最新提交”部分。

您可以使用 PSPDFKit 作为示例,它是一个众所周知且维护良好的封闭源代码包,可以使用 this github 存储库进行安装。