Как программно отобразить версию / номер сборки цели в приложении iOS? - PullRequest
129 голосов
/ 10 июня 2010

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

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

Ответы [ 4 ]

373 голосов
/ 20 августа 2012

Есть 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"];

Swift <3.0: </p>

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

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

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

Чтобы получить build число:

Objective-C:

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

Swift <3.0: </p>

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, и он будет аварийно завершать работу, потому что в коде он делает неправильное снижение.Но в обычных приложениях Cocoa для iOS и Mac эти значения определены и не будут удалены.

Это протестировано с Xcode Version 7.3 (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

11 голосов
/ 24 ноября 2015

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

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

Он включен в этот репозиторий, проверьте его:

https://github.com/goktugyil/EZSwiftExtensions

5 голосов
/ 09 декабря 2016

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

let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String
4 голосов
/ 13 сентября 2018

Программно отображать версию и номер сборки - 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) )"
...