如何获得 iOS 项目的当前版本的代码?

我希望能够得到我的 iOS 项目/应用程序的当前版本作为一个 NSString对象,而不必定义一个常量在文件的某个地方。我不想在两个地方更改我的版本值。

当我在 Project 目标摘要中碰撞我的版本时,这个值需要更新。

72825 次浏览

您可以得到版本号和构建编号,如下所示:

let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let build = Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as! String

或目标 C

NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleShortVersionString"];
NSString * build = [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *)kCFBundleVersionKey];

UIApplication的分类中,我有以下方法:

extension UIApplication {


static var appVersion: String {
return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
}


static var appBuild: String {
return Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as! String
}


static var versionBuild: String {
let version = appVersion, build = appBuild
return version == build ? "v\(version)" : "v\(version)(\(build))"
}
}

要点: < a href = “ https://Gist.github.com/ashleyMills/6ec9fce6d7ec2a11af9b”rel = “ noReferrer”> https://Gist.github.com/ashleymills/6ec9fce6d7ec2a11af9b


下面是 Objective-C 中的等价物:

+ (NSString *) appVersion
{
return [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleShortVersionString"];
}


+ (NSString *) build
{
return [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *)kCFBundleVersionKey];
}


+ (NSString *) versionBuild
{
NSString * version = [self appVersion];
NSString * build = [self build];


NSString * versionBuild = [NSString stringWithFormat: @"v%@", version];


if (![version isEqualToString: build]) {
versionBuild = [NSString stringWithFormat: @"%@(%@)", versionBuild, build];
}


return versionBuild;
}

要点: https://Gist.github.com/ashleymills/c37efb46c9dbef73d5dd

在 Swift 中,您可以使用以下命令获得 bundle 版本:

let info:NSDictionary = NSBundle.mainBundle().infoDictionary!


let version:String = info.objectForKey("CFBundleShortVersionString") as! String


versionLabel.text = "Version:" + version

我的一个开源项目 应用程序更新跟踪器以类方法的形式提供了这个(以及更多)功能:

  • + (NSString *)getShortVersionString
  • + (NSString *)getLongVersionString

你会这样使用它:

#import "AppUpdateTracker.h"


NSLog(@"short version: %@", [AppUpdateTracker getShortVersionString]);
NSLog(@"long version: %@", [AppUpdateTracker getLongVersionString]);

因此,这里有一个斯威夫特版本的这两个单独的:

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

它包含在这个回购,检查它:

Https://github.com/goktugyil/ezswiftextensions

目标 C:

1)要获得应用程序版本,你必须使用:

NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];

2)要获得 Build 版本,你必须使用:

NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];

以下是 Xcode 8,Swift 3:的工作原理

let gAppVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "0"
let gAppBuild = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "0"


print("Version: \(gAppVersion)")
print("Build: \(gAppBuild)")

只是提醒一下

要获得任何键的本地化值,应使用 CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)

[ Swift version: 5.2]

所有 iOS 应用程序都必须在它们的 Info.plist 文件中存储应用程序版本号,但是没有内置的方法可以将其作为字符串在代码中使用。

我为 UIApplication 创建了一个小的扩展,读取 Info.plist 文件并自动返回版本号。

密码是这样的:

extension UIApplication {
static var appVersion: String? {
return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String
}
}

控制器内部

@IBOutlet weak var tv_version: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
   

//Display Version
setUpCurrentVersion()
}




func setUpCurrentVersion(){
tv_version.text = "v" + UIApplication.appVersion!
}