我正在写一个iPhone应用程序。它已经发布,但我想添加一个功能,其版本号显示。
我不希望对我发布的每个版本都手动执行此操作……
objective-C中有办法找出我的应用的版本吗?
对于版本控制系统来说,这是一件很好的事情。这样,当您从用户那里得到错误报告时,您可以检查代码的修订,并(希望)在运行与用户完全相同的代码时重现错误。
其思想是,每次构建时,您都将运行一个脚本,该脚本获取代码的当前修订号,并更新项目中的文件(通常使用某种形式的令牌替换)。然后,您可以编写一个错误处理例程,在错误输出中始终包含修订号,或者您可以在“About”页面上显示它。
你可以在plist.info中指定CFBundleShortVersionString字符串,并通过编程方式使用提供的API. info来读取它。
CFBundleShortVersionString
正如我在这里描述的,我使用一个脚本重写一个头文件与我当前的Subversion版本号。修订号存储在kRevisionNumber常量中。然后,我可以使用类似于下面的东西访问版本和修订号:
[NSString stringWithFormat:@"Version %@ (%@)", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"], kRevisionNumber]
这将创建一个格式为“Version 1.0(51)”的字符串。
阅读信息。你的应用程序的plist文件,并获得值的关键CFBundleShortVersionString。阅读信息。plist会给你一个NSDictionary对象
根据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]; }
现在手动更新小版本可能会很痛苦,因此使用源存储库修订号技巧是理想的。如果您还没有绑定它(就像我没有),上面的代码段可能会很有用。它还会提取应用程序的显示名称。
获取X.Y.Z格式的版本字符串的简单方法是:
[NSBundle mainBundle].infoDictionary[@"CFBundleVersion"]
或者,对于X.Y:
[NSBundle mainBundle].infoDictionary[@"CFBundleShortVersionString"]
这两个代码段都返回字符串,您可以将其分配给标签对象的文本属性,例如。
myLabel.text = [NSBundle mainBundle].infoDictionary[@"CFBundleVersion"];
这就是我在申请中所做的
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
希望这个简单的答案能帮助到一些人……
你可以尝试使用字典作为:-
NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary]; NSString *buildVersion = infoDictionary[(NSString*)kCFBundleVersionKey]; NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey]
// Syncs with App Store and Xcode Project Settings Input NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
有两件事——构建版本和应用版本。
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
To get Build version:
NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
Swift版本分别为:
斯威夫特3
let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String
斯威夫特2
let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
它包括在这个回购,检查一下:
https://github.com/goktugyil/EZSwiftExtensions < a href = " https://github.com/goktugyil/EZSwiftExtensions " > < / >
如果你需要这两个版本和构建num的结合,这里有一个使用斯威夫特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)"
在appVersion或buildNum行末尾添加as! String,只获得该部分作为String对象。不过,如果你正在寻找完整的versionInfo,则不需要这样做。
appVersion
buildNum
as! String
String
versionInfo
我希望这能有所帮助!
你可以使用infoDictionary从info中获取版本细节。这段代码适用于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"];
func getAppVersion() -> String { let dictionary = Bundle.main.infoDictionary! let versionValue = dictionary["CFBundleShortVersionString"] ?? "0" let buildValue = dictionary["CFBundleVersion"] ?? "0" return "\(versionValue) (build \(buildValue))" }
基于@rajat chauhan的回答,没有强制转换为String。
斯威夫特5:
有两件事——应用版本和构建版本
if let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String { // present appVersion }
if let buildVersion = Bundle.main.infoDictionary?["CFBundleVersion"] as? String { // present buildVersion }
Thanks @Brad Larson♦ a lot
@Brad Larson♦