Как мое приложение iphone может определить свой номер версии?
Я пишу приложение для iPhone. Он уже опубликован, но я хотел бы добавить функцию, где отображается ее номер версии.
Я бы предпочел не делать этого вручную с каждой версией, которую я выпускаю...
Есть ли способ в objective-C узнать, какая версия моего приложения?
Ответы
Ответ 1
Как я описываю здесь, я использую script для перезаписи файла заголовка с моим текущим номером ревизии Subversion. Этот номер ревизии хранится в константе kRevisionNumber. Затем я могу получить доступ к версии и номеру версии, используя что-то похожее на следующее:
[NSString stringWithFormat:@"Version %@ (%@)", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"], kRevisionNumber]
который создаст строку формата "Версия 1.0 (51)".
Ответ 2
Основываясь на ответе Брэда Ларсона, если у вас есть основная и второстепенная информация о версии, хранящаяся в информационном 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];
}
Теперь обновление небольшой версии вручную может быть больно, и поэтому использование тэка номера версии репозитория исходного кода идеально. Если вы не привязали это (как я этого не сделал), приведенный выше фрагмент может быть полезен. Он также отображает отображаемое имя приложения.
Ответ 3
Быстрая версия для обоих:
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
Ответ 4
Это то, что я сделал в своем приложении
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
Надеюсь, этот простой ответ поможет кому-то...
Ответ 5
Вы можете указать строку CFBundleShortVersionString
на вашем plist.info и прочитать это программно, используя предоставленный API.
Ответ 6
Есть две вещи - версия для сборки и версия приложения.
-
Чтобы получить версию приложения:
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
-
Чтобы получить версию сборки:
NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
Ответ 7
// Syncs with App Store and Xcode Project Settings Input
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
Ответ 8
Краткий способ получения строки версии в формате X.Y.Z:
[NSBundle mainBundle].infoDictionary[@"CFBundleVersion"]
Или, просто для X.Y:
[NSBundle mainBundle].infoDictionary[@"CFBundleShortVersionString"]
Оба этих фрагмента возвращают строки, которые вы бы присвоили свойству текстового объекта метки, например
myLabel.text = [NSBundle mainBundle].infoDictionary[@"CFBundleVersion"];
Ответ 9
Вы можете попробовать использовать словарь как: -
NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary];
NSString *buildVersion = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey]
Ответ 10
Прочитайте файл info.plist вашего приложения и получите значение для ключа CFBundleShortVersionString. Чтение info.plist даст вам объект NSDictionary
Ответ 11
Вы можете использовать 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)"
}
Ответ 12
Если вам нужна комбинация как , так и 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)"
Добавьте as! String
в конец строки appVersion
или buildNum
, чтобы получить только эту часть как объект String
. Нет необходимости в этом, хотя если вы ищете полный versionInfo
.
Надеюсь, это поможет!
Ответ 13
Это хорошая вещь для работы с системой контроля версий. Таким образом, когда вы получаете отчет об ошибке от пользователя, вы можете проверить, что пересмотр кода и (надеюсь) воспроизвести ошибку с тем же кодом, что и пользователь.
Идея заключается в том, что каждый раз, когда вы выполняете сборку, вы запускаете script, который получает текущий номер версии вашего кода и обновляет файл в вашем проекте (обычно с некоторой формой замены токена). Затем вы можете написать процедуру обработки ошибок, которая всегда включает номер версии в выводе ошибки, или вы можете отобразить ее на странице "О программе".
Ответ 14
Вы можете попробовать этот метод:
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
Ответ 15
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
.