Как получить текущую версию моего проекта iOS в коде?
Я хотел бы иметь возможность получить текущую версию моего проекта/приложения iOS как NSString объект без необходимости определять константу в файле где-то. Я не хочу менять значение моей версии в 2 местах.
значение должно быть обновлено, когда я поднимаю свою версию в сводке целевого объекта проекта.
7 ответов:
вы можете получить версию и номер сборки выглядит следующим образом:
let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String let build = Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as! Stringили в Objective-C
NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleShortVersionString"]; NSString * build = [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *)kCFBundleVersionKey];у меня есть следующие методы, в категории
UIApplication:extension UIApplication { class func appVersion() -> String { return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String } class func appBuild() -> String { return Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as! String } class func versionBuild() -> String { let version = appVersion(), build = appBuild() return version == build ? "v\(version)" : "v\(version)(\(build))" } }суть:https://gist.github.com/ashleymills/6ec9fce6d7ec2a11af9b
вот эквивалент в Objective-C:
+ (NSString *) appVersion { return [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleShortVersionString"]; } + (NSString *) build { return [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *)kCFBundleVersionKey]; } + (NSString *) versionBuild { NSString * version = [self appVersion]; NSString * build = [self build]; NSString * versionBuild = [NSString stringWithFormat: @"v%@", version]; if (![version isEqualToString: build]) { versionBuild = [NSString stringWithFormat: @"%@(%@)", versionBuild, build]; } return versionBuild; }суть: https://gist.github.com/ashleymills/c37efb46c9dbef73d5dd
вот что сработало на Xcode 8, Swift 3:
let gAppVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "0" let gAppBuild = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "0" print("Version: \(gAppVersion)") print("Build: \(gAppBuild)")
В Объективе C:
1)Для получения версии приложения вы должны использовать:
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];2)для получения версии сборки нужно использовать:
NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
в Swift, вы можете получить версию пакета с помощью:
let info:NSDictionary = NSBundle.mainBundle().infoDictionary! let version:String = info.objectForKey("CFBundleShortVersionString") as! String versionLabel.text = "Version:" + version
мой проект с открытым исходным кодом, App Update Tracker, предлагает эту функциональность (и многое другое) в виде методов класса:
+ (NSString *)getShortVersionString+ (NSString *)getLongVersionStringвы бы использовали его так:
#import "AppUpdateTracker.h" NSLog(@"short version: %@", [AppUpdateTracker getShortVersionString]); NSLog(@"long version: %@", [AppUpdateTracker getLongVersionString]);
просто для Примечание
для получения локализованного значения любого ключа необходимо использовать
CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)
Итак, вот быстрая версия для обоих из них отдельно:
let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! StringОн включен в это РЕПО, проверьте его:
Comments