Как программно отображать номер версии/сборки в приложении iOS?

Как я могу программно получить значение target version, как на изображении ниже?

Как показано в окне "Свойства" объекта моего Xcode. Я хочу отобразить это в заставке моего приложения, чтобы я знал, какую версию люди используют в настоящее время?

Ответ 1

Есть 2 номера!

Номер маркетинговой версии для клиентов называется номером версии. Он начинается с версии 1.0 и подходит для основных обновлений до 2.0, 3.0, для небольших обновлений до 1.1, 1.2 и для исправлений ошибок до 1.0.1, 1.0.2. Этот номер ориентирован на релизы и новые функции. Не нужно останавливаться на 9, 1.11.23 - это разумный номер версии.

Номер сборки в основном является внутренним числом сборок, которые были сделаны до того времени. Но некоторые используют другие числа, такие как номер ветки репозитория или номер его коммита. Это число должно быть уникальным, чтобы различать различные сборки, которые имеют только незначительные дополнительные изменения.


Чтобы получить номер версии:

Objective-C:

NSString * appVersionString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];

Свифт <3.0:

let appVersionString: String = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String

Swift 3. 0+ (протестировано с 5.0):

let appVersionString: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String

Чтобы получить номер сборки:

Objective-C:

NSString * appBuildString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];

Свифт <3.0:

let buildNumber: String = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String

Swift 3. 0+ (тестирование до 5.0):

let buildNumber: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String   

Если вы хотите, чтобы оба в одном:

Сначала используйте вышеуказанные строки, а затем следующую.

Objective-C:

NSString * versionBuildString = [NSString stringWithFormat:@"Version: %@ (%@)", appVersionString, appBuildString];

Swift (проверено до 5.0):

let versionAndBuildNumber: String = "\(versionNumber) (\(buildNumber))"

Заметки:

Значения в основном пакете не всегда присутствуют, например, в приложении командной строки нет CFBundleShortVersionString или CFBundleVersion, поэтому методы будут возвращать nil и это приведет к сбою, потому что в коде он делает неправильный downcast. Но в обычных приложениях Cocoa для iOS и Mac эти значения определены и не будут удалены.

Это проверено с версией 7.3 Xcode (7D175). Номер сборки часто пишется в скобках/скобках. Номер сборки в шестнадцатеричном или десятичном виде.

buildandversion


В XCode вы можете автоматически увеличивать номер сборки как десятичное число, помещая следующее в фазу Run script в настройках проекта

#!/bin/bash    
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"

Для шестнадцатеричного номера сборки используйте этот скрипт

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$((0x$buildNumber)) 
buildNumber=$(($buildNumber + 1)) 
buildNumber=$(printf "%X" $buildNumber)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"

Для Xcode сделайте следующее:

Шаг 1

step1

Шаг 2

step2

Шаг 3

step3

Ответ 2

Вам не нужно ничего менять в вашем проекте или Xcode. Вот версия Swift для обоих по отдельности:

let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String

Это включено в этот репо, проверьте это:

https://github.com/goktugyil/EZSwiftExtensions

Ответ 3

Здесь же код для Swift 3:

let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String

Ответ 4

Программно отобразить версию и номер сборки - Swift 4.0

let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "1.0"

let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "1.0"            

let versionAndBuildNumber = "Ver #\(versionNumber) ( Build #\(buildNumber) )"