CFBundleGetVersionNumberは0を返しますか?

10.6.8で動作するXCode 3.Xアプリケーションはinfo.plistに次のエントリを持ちます:

CFBundleVersion
2035

awakeFromNib()では、すばやくチェックされます:

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

参照はゼロではありませんが、バージョン番号は常に0です。

Finderで情報を見ると、予想される数字が表示されます。

なぜどんなアイデア?どうもありがとう。

1

2 答え

CFBundleGetVersionNumber

    

戻り値

         

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

         

ディスカッション

         

この関数は、Mac OSの 'vers' リソーススタイルのバージョン番号でのみサポートされています。 CFBundleGetValueForInfoDictionaryKey kCFBundleVersionKey キーで使用して、バージョン番号を文字列として抽出することができます。バンドルの情報辞書。

  

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

次のようなものを使うことができます:

NSInteger bundleVersion = CFStringGetIntValue(
       CFBundleGetValueForInfoDictionaryKey(br, kCFBundleVersionKey));
2
追加された
ありがとう。私はこれに興味を持った人のために次のように決めました: 'CFStringRef versStr =(CFStringRef)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle()‌、kCFBundleVersionKey‌); const char * vers = CFStringGetCStringPtr(versStr、kCFStringEncodingMacRoman); '
追加された 著者 G Forty,

See the documentation for CFBundleGetVersionNumber - it only supports version numbers of the form X.Y.Z where X <= 99, Y <= 9, and Z <= 9. Your version doesn't fall into that range, so you have to use CFBundleGetValueForInfoDictionaryKey with the key kCFBundleVersionKey if you want to keep that high number. Alternatively you can change your version format to the Mac OS standard that CFBundleGetVersionNumber supports.

0
追加された