回答:
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
or がないため、コード内で誤ったダウンキャストを行うCFBundleVersion
ため、メソッドが返さnil
れてクラッシュします。ただし、通常のCocoa iOSおよびMacアプリでは、これらの値は定義されており、削除されません。
これはXcodeバージョン7.3(7D175)でテストされています。ビルド番号は、括弧/中括弧で書かれることがよくあります。ビルド番号は16進数または10進数です。
では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"
16進数のビルド番号については、このスクリプトを使用します
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")"
}
}