Как мой iphone приложение обнаруживает свой собственный номер версии?

голоса
237

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

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

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

Задан 19/01/2009 в 19:32
источник пользователем
На других языках...                            


15 ответов

голоса
216

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

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

который создаст строку в формате «Version 1.0 (51)».

Ответил 19/01/2009 в 20:00
источник пользователем

голоса
143

Опираясь на ответ Брэда Ларсона, если вы мажора и минора информацию о версии хранятся в информационном 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];
}

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

Ответил 15/08/2012 в 05:13
источник пользователем

голоса
46

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

Ответил 19/03/2015 в 12:42
источник пользователем

голоса
41

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

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

Надеемся, что это простой ответ поможет кому-то ...

Ответил 02/11/2013 в 21:01
источник пользователем

голоса
31

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

Ответил 19/01/2009 в 19:46
источник пользователем

голоса
29

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

  1. Для того, чтобы получить App версии:

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

    NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    
Ответил 23/01/2015 в 09:01
источник пользователем

голоса
17
// Syncs with App Store and Xcode Project Settings Input
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
Ответил 23/07/2014 в 19:15
источник пользователем

голоса
16

Сжатый способ получить строку версии в XYZ формате:

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

Или, просто XY:

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

Оба этих фрагменты возвращают строки, которые вы бы присвоить текст вашего объекта недвижимость ярлыка, например,

myLabel.text = [NSBundle mainBundle].infoDictionary[@"CFBundleVersion"];
Ответил 07/09/2013 в 03:58
источник пользователем

голоса
7

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

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

NSString *buildVersion = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey]
Ответил 15/05/2014 в 10:58
источник пользователем

голоса
4

Прочитайте файл info.plist вашего приложения и получить значение ключа CFBundleShortVersionString. Чтение info.plist даст вам NSDictionary объект

Ответил 22/01/2009 в 06:05
источник пользователем

голоса
1

Если вам нужно сочетание оба версии и строить 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)"

Добавить as! Stringв конец либо appVersionили buildNumлинии , чтобы получить только ту часть в качестве Stringобъекта. Нет необходимости в том , хотя , если вы ищете полный versionInfo.

Надеюсь, это поможет!

Ответил 21/12/2016 в 09:35
источник пользователем

голоса
0
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.

Ответил 10/04/2019 в 10:42
источник пользователем

голоса
0

Вы можете попробовать этот метод:

NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
Ответил 24/10/2017 в 18:15
источник пользователем

голоса
0

Вы можете использовать infoDictionary, который получает информацию о версии от info.plist из вас приложения. Этот код работает для быстрой 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)"
}
Ответил 31/07/2017 в 12:31
источник пользователем

голоса
0

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

Идея заключается в том, что каждый раз, когда вы делаете сборку, вы будете запускать скрипт, который получает текущий номер версии вашего кода и обновляет файл в вашем проекте (как правило, с некоторой формой символической замены). Вы можете написать подпрограмму обработки об ошибке, которая всегда включает в себя номер версии в выводе ошибки, или вы можете отобразить его на «О программе».

Ответил 19/01/2009 в 19:46
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more