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


151

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

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

回答:


381

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

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


1
[[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey]の代わりに、この[[NSBundle mainBundle] objectForInfoDictionaryKey:@ "CFBundleVersion"]を使用することもできます。 ]; だから、記憶するのが簡単になりました
Durai Amuthan.H

4
@Duraiamuthan (NSString *)kCFBundleVersionKeyではなくを使用することをお勧めし@"CFBundleVersion"ます。入力するのは長くなりますが(オートコンプリートはここで役立ちます)、これはコンパイル時にチェックされる定数であるためです。
アシュレイミルズ

ところで、この拡張機能をオンNSBundleにする方がより正確UIApplicationです。静的呼び出しをインスタンス呼び出しで置き換えることもできます。
Zapko 16

@Zapko-私は敬意を払いません。UIApplication返される情報はアプリケーションに関するものなので、概念的にはこれはに適合します。また、これはmainバンドルにのみ適用されます。これをバンドルのインスタンスメソッドにすることは意味がありません。
Ashley Mills

もしかしてbuild、あなたが言ったときにappBundle(あなたのコードの2行目に)?
user1046037 2018年

14

これが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)")

3

目標Cの場合:

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

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

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

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

1

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

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

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

versionLabel.text = "Version:" + version

0

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

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

次のように使用します。

#import "AppUpdateTracker.h"

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

0

注意してください

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


-1

したがって、これらの両方の個別のSwiftバージョンがあります。

let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String

このレポに含まれています、チェックしてください:

https://github.com/goktugyil/EZSwiftExtensions


CFBundleVersionKeyはXcode 8とSwift 3では動作しなくなりました。新しいキーを知っていますか?
Crashalot 2016

ここでは、日付の1までは次のとおりです。github.com/goktugyil/EZSwiftExtensions/blob/...
Esqarrouth
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.