我正在编写一款iPhone应用,它已经发布了,但我希望添加一个功能,显示其版本号。
我不想每次发布新版本都手动添加这个信息...
在objective-C中有没有一种方法可以找出我的应用程序的版本号?
我正在编写一款iPhone应用,它已经发布了,但我希望添加一个功能,显示其版本号。
我不想每次发布新版本都手动添加这个信息...
在objective-C中有没有一种方法可以找出我的应用程序的版本号?
就像我在这里描述的那样,我使用一个脚本来重写带有当前Subversion修订号的头文件。该修订号存储在kRevisionNumber常量中。然后我可以使用类似以下内容的方式访问版本和修订号:
[NSString stringWithFormat:@"Version %@ (%@)", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"], kRevisionNumber]
这将创建一个格式为“ Version 1.0(51)”的字符串。
CFBundleShortVersionString
通常用于表示版本号,而 CFBundleVersion
用于表示构建号。请注意,对原文意思不要做任何改动。 - Rory[NSString stringWithFormat:@"版本:%@(%@)",[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"],[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]]
。 - Adam在Brad Larson的回答基础上,如果您在info.plist中存储了主要版本号和次要版本号(就像我在某个项目中所做的那样),则以下内容对我很有帮助:
- (NSString *)appNameAndVersionNumberDisplayString {
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
NSString *appDisplayName = [infoDictionary objectForKey:@"CFBundleDisplayName"];
NSString *majorVersion = [infoDictionary objectForKey:@"CFBundleShortVersionString"];
NSString *minorVersion = [infoDictionary objectForKey:@"CFBundleVersion"];
return [NSString stringWithFormat:@"%@, Version %@ (%@)",
appDisplayName, majorVersion, minorVersion];
}
现在手动升级小版本可能很麻烦,因此使用源代码仓库版本号技巧是理想的。如果你没有集成它(就像我一样),上面的片段可能很有用。它还提取了应用程序的显示名称。
分别为两个版本提供的 Swift 代码:
Swift 3
let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String
Swift 2
let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
这个仓库已经包含在里面了,看看吧:
这就是我在我的应用程序中所做的事情。
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
希望这个简单的回答能够帮助到某些人...
有两个东西——构建版本和应用程序版本。
获取应用程序版本:
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
获取构建版本:
NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
objectForInfoDictionaryKey:
而不是infoDictionary] objectForKey:
,因为前者返回本地化的值(如果有的话)。虽然在这里可能没有什么区别;) - deanWombourne获得版本字符串 X.Y.Z 格式的简洁方法是:
[NSBundle mainBundle].infoDictionary[@"CFBundleVersion"]
或者,只需X.Y:
[NSBundle mainBundle].infoDictionary[@"CFBundleShortVersionString"]
这两个代码段返回的是字符串,你可以将它们分配给标签对象的文本属性,例如:
myLabel.text = [NSBundle mainBundle].infoDictionary[@"CFBundleVersion"];
// Syncs with App Store and Xcode Project Settings Input
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary];
NSString *buildVersion = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey]
Swift 5:
有两个概念 - 应用版本和构建版本。
To get App version:
if let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
// present appVersion
}
To get Build version:
if let buildVersion = Bundle.main.infoDictionary?["CFBundleVersion"] as? String {
// present buildVersion
}
非常感谢 @Brad Larson♦