Как мое приложение для iphone может определить свой номер версии? - PullRequest
249 голосов
/ 19 января 2009

Я пишу приложение для iPhone. Он уже опубликован, но я хотел бы добавить функцию, в которой отображается номер его версии.

Я бы предпочел не делать это вручную с каждой версией, которую я выпускаю ...

Есть ли способ в target-C узнать, какая версия моего приложения?

Ответы [ 15 ]

219 голосов
/ 19 января 2009

Как я здесь опишу , я использую скрипт для перезаписи файла заголовка с моим текущим номером ревизии Subversion. Этот номер редакции сохраняется в константе kRevisionNumber. Затем я могу получить доступ к версии и номеру ревизии, используя что-то похожее на следующее:

[NSString stringWithFormat:@"Version %@ (%@)", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"], kRevisionNumber]

, которая создаст строку в формате «Версия 1.0 (51)».

146 голосов
/ 15 августа 2012

Основываясь на ответе Брэда Ларсона, если у вас есть информация о основной и вспомогательной версиях, хранящаяся в информационном листе (как я это делал в конкретном проекте), для меня это сработало:

- (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];
}

Теперь редактирование вспомогательной версии вручную может быть затруднительным, поэтому использование трюка с номером редакции исходного репозитория является идеальным. Если вы не связали это (как я не сделал), приведенный выше фрагмент может быть полезным. Он также вытаскивает отображаемое имя приложения.

53 голосов
/ 19 марта 2015

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

42 голосов
/ 03 ноября 2013

Это то, что я сделал в своем приложении

NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];

Надеюсь, этот простой ответ кому-нибудь поможет ...

31 голосов
/ 19 января 2009

Вы можете указать строку CFBundleShortVersionString в своем plist.info и прочитать ее программно, используя предоставленный API .

30 голосов
/ 23 января 2015

Есть две вещи - версия сборки и версия приложения.

  1. Чтобы получить версию приложения:

    NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
    
  2. Чтобы получить версию сборки:

    NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    
17 голосов
/ 23 июля 2014
// Syncs with App Store and Xcode Project Settings Input
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
16 голосов
/ 07 сентября 2013

Краткий способ получить строку версии в формате X.Y.Z :

[NSBundle mainBundle].infoDictionary[@"CFBundleVersion"]

Или просто X.Y:

[NSBundle mainBundle].infoDictionary[@"CFBundleShortVersionString"]

Оба эти фрагмента кода возвращают строки, которые вы бы присвоили текстовому свойству объекта метки, например,

myLabel.text = [NSBundle mainBundle].infoDictionary[@"CFBundleVersion"];
7 голосов
/ 15 мая 2014

Вы можете попробовать использовать словарь как: -

NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary];

NSString *buildVersion = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey]
4 голосов
/ 31 июля 2017

Вы можете использовать infoDictionary, который получает информацию о версии из info.plist вашего приложения. Этот код работает для Swift 3. Просто вызовите этот метод и отобразите версию в любом предпочтительном элементе пользовательского интерфейса.

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)"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...