Відповіді:
Є 2 Номери!
Номер випуску маркетингу призначений для клієнтів, називається номером версії . Він починається з 1.0 і піднімається для основних оновлень до 2.0 , 3.0 , для незначних оновлень до 1.1 , 1.2 та для виправлень помилок до 1.0.1 , 1.0.2 . Ця кількість орієнтована на випуски та нові функції. Він не повинен зупинятися на 9, 1.11.23 - це розумний номер версії.
Номер збірки - це переважно внутрішня кількість збірок , які були зроблені до цього часу. Але деякі використовують інші числа, наприклад, номер філії сховища або його номер комісії. Це число повинно бути унікальним для розрізнення різних складових, які мають лише незначні додаткові зміни.
Завдання-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
Завдання-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
Спочатку скористайтеся вищевказаними рядками, а потім наступними.
Завдання-C:
NSString * versionBuildString = [NSString stringWithFormat:@"Version: %@ (%@)", appVersionString, appBuildString];
Swift (тестується до 5,0):
let versionAndBuildNumber: String = "\(appVersionString) (\(buildNumber))"
Значення в основному пакеті не завжди є, наприклад, у застосуванні командного рядка немає CFBundleShortVersionString
або CFBundleVersion
, тому методи повернуться, nil
і вони будуть руйнуватися, тому що в коді він робить неправильне похилення. Але в звичайних додатках для какао iOS та Mac ці значення визначені і видалятися не будуть.
Це перевірено за допомогою Xcode версії 7.3 (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
цього виконайте такі дії:
Bundle.main.object(forInfoDictionaryKey: "...")
зараз.
Вам не потрібно нічого змінювати у своєму проекті чи Xcode. Ось версія Swift для обох окремо:
let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
Він включений до цього репо, перевірте:
Bundle.main.object(forInfoDictionaryKey: "...")
зараз.
Ось такий же код для Swift 3 :
let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String
Bundle.main
мав порожнє infoDictionary
для мене; можливо тому, що я роблю це в рамках, а не виконуваним файлом чи додатком? Bundle(for: MyClass.self)
містить очікувані значення.
Програмно відображати версію та номер збірки - 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) )"
Ви також можете використовувати подібні
var appVersion: String {
//versionNumber
let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "1.0"
//buildNumber
let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "1.0"
return "Version: #\(versionNumber) (#\(buildNumber))"
}
Тоді ви можете користуватися будь-де, коли ви заявляєте про глобальне.
print(appVersion)
Вихід:
Version: #1.0 (#1.0.3)
Я зробив розширення для Bundle, щоб воно було легким у використанні
extension Bundle {
var releaseVersionNumber: String? {
return infoDictionary?["CFBundleShortVersionString"] as? String
}
var buildVersionNumber: String? {
return infoDictionary?["CFBundleVersion"] as? String
}
var applicationName: String {
return infoDictionary?["CFBundleDisplayName"] as? String ?? "ADKATech"
}
var applicationReleaseDate: String {
return infoDictionary?["ApplicationReleaseDate"] as? String ?? Date().description
}
var applicationReleaseNumber: Int {
return infoDictionary?["ApplicationReleaseNumber"] as? Int ?? 0
}
var releaseVersionNumberPretty: String {
return "\(releaseVersionNumber ?? "1.0.0")"
}
var buildVersionNumberPretty: String {
return "\(buildVersionNumber ?? "1")"
}
}