NSString
ファイルのどこかに定数を定義しなくても、iOSプロジェクト/アプリの現在のバージョンをオブジェクトとして取得できるようにしたいと思います。バージョン値を2か所で変更したくありません。
プロジェクトターゲットの概要で自分のバージョンをバンプするときに、値を更新する必要があります。
NSString
ファイルのどこかに定数を定義しなくても、iOSプロジェクト/アプリの現在のバージョンをオブジェクトとして取得できるようにしたいと思います。バージョン値を2か所で変更したくありません。
プロジェクトターゲットの概要で自分のバージョンをバンプするときに、値を更新する必要があります。
次のようにバージョンとビルド番号を取得できます。
let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let build = Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as! String
またはObjective-Cで
NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleShortVersionString"];
NSString * build = [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *)kCFBundleVersionKey];
私は次のカテゴリのメソッドを持っていますUIApplication
:
extension UIApplication {
static var appVersion: String {
return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
}
static var appBuild: String {
return Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as! String
}
static var versionBuild: String {
let version = appVersion, build = appBuild
return version == build ? "v\(version)" : "v\(version)(\(build))"
}
}
要旨: https ://gist.github.com/ashleymills/6ec9fce6d7ec2a11af9b
これはObjective-Cの同等のものです:
+ (NSString *) appVersion
{
return [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleShortVersionString"];
}
+ (NSString *) build
{
return [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *)kCFBundleVersionKey];
}
+ (NSString *) versionBuild
{
NSString * version = [self appVersion];
NSString * build = [self build];
NSString * versionBuild = [NSString stringWithFormat: @"v%@", version];
if (![version isEqualToString: build]) {
versionBuild = [NSString stringWithFormat: @"%@(%@)", versionBuild, build];
}
return versionBuild;
}
要旨: https ://gist.github.com/ashleymills/c37efb46c9dbef73d5dd
Xcode 8、Swift3で機能したものは次のとおりです。
let gAppVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "0"
let gAppBuild = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "0"
print("Version: \(gAppVersion)")
print("Build: \(gAppBuild)")
Objective Cの場合:
1)アプリのバージョンを取得するには、以下を使用する必要があります。
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
2)ビルドバージョンを取得するには、以下を使用する必要があります。
NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
[Swiftバージョン:5.2]
すべてのiOSアプリは、アプリのバージョン番号をInfo.plistファイルに保存する必要がありますが、コードで使用できる文字列としてそれを取得する組み込みの方法はありません。
Info.plistファイルを読み取り、バージョン番号を自動的に返すUIApplicationの小さな拡張機能を1つ作成しました。
コードは次のとおりです。
extension UIApplication {
static var appVersion: String? {
return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String
}
}
コントローラの内部
@IBOutlet weak var tv_version: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
//Display Version
setUpCurrentVersion()
}
func setUpCurrentVersion(){
tv_version.text = "v" + UIApplication.appVersion!
}
Swiftでは、次を使用してバンドルバージョンを取得できます。
let info:NSDictionary = NSBundle.mainBundle().infoDictionary!
let version:String = info.objectForKey("CFBundleShortVersionString") as! String
versionLabel.text = "Version:" + version
私のオープンソースプロジェクトであるAppUpdateTrackerは、この機能(およびその他)をクラスメソッドの形式で提供します。
+ (NSString *)getShortVersionString
+ (NSString *)getLongVersionString
あなたはそれを次のように使うでしょう:
#import "AppUpdateTracker.h"
NSLog(@"short version: %@", [AppUpdateTracker getShortVersionString]);
NSLog(@"long version: %@", [AppUpdateTracker getLongVersionString]);
したがって、これらの両方のSwiftバージョンを個別に示します。
let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String
このリポジトリに含まれているので、チェックしてください。
念のために
キーのローカライズされた値を取得するには、次を使用する必要がありますCFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)