160

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

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

4

8 に答える 8

400

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

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

于 2011-09-30T09:54:29.717 に答える
14

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)")
于 2016-09-27T20:47:51.953 に答える
3

Objective Cの場合:

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

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

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

NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 
于 2016-07-06T13:05:52.777 に答える
2

[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!
}
于 2020-08-04T16:03:23.867 に答える
1

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

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

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

versionLabel.text = "Version:" + version
于 2014-12-31T07:54:31.330 に答える
0

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

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

あなたはそれを次のように使うでしょう:

#import "AppUpdateTracker.h"

NSLog(@"short version: %@", [AppUpdateTracker getShortVersionString]);
NSLog(@"long version: %@", [AppUpdateTracker getLongVersionString]);
于 2015-07-11T21:14:48.953 に答える
-1

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

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

このリポジトリに含まれているので、チェックしてください。

https://github.com/goktugyil/EZSwiftExtensions

于 2015-11-25T17:53:36.630 に答える
-1

念のために

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

于 2017-04-01T05:14:25.663 に答える