此插件收集版本信息,并将其嵌入到软件包/可执行文件中,使其可以在运行时检索。
我们实际上生成了几个文件
Version.swift
文件,然后将其构建到软件包中Info.plist
文件,它作为软件包资源嵌入Info.plisth
C 风格的头文件,具有非标准扩展名,因此将其捆绑到资源中请参阅 https://github.com/elegantchaos/VersionatorTest,获取使用该插件的命令行工具示例。
生成的 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
文件,它会被捆绑到软件包资源中。
然后可以使用 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。
注意:从构建工具输出 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 项目并让它使用该插件。