我的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 

它包括在这个回购,检查出来:

https://github.com/goktugyil/EZSwiftExtensions

您可以在plist.info中指定CFBundleShortVersionStringstring,并使用提供的API以编程方式读取该string。

有两件事 – 构build版本和应用程序版本。

  1. 获取应用程序版本:

     NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; 
  2. 获取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! StringappVersionbuildNum行的最后,以仅将该部分作为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"];