Test results Latest release swift 6.0 shield Platforms: macOS

版本生成器 (Versionator)

此插件收集版本信息,并将其嵌入到软件包/可执行文件中,使其可以在运行时检索。

我们实际上生成了几个文件

请参阅 https://github.com/elegantchaos/VersionatorTest,获取使用该插件的命令行工具示例。

Swift API

生成的 Swift API 定义了一个 CurrentVersion 结构体,其中包含一些静态属性

public struct VersionatorVersion {
  static let string = "1.0.0"
  static let build = 4
  static let commit = "g70f8f9a"
  static let git = "v1.0.0-0-g70f8f9a"
  static let tag = "v1.0.0"
  static let full = "1.0.0 (4)"
}

构建版本号源自当前分支上的 git 提交计数。这是一种相当标准的技术。

git 风格的字符串源自当前分支上的最新版本标签。

目前我只是原封不动地返回它,但可以扩展该插件以更完整地解析它。

Info.plist

此插件还会生成一个 Info.plist 文件,它会被捆绑到软件包资源中。

然后可以使用 Bundle.module.infoDictionary 访问它。

头文件

对于基于 Xcode 的应用程序,Info.plist 可能需要包含许多其他值,因此使用 Versionator 生成的文件可能不是一个选项。

在这种情况下,更好的方法是拥有一个使用 Versionator 插件的本地包,然后将 INFOPLIST_PREFIX_HEADER 设置为指向本地包资源捆绑包中生成的 Info.plisth 文件。

此文件定义了一些变量

#define BUILD 4
#define CURRENT_PROJECT_VERSION 4
#define COMMIT "70f8f9a"
#define GIT_VERSION "v1.0.0-0-g70f8f9a"
#define GIT_TAG "v1.0.0"

然后,您可以使用标准语法将这些变量替换到您的 Info.plist 定义中 - 例如:${GIT_VERSION}

请注意,我们在此处使用非标准文件扩展名,以避免 Swift Package Manager 混淆。生成一个 .h 文件将导致 SPM 将软件包视为混合 Swift/C,这在此上下文中是不允许的。

有关生成 Info.plist 的另一种方法,另请参见 Infomatic Plugin

Xcode 问题?

注意:从构建工具输出 Info.plist 资源似乎会在 Xcode 中产生错误

note: Run script build phase 'Calculating Version' will be run during every build because the option to run the script phase "Based on dependency analysis" is unchecked. (in target 'VersionatorTest_VersionatorTestWithResources' from project 'VersionatorTest')
warning: duplicate output file '/Users/sam/Library/Developer/Xcode/DerivedData/VersionatorTest-ejghobxgggddhabfxovpkctjsdcf/Build/Products/Debug-iphoneos/VersionatorTest_VersionatorTestWithResources.bundle/Info.plist' on task: ProcessInfoPlistFile /Users/sam/Library/Developer/Xcode/DerivedData/VersionatorTest-ejghobxgggddhabfxovpkctjsdcf/Build/Products/Debug-iphoneos/VersionatorTest_VersionatorTestWithResources.bundle/Info.plist /Users/sam/Library/Developer/Xcode/DerivedData/VersionatorTest-ejghobxgggddhabfxovpkctjsdcf/Build/Intermediates.noindex/VersionatorTest.build/Debug-iphoneos/VersionatorTest_VersionatorTestWithResources.build/empty-VersionatorTest_VersionatorTestWithResources.plist (in target 'VersionatorTest_VersionatorTestWithResources' from project 'VersionatorTest')

我不确定这是否是 Xcode 集成中的错误,或者是否有建议的解决方法。最好的方法可能是将本地包添加到您的 Xcode 项目并让它使用该插件。