2012-02-06 4 views
1

アンXCodeの3.XアプリケーションはのInfo.plistにこのエントリを有する:awakeFromNibでCFBundleGetVersionNumberは0を返しますか? 10.6.8上で実行されている

<key>CFBundleVersion</key> 
<string>2035</string> 

()クイックチェックが行われる。

CFBundleRef br = CFBundleGetMainBundle(); 
if (br) 
{ 
    uint32_t v32 = CFBundleGetVersionNumber(br); 
} 

基準は、非あります0ですが、バージョン番号は常に0です。

「情報を見る」で期待される数字が表示されます。

なぜでしょうか?どうもありがとう。

答えて

2

CFBundleGetVersionNumberのためのマニュアルを参照してください:

戻り値

A Mac OSの'vers'リソーススタイルのバージョン番号。バンドルのバージョン番号が数字の場合、のMac OS 9'vers'リソースで定義されている符号なしの長整数フォーマットとして解釈されます。文字列の場合は、自動的に数値表現に変換されます。メジャーバージョン番号は2 BCDディジットに制限されています(換言すると、0〜99の範囲でなければなりません)。マイナーバージョンとバグ修正バージョン番号はそれぞれが単一のBCD数字(0〜9)に制限されています。詳細についてはテクニカルノートTN1132を参照してください。

ディスカッションは

この機能は、Mac OS 'vers'リソーススタイルのバージョン番号でサポートされています。他のバージョン番号スタイル(X、X.Y、またはX.Y.Z)が使用されている場合は、kCFBundleVersionKeyCFBundleGetValueForInfoDictionaryKeyを使用して、バンドルの情報辞書からバージョン番号を文字列として抽出できます。

あなたはInfo.plistファイル内の文字列として指定する近代的な方法を使用している、.rsrcファイルに古いOS 9スタイル'vers'バージョンのリソースを使用していません。

NSInteger bundleVersion = CFStringGetIntValue(
     CFBundleGetValueForInfoDictionaryKey(br, kCFBundleVersionKey)); 
+0

ありがとう:

次のようなものを使用することができます。私はこれに興味がある他の人のために、私はこれで解決しました: 'CFStringRef versStr =(CFStringRef)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle()、kCFBundleVersionKey); \t \t \t const char * vers = CFStringGetCStringPtr(versStr、kCFStringEncodingMacRoman); ' –

0

the documentation for CFBundleGetVersionNumberを参照してください - それは形だけX.Y.Zのバージョン番号をサポートしているX < = 99、Y < = 9、およびZ < = 9.あなたがCFBundleGetValueForInfoDictionaryKeyを使用する必要がありますので、お使いのバージョンでは、その範囲に該当しませんその高い数字を維持したい場合はkCFBundleVersionKeyのキーを押してください。あるいは、バージョンフォーマットをCFBundleGetVersionNumberがサポートするMac OS標準に変更することもできます。

関連する問題