web-dev-qa-db-ja.com

iPhoneアプリはどのようにして独自のバージョン番号を検出できますか?

IPhoneアプリを書いています。既に公開されていますが、バージョン番号が表示される機能を追加したいと思います。

私がリリースする各バージョンで手動でこれを行う必要はありません...

Objective-Cには、私のアプリのバージョンを確認する方法がありますか?

249
cmos

ここで説明するとおり 、スクリプトを使用して、現在のSubversionリビジョン番号でヘッダーファイルを書き換えます。そのリビジョン番号は、kRevisionNumber定数に保存されます。次に、次のようなものを使用してバージョンとリビジョン番号にアクセスできます。

[NSString stringWithFormat:@"Version %@ (%@)", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"], kRevisionNumber]

「バージョン1.0(51)」形式の文字列が作成されます。

219
Brad Larson

(特定のプロジェクトで行ったように)情報plistにメジャーバージョン情報とマイナーバージョン情報が保存されている場合、Brad Larsonの答えに基づいて、これはうまくいきました:

- (NSString *)appNameAndVersionNumberDisplayString {
    NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
    NSString *appDisplayName = [infoDictionary objectForKey:@"CFBundleDisplayName"];
    NSString *majorVersion = [infoDictionary objectForKey:@"CFBundleShortVersionString"];
    NSString *minorVersion = [infoDictionary objectForKey:@"CFBundleVersion"];

    return [NSString stringWithFormat:@"%@, Version %@ (%@)", 
                appDisplayName, majorVersion, minorVersion];
}

マイナーバージョンを手動で変更するのは面倒なので、ソースリポジトリのリビジョン番号のトリックを使用するのが理想的です。 (私がそうしなかったように)それを結び付けていないなら、上記のスニペットは役に立つでしょう。また、アプリの表示名も引き出します。

147
idStar

両方の個別のSwiftバージョン:

Swift 3

let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String

スイフト2

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

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

https://github.com/goktugyil/EZSwiftExtensions

56
Esqarrouth

これは私のアプリケーションでやったことです

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

この単純な答えが誰かの助けになることを願っています...

42
Arkady

Plist.infoでCFBundleShortVersionString文字列を指定し、 提供されたAPI を使用してプログラムで読み取ることができます。

31
Jasper Bekkers

ビルドバージョンとアプリバージョンの2つがあります。

  1. アプリのバージョンを取得するには:

    NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
    
  2. ビルドバージョンを取得するには:

    NSString *buildVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    
30
Shaik Riyaz
// Syncs with App Store and Xcode Project Settings Input
NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
17
John Erck

X.Y.Z形式のバージョン文字列を取得する簡潔な方法は次のとおりです。

[NSBundle mainBundle].infoDictionary[@"CFBundleVersion"]

または、単にX.Y:

[NSBundle mainBundle].infoDictionary[@"CFBundleShortVersionString"]

これらのスニペットは両方とも、ラベルオブジェクトのテキストプロパティに割り当てる文字列を返します。

myLabel.text = [NSBundle mainBundle].infoDictionary[@"CFBundleVersion"];
16
rodamn

次のように辞書を使用してみてください:-

NSDictionary *infoDictionary = [[NSBundle mainBundle]infoDictionary];

NSString *buildVersion = infoDictionary[(NSString*)kCFBundleVersionKey];
NSString *bundleName = infoDictionary[(NSString *)kCFBundleNameKey]
7
Abhishek Verma

アプリのinfo.plistからバージョンの詳細を取得するinfoDictionaryを使用できます。このコードはSwift 3で機能します。このメソッドを呼び出して、任意のUI要素にバージョンを表示するだけです。

Swift-3  

func getVersion() -> String {
    let dictionary = Bundle.main.infoDictionary!
    let version = dictionary["CFBundleShortVersionString"] as! String
    let build = dictionary["CFBundleVersion"] as! String
    return "v\(version).\(build)"
}
4
rajat chauhan

アプリのinfo.plistファイルを読み、キーCFBundleShortVersionStringの値を取得します。 info.plistを読むと、NSDictionaryオブジェクトが得られます

4
lostInTransit

versionandbuild numの両方の組み合わせが必要な場合は、ここで- Swift

let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"]!
let buildNum = Bundle.main.infoDictionary!["CFBundleVersion"]!
let versionInfo = "\(appVersion) (build \(buildNum))"
// versionInfo is now something like "2.3.0 (build 17)"

appVersionまたはbuildNum行の最後にas! Stringを追加して、その部分のみをStringオブジェクトとして取得します。ただし、完全なversionInfoを探している場合は、その必要はありません。

これがお役に立てば幸いです!

1
Dschee

この方法を試すことができます:

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

これは、リビジョン管理システムで処理するのに適しています。このようにして、ユーザーからバグレポートを取得したときに、そのコードのリビジョンをチェックアウトし、(できれば)ユーザーとまったく同じコードを実行してバグを再現できます。

アイデアは、ビルドを実行するたびに、コードの現在のリビジョン番号を取得し、プロジェクト内のファイルを更新するスクリプトを実行することです(通常は何らかのトークン置換を使用)。その後、エラー出力に常にリビジョン番号を含むエラー処理ルーチンを作成するか、「About」ページに表示できます。

0
RedFilter
func getAppVersion() -> String {
    let dictionary = Bundle.main.infoDictionary!
    let versionValue = dictionary["CFBundleShortVersionString"] ?? "0"
    let buildValue = dictionary["CFBundleVersion"] ?? "0"
    return "\(versionValue) (build \(buildValue))"
}

Stringへの強制キャストなしの@rajat chauhanの回答に基づいています。

0
apex39