2011-09-10 4 views
0

Macアプリケーションのアプリケーションバージョンは、Info.plistファイルで定義されています。実行ファイル内のアプリケーションバージョンをコンパイルするための一般的なパターン

私の場合のアプリケーションのバージョン番号は有益なだけでなく、アプリでいくつかの動作を定義しています。 誰かがこのファイルを編集すると、アプリケーションが壊れる可能性があります。最も速い解決策は、実行可能ファイル内でアプリ版をコンパイルすることです。

実行可能ファイル内にアプリケーションバージョンをコンパイルするための一般的なパターンはありますか?

アプリケーションのバージョンは、静的/グローバルIMHOである必要があります。

+0

アプリケーションがコード署名されている場合、ユーザーはアプリケーションを中断することなく 'Info.plist'ファイルを変更することができません。とにかく 'Info.plist'でアプリのバージョンを変更するのはなぜですか?これは非常に起こりそうなシナリオのようです。 –

+0

バージョン番号の対象となるアプリケーションで古い動作が残っているのはなぜですか?なぜ古いコードを外してみませんか? –

+0

私のアプリがサーバー上でリレーする場合、クライアントとサーバーは動作を同期させる必要があります。サーバーが更新されると、ユーザーはアプリを更新する必要があり、更新ルーチンはソリッド・バージョン番号でリレーする必要があります。今のところ私はpchファイルにNSStringを作成しました。 – kilianc

答えて

2

ターゲットのビルド設定で、Versioning SystemNoneからApple Genericに変更してください。次に、アプリケーションのバージョンを変更するたびにCurrent Project Versionの設定を変更します。

バージョン番号については
const unsigned char $(PRODUCT_NAME)VersionString[] = "@(#)PROGRAM:$(PRODUCT_NAME) PROJECT:$(PROJECT_NAME)-$(CURRENT_PROJECT_VERSION)\n"; 
const double $(PRODUCT_NAME)VersionNumber = (double)$(CURRENT_PROJECT_VERSION); 

、小数点以下第三位の後に何が遮断されて:あなたは、他のビルド設定を変更しない場合は、次のように各ビルドには、2つの変数を含んでいる$(PRODUCT_NAME)_vers.cと呼ばれるファイルを生成定義されますそれは二重として表現することができます。 1.2.3が1.2として格納される。両方の変数にはused属性も指定されているため、使用しない場合は削除されません。

これらの変数を使用するには、それらを使用するファイルでexternとして宣言する必要があります。これを使用するすべてのファイルでこれを行うか、これらの宣言を含むヘッダーを作成してファイルにインクルードすることができます。宣言は次のようになります。

extern const unsigned char $(PRODUCT_NAME)VersionString[]; 
extern const double $(PRODUCT_NAME)VersionNumber; 

通常の変数のように使用できます。

+0

アプリ内でこれらの定数をどのように呼び出すことができますか? – kilianc

+0

externとして宣言する必要があります。私はどのように表示するために私のポストにこれを追加します。 – ughoavgfhw

+0

'NSLog(@"%f "、MyAppVersionNumber);' => 0.0000バージョン番号を取得する方法はありません:) – kilianc

関連する問題