我正在编写一个 iPhone 应用程序。它已经发布了,但我想添加一个显示其版本号的功能。
我宁愿不必对我发布的每个版本手动执行此操作...
Objective-C 中有没有办法找出我的应用程序的版本?
正如我在这里所描述的,我使用一个脚本来用我当前的 Subversion 修订号重写一个头文件。该修订号存储在 kRevisionNumber 常量中。然后,我可以使用类似于以下内容的方式访问版本和修订号:
[NSString stringWithFormat:@"Version %@ (%@)", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"], kRevisionNumber]
这将创建一个格式为“Version 1.0 (51)”的字符串。
基于 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 版本:
斯威夫特 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
它包含在此回购中,请查看:
这就是我在我的应用程序中所做的
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
希望这个简单的答案可以帮助某人...
您可以CFBundleShortVersionString
在 plist.info 中指定字符串并使用提供的 API以编程方式读取该字符串。
有两件事-构建版本和应用程序版本。
获取应用版本:
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
获取构建版本:
NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
// Syncs with App Store and Xcode Project Settings Input
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
获取XYZ格式的版本字符串的简洁方法是:
[NSBundle mainBundle].infoDictionary[@"CFBundleVersion"]
或者,仅针对XY:
[NSBundle mainBundle].infoDictionary[@"CFBundleShortVersionString"]
这两个片段都返回您将分配给标签对象的文本属性的字符串,例如
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 对象
您可以使用 infoDictionary 从您的应用程序的 info.plist 获取版本详细信息。此代码适用于 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)"
}
如果您需要同时使用version和build num ,这里有一个使用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)"
在or行as! String
的末尾添加一个以仅获取该部分作为对象。如果您正在寻找完整的.appVersion
buildNum
String
versionInfo
我希望这有帮助!
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
.
使用修订控制系统处理这是一件好事。这样,当您从用户那里收到错误报告时,您可以检查该代码的修订版并(希望)重现运行与用户完全相同的代码的错误。
这个想法是,每次构建时,您将运行一个脚本,该脚本获取代码的当前修订号并更新项目中的文件(通常使用某种形式的令牌替换)。然后,您可以编写一个错误处理例程,该例程始终在错误输出中包含修订号,或者您可以将其显示在“关于”页面上。
你可以试试这个方法:
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];