Ответ 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). Номер сборки часто пишется в скобках/скобках. Номер сборки в шестнадцатеричном или десятичном виде.
В 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