Как я могу программно получить значение target version
, как на изображении ниже?
Как показано в окне "Свойства" объекта моего Xcode. Я хочу отобразить это в заставке моего приложения, чтобы я знал, какую версию люди используют в настоящее время?
Как я могу программно получить значение target version
, как на изображении ниже?
Как показано в окне "Свойства" объекта моего Xcode. Я хочу отобразить это в заставке моего приложения, чтобы я знал, какую версию люди используют в настоящее время?
Есть 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). Номер сборки часто пишется в скобках/скобках. Номер сборки в шестнадцатеричном или десятичном виде.
В 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
сделайте следующее:
Вам не нужно ничего менять в вашем проекте или Xcode. Вот версия Swift для обоих по отдельности:
let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
Это включено в этот репо, проверьте это:
Здесь же код для Swift 3:
let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String
Программно отобразить версию и номер сборки - 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) )"