46

Xcode でビルド番号とバージョン番号を手動で設定するのは簡単で、ビルド時にマクロを使用してそれらをインクリメントする方法を学びました。しかし、コードでそれらの値を参照するにはどうすればよいでしょうか?

4

7 に答える 7

97
NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
NSString *appVersion = [infoDict objectForKey:@"CFBundleShortVersionString"]; // example: 1.0.0
NSString *buildNumber = [infoDict objectForKey:@"CFBundleVersion"]; // example: 42 
于 2012-04-04T16:31:39.510 に答える
83

確かに、バージョン番号を含む info.plist のすべてのキーと値を含む info ディレクトリをメイン バンドルに要求できます。

NSDictionary *info = [[NSBundle mainBundle] infoDictionary];
NSString *version = [info objectForKey:@"CFBundleShortVersionString"];
于 2012-04-04T16:29:44.850 に答える
13
NSBundle *bundle = [NSBundle mainBundle];   
NSString *appVersion = [bundle objectForInfoDictionaryKey:(NSString *)@"CFBundleShortVersionString"];
NSString *appBuildNumber = [bundle objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];
于 2012-04-04T16:31:41.490 に答える
13

@roboビルド番号(バージョン番号ではありませんが、非常に似ています)を自動インクリメントする方法についての記事をフォローしましたが、今は見つかりません。私がしたことを説明しようと思います。従うのに十分明確であることを願っています。

Xcode 4 では、Xcode 画面の左側のペインである Navigator ペインを見てください。上部に 7 つのアイコンがあります。左端のアイコン (ファイル フォルダーのように見える) を選択して、プロジェクト ナビゲーター ペインを表示します。

次に、そのペインの最初の項目 (プロジェクト自体) をクリックします。中央に大きな窓が開き、その左側に細い柱があります。

狭い列には、「プロジェクト」と「ターゲット」の 2 つのセクションがあります。「TARGETS」セクションでプロジェクト名をクリックします。中央のペインには、上部に「概要」、「情報」、「ビルド設定」、「ビルド フェーズ」、「ビルド ルール」の 5 つのタブがあります。

[ビルド フェーズ] タブをクリックします。あなたの設定が私のものと同じである場合、メインウィンドウに「Target Dependencies」、「Copy Bundle Resources」、「Compile Sources」、「Link...」の 4 つのセクションが表示されます。(右下隅にある) [ビルド フェーズの追加] をクリックし、[実行スクリプトの追加] を選択します。中央のペインに「Run Script」というタイトルの 5 番目のセクションが表示されます。「Run Script」セクションを上にドラッグして、「Target Dependencies」のすぐ下、上から 2 番目のセクションになるようにします。

次に、[スクリプトの実行] セクションの開閉用三角ボタンをクリックします。これにより、スクリプトを配置できるウィンドウが開きます。次のスクリプトをコピーして、そのウィンドウに貼り付けます。

#!/bin/bash    
bN=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
bN=$((0x$bN)) 
bN=$(($bN + 1)) 
bN=$(printf "%X" $bN)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $bN" "$INFOPLIST_FILE"

「インストール時にのみスクリプトを実行する」がチェックされていないことを確認してください。

それでおしまい!これで、プロジェクトをビルドするたびにビルド番号が自動的にインクリメントされます。

このスクリプトは、info.plist ファイルに単純な 16 進数のビルド番号があると想定し、それを 16 進数としてインクリメントします。ビルド番号がないとどうなるかわかりません。ただし、開始値を入力するのは簡単です。上で使用したのと同じ中央ペインの [概要] タブに移動し、[ビルド] ボックスに「1」(または任意の値) を入力します (ただし、フォーマットされた値ではありません)。 1.0 のような文字列)。


最初に提供した 16 進スクリプトは、App Store への提出には有効ではないと思います。以下は、10 進演算を使用した同じスクリプトです。

#!/bin/bash    
bN=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE") 
((bN += 1))
bN=$(printf "%d" $bN)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $bN" "$INFOPLIST_FILE"
于 2012-04-08T17:25:07.533 に答える
4

このコードで info.plist の値を取得できます (CFBundleShortVersionString必要な info.plist のキーに置き換えてください。推奨される Info.plist キーを参照してください) 。

[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]
于 2012-04-04T16:31:22.910 に答える
4

これらの値はアプリに保存されているためInfo.plist、で提供されているメソッドを介して読み取ることができますNSBundle

NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: CFBundleShortVersionString];

Info.plist ファイルからデータを取得するための正式なリファレンスとしてバンドルのコンテンツへのアクセスを参照し、利用可能な Info.plist キーについてはCore Foundation キーを参照してください。

于 2012-04-04T16:35:47.863 に答える
0

スウィフトの場合:

let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as? String
于 2014-12-02T12:42:18.780 に答える