我的iPhone应用程序如何检测自己的版本号?
我正在写一个iPhone应用程序。 它已经发布了,但是我想添加一个显示版本号的function。
我宁愿不必手动与我释放的每个版本…
在Objective-C中有一种方法来找出我的应用程序的版本是什么?
正如我在这里所描述的 ,我使用一个脚本来重写一个包含我当前版本号的头文件。 该版本号存储在kRevisionNumber常量中。 然后,我可以使用类似于以下内容的方式访问版本号和修订版号:
[NSString stringWithFormat:@"Version %@ (%@)", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"], kRevisionNumber]
这将创build一个格式“版本1.0(51)”的string。
基于Brad Larson的回答,如果你在信息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]; }
现在手动修改一个小版本可能是一个痛苦,所以使用源代码库修订号码技巧是理想的。 如果你没有绑定(如我没有),上面的代码片段可以是有用的。 它也拉出了应用程序的显示名称。
这是我在我的应用程序中所做的
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
希望这个简单的答案将有助于某人…
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
它包括在这个回购,检查出来:
您可以在plist.info中指定CFBundleShortVersionString
string,并使用提供的API以编程方式读取该string。
有两件事 – 构build版本和应用程序版本。
-
获取应用程序版本:
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
-
获取Build版本:
NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
// Syncs with App Store and Xcode Project Settings Input NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
以简洁的方式获取XYZ格式的版本string是:
[NSBundle mainBundle].infoDictionary[@"CFBundleVersion"]
或者,对于XY:
[NSBundle mainBundle].infoDictionary[@"CFBundleShortVersionString"]
这两个片段都会返回要分配给标签对象的文本属性的string,例如
myLabel.text = [NSBundle mainBundle].infoDictionary[@"CFBundleVersion"];
你可以尝试使用字典:
NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary]; NSString *buildVersion = infoDictionary[(NSString*)kCFBundleVersionKey]; NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey]
阅读您的应用程序的info.plist文件,并获取关键CFBundleShortVersionString的值。 读info.plist会给你一个NSDictionary对象
如果你需要版本号和编号号的组合 ,下面是使用Swift 3的简短方法:
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"]! let buildNum = Bundle.main.infoDictionary!["CFBundleVersion"]! let versionInfo = "\(appVersion) (build \(buildNum))" // versionInfo is now something like "2.3.0 (build 17)"
添加一个as! String
as! String
到appVersion
或buildNum
行的最后,以仅将该部分作为String
对象。 没有必要,但如果你正在寻找完整的versionInfo
。
我希望这有帮助!
这是修改控制系统的一个好处。 这样,当你从用户那里得到一个错误报告时,你可以检查出这个修订版的代码,并且(希望)重现与用户运行完全相同的代码的错误。
这个想法是,每当你做一个构build,你将运行一个脚本,获取您的代码的当前版本号,并更新项目中的文件(通常用某种forms的令牌replace)。 然后,您可以在错误输出中编写一个始终包含修订号的error handling例程,也可以将其显示在“关于”页面上。
您可以使用从您的应用程序的info.plist获取版本详细信息的infoDictionary。 此代码适用于swift 3.只需调用此方法并在任何首选的UI元素中显示版本。
Swift-3 func getVersion() -> String { let dictionary = Bundle.main.infoDictionary! let version = dictionary["CFBundleShortVersionString"] as! String let build = dictionary["CFBundleVersion"] as! String return "v\(version).\(build)" }
你可以试试这个方法:
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];