Как мне получить текущую версию моего проекта iOS в коде?
152
Я хотел бы иметь возможность получить текущую версию моего проекта / приложения для iOS в качестве NSStringобъекта, не определяя где-либо константу в файле. Я не хочу менять значение версии в 2 местах.
Значение должно быть обновлено, когда я добавлю свою версию в сводную информацию о цели проекта.
Вы можете получить версию и номера сборки следующим образом:
let version =Bundle.main.object(forInfoDictionaryKey:"CFBundleShortVersionString")as!Stringlet build =Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey asString)as!String
или в Objective-C
NSString* version =[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];NSString* build =[[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString*)kCFBundleVersionKey];
У меня есть следующие методы в категории UIApplication:
extension UIApplication{staticvar appVersion:String{returnBundle.main.object(forInfoDictionaryKey:"CFBundleShortVersionString")as!String}staticvar appBuild:String{returnBundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey asString)as!String}staticvar versionBuild:String{let version = appVersion, build = appBuild
return version == build ?"v\(version)":"v\(version)(\(build))"}}
Вы можете использовать этот [[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleVersion"] вместо [[[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *) kCFBundleVersionKey]. ]; так что теперь стало легко хранить в памяти
Durai Amuthan.H
4
@Duraiamuthan Я бы рекомендовал использовать, (NSString *)kCFBundleVersionKeyа не @"CFBundleVersion". Несмотря на то, что он дольше печатается (здесь поможет автозаполнение), так как это константа, проверяемая во время компиляции.
Эшли Миллс
Кстати, было бы точнее включить это расширение, NSBundleвместо UIApplicationэтого также можно будет заменить статические вызовы вызовами экземпляра.
Запко
@Запко - я с уважением не согласен. Концептуально это соответствует тому UIApplication, что возвращаемая информация о приложении. Кроме того, это относится только к mainпакету - не имеет смысла делать это методом экземпляра для любого пакета.
Эшли Миллс
Вы имели в виду, buildкогда сказали appBundle(во второй строке своего кода)?
user1046037
14
Вот что работает на 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)")
В Swift вы можете получить версию пакета, используя:
let info:NSDictionary=NSBundle.mainBundle().infoDictionary!let version:String= info.objectForKey("CFBundleShortVersionString")as!String
versionLabel.text ="Version:"+ version
Чтобы получить локализованное значение любого ключа, вы должны использовать CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)
let versionNumber =NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString")as!Stringlet buildNumber =NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion")as!String
(NSString *)kCFBundleVersionKey
а не@"CFBundleVersion"
. Несмотря на то, что он дольше печатается (здесь поможет автозаполнение), так как это константа, проверяемая во время компиляции.NSBundle
вместоUIApplication
этого также можно будет заменить статические вызовы вызовами экземпляра.UIApplication
, что возвращаемая информация о приложении. Кроме того, это относится только кmain
пакету - не имеет смысла делать это методом экземпляра для любого пакета.build
когда сказалиappBundle
(во второй строке своего кода)?Вот что работает на Xcode 8, Swift 3:
источник
В Задаче C:
1) Для получения версии приложения вы должны использовать:
2) Для получения версии сборки вы должны использовать:
источник
В Swift вы можете получить версию пакета, используя:
источник
Мой проект с открытым исходным кодом, App Update Tracker , предлагает эту функциональность (и многое другое) в форме методов класса:
+ (NSString *)getShortVersionString
+ (NSString *)getLongVersionString
Вы бы использовали это так:
источник
Просто для заметки
Чтобы получить локализованное значение любого ключа, вы должны использовать
CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)
источник
Так вот версия Swift для обоих по отдельности:
Это включено в этот репо, проверьте это:
https://github.com/goktugyil/EZSwiftExtensions
источник