web-dev-qa-db-ja.com

iOSプロジェクトの現在のバージョンをコードで取得するにはどうすればよいですか?

どこかでファイルに定数を定義する必要なく、iOSプロジェクト/アプリの現在のバージョンをNSStringオブジェクトとして取得できるようにしたいと思います。 2つの場所でバージョン値を変更したくありません。

プロジェクトターゲットの概要でバージョンを更新したときに、値を更新する必要があります。

142
Jovan

次のようにしてバージョンとビルド番号を取得できます。

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 {

    class func appVersion() -> String {
        return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
    }

    class func appBuild() -> String {
        return Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as! String
    }

    class func 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

363
Ashley Mills

作業内容は次のとおりですXcode 8、Swift 3:

let gAppVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "0"
let gAppBuild = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "0"

print("Version: \(gAppVersion)")
print("Build: \(gAppBuild)")
14
Crashalot

Objective Cの場合:

1)アプリのバージョンを取得するには、次を使用する必要があります:

NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];

2)ビルドバージョンを取得するには、次を使用する必要があります:

NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 
2

Swiftでは、次を使用してバンドルバージョンを取得できます。

let info:NSDictionary = NSBundle.mainBundle().infoDictionary!

let version:String = info.objectForKey("CFBundleShortVersionString") as! String

versionLabel.text = "Version:" + version
1
Ravindra Kishan

私のオープンソースプロジェクト App Update Tracker は、この機能(およびそれ以上)をクラスメソッドの形式で提供します。

  • + (NSString *)getShortVersionString
  • + (NSString *)getLongVersionString

次のように使用します。

#import "AppUpdateTracker.h"

NSLog(@"short version: %@", [AppUpdateTracker getShortVersionString]);
NSLog(@"long version: %@", [AppUpdateTracker getLongVersionString]);
0
Stunner

注意事項

キーのローカライズされた値を取得するには、CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)を使用する必要があります

0
akaDuality