iOS App版本管理,Version和Build的用法
所属分类:ios | 发布于 2023-06-08 12:18:55
自学者对iOS App的版本管理是一头雾水,只知道在Target的general的Indentity下面有Version和Build这两个定义是与版本管理有关系,但是它们具体是什么意思,只能是自己瞎猜测,Version可以猜测为版本号,那么Build呢,是构建号吗?它是一个越来越大的整数吗?
在Android App中有VersionName和VersionCode两个定义,android中的versioName等价于iOS中的version,android中的versionCode等价于iOS中的build,是这样吗?
直到仔细看到了下面这张图,才算有点感觉,好像有点懂了这两者的关系。
CFBundleVersion:标志app迭代的内部版本,咦,和android的versionCode是一个意思,给开发人员以及应用商店看的。
CFBundleShortVersionString:app版本号,对应android的versionName,给用户看的。
CFBundleVersion
(标识捆绑包迭代的内部版本)
这个键是一个机器可读的字符串,由一到三个以句点分隔的整数组成,例如10.14.1。字符串只能包含数字字符(0–9)和句点。
每个整数以[Mjor]格式提供有关内部版本的信息。[轻微]。[补丁]:
- Major:主要修订号。
- Minor:次要修订号。
- Patch:维护发布号。
您可以包含更多的整数,但系统会忽略它们。
您也可以只使用一个或两个整数来缩写构建版本,其中格式中缺少的整数被解释为零。例如,0指定0.0.0,10指定10.0.0,10.5指定10.5.0。
此密钥是应用商店所必需的,并在整个系统中用于识别版本。对于macOS应用程序,在分发构建之前增加构建版本。
最终结论:iOS App中的CFBundleVersion就等价于Android App中的VersionCode,但是写法规则有区别,Android的VersionCode是一个不断增长的整数,iOS的CFBundleVersion是一个由一到三个整数组成的字符串,这个字符串可以缩写成一个整数。
CFBundleShortVersionString
(捆绑包的发行版或版本号)
此键是捆绑包版本的用户可见字符串。所需的格式是三个以句点分隔的整数,例如10.14.1。字符串只能包含数字字符(0–9)和句点。
每个整数以[Mjor]的格式提供有关发布的信息。[轻微]。[补丁]:
- Major:主要修订号。
- Minor:次要修订号。
- Patch:维护发布号。
该密钥在整个系统中用于识别捆绑包的版本。
CFBundleShortVersionString为您提供应用程序的版本。它通常会在您每次将应用程序发布到应用商店时递增。这是在应用程序的应用商店页面的“版本”部分可见的版本。
CFBundleVersion为您提供了用于开发和测试的内部版本号,即“技术”目的。最终用户很少对内部版本号感兴趣,但在开发过程中,您可能需要了解每个内部版本正在开发和修复的内容。这通常在内部发布的每次迭代中都会增加。您可以使用Jenkins这样的连续集成工具来自动增加每个构建的构建号。
最终结论:iOS App中的CFBundleShortVersionString等价于Android App中的VersionName,写法规则也一样。
这两个数字并不相互依赖,但保持它们平行以避免混淆是个好主意。请记住,一旦你的应用程序通过了应用商店的审查,无论你是否发布,你都需要像Phil和TheSky所说的那样增加构建号。
用例:比方说,您有一个经过良好测试的构建,可以提交了。它的版本号是1.0.0,内部版本号是1.00.32。提交应用程序后,您需要将版本更新为1.0.1,将版本号更新为1.0.1.0。
Swift获取version和build
import Foundation
if let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String {
print("App version: \(appVersion)")
} else {
print("your platform does not support this feature.")
}
if let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as? String {
print("Build number: \(buildNumber)")
} else {
print("your platform does not support this feature.")
}