Есть 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 = "\(appVersionString) (\(buildNumber))"
Ноты:
Значения в основном пакете не всегда присутствуют, например, в приложении командной строки нет CFBundleShortVersionString
или CFBundleVersion
, поэтому методы будут возвращаться, nil
и он будет аварийно завершать работу, поскольку в коде он делает неправильное снижение. Но в обычных приложениях 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
сделать следующее:
Шаг 1
Шаг 2
Шаг 3
Bundle.main.object(forInfoDictionaryKey: "...")
сейчас.Вам не нужно ничего менять в вашем проекте или Xcode. Вот версия Swift для обоих по отдельности:
Это включено в этот репо, проверьте это:
https://github.com/goktugyil/EZSwiftExtensions
источник
Bundle.main.object(forInfoDictionaryKey: "...")
сейчас.Вот тот же код для Swift 3 :
источник
Bundle.main
был пустойinfoDictionary
для меня; может потому, что я делаю это изнутри фреймворка, а не из исполняемого файла или приложения?Bundle(for: MyClass.self)
содержит ожидаемые значения.Программно отобразить версию и номер сборки - Swift 4.0
источник
Вы также можете использовать как
Тогда вы можете использовать где угодно, когда вы объявляете глобально.
Вывод:
источник
Я сделал расширение для Bundle, чтобы им было легко пользоваться
источник