如何在 iOS 应用程序中编程显示目标的版本/版本号?

如何通过编程获得 target version的值,如下图所示?

从我的 Xcode 项目的目标的 Properties 窗口中可以看到。我想在我的应用程序的启动画面中显示这个,这样我就能知道人们目前使用的是哪个版本?

67217 次浏览

2号码!

营销发布号码是针对客户的,称为 版本号码。它从 1.0开始,对 2.03.0进行主要更新,对 1.11.2进行次要更新,对 1.0.11.0.2进行 bug 修复。这个数字是面向发布和新特性的。它不必停留在9,1.11.23是一个合理的版本号。

建筑编号大部分是 内部构造数,一直制造到那时。但是有些使用其他数字,比如存储库的分支号或其提交号。这个数字应该是 独一无二,以区分不同的构建,这些构建只有微小的增量更改。


要得到 版本号码:

目标 C:

NSString * appVersionString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];

Swift < 3.0:

let appVersionString: String = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String

Swift 3.0 + (用5.0测试) :

let appVersionString: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String

要得到 建造号码:

目标 C:

NSString * appBuildString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];

Swift < 3.0:

let buildNumber: String = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String

Swift 3.0 + (测试到5.0) :

let buildNumber: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String

如果你想在一个 都有:

首先使用上面的行,然后使用下面的行。

目标 C:

NSString * versionBuildString = [NSString stringWithFormat:@"Version: %@ (%@)", appVersionString, appBuildString];

Swift (测试到5.0) :

let versionAndBuildNumber: String = "\(appVersionString) (\(buildNumber))"

备注:

主绑定包中的值并不总是存在,例如在命令行应用程序中没有 CFBundleShortVersionStringCFBundleVersion,因此方法将返回 nil,并且它将崩溃,因为在代码中它产生了不正确的向下转换。 但是在普通的 Cocoa iOS 和 Mac 应用程序中,这些值是定义好的,不会被删除。

这是用 Xcode Version 7.3(7D175)测试的。构建号通常用括号/大括号写。生成号为十六进制或十进制。

buildandversion


Xcode中,您可以通过在项目设置中的 Run script构建阶段中放置以下内容,将 建筑编号自动递增为 十进制数

#!/bin/bash    
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"

对于 十六进制版本号,请使用此脚本

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$((0x$buildNumber))
buildNumber=$(($buildNumber + 1))
buildNumber=$(printf "%X" $buildNumber)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"

对于 Xcode,请执行以下操作:

第一步

step1

第二步

step2

第三步

step3

你不需要在你的项目或者 Xcode 中修改任何东西:

let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String

包含在这个回购协议里,看看这个:

Https://github.com/goktugyil/ezswiftextensions

这里的代码与 Swift 3相同:

let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String

以编程方式显示版本和版本号 -Swift 4.0

let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "1.0"


let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "1.0"


let versionAndBuildNumber = "Ver #\(versionNumber) ( Build #\(buildNumber) )"

你也可以用 like

var appVersion: String {
//versionNumber
let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "1.0"


//buildNumber
let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "1.0"


return "Version: #\(versionNumber) (#\(buildNumber))"
}

然后,您可以在声明 Globally 时在任何地方使用。

print(appVersion)

产出:

Version: #1.0 (#1.0.3)

我为 Bundle 做了一个扩展,所以它很容易使用

extension Bundle {
var releaseVersionNumber: String? {
return infoDictionary?["CFBundleShortVersionString"] as? String
}


var buildVersionNumber: String? {
return infoDictionary?["CFBundleVersion"] as? String
}


var applicationName: String {
return infoDictionary?["CFBundleDisplayName"] as? String ?? "ADKATech"
}


var applicationReleaseDate: String {
return infoDictionary?["ApplicationReleaseDate"] as? String ?? Date().description
}


var applicationReleaseNumber: Int {
return infoDictionary?["ApplicationReleaseNumber"] as? Int ?? 0
}


var releaseVersionNumberPretty: String {
return "\(releaseVersionNumber ?? "1.0.0")"
}


var buildVersionNumberPretty: String {
return "\(buildVersionNumber ?? "1")"
}
}