CFBundleGetVersionNumber返回0?

时间:2012-02-06 17:46:09

标签: macos bundle core-foundation resourcebundle

在10.6.8上运行的XCode 3.X应用程序在info.plist中有此条目:

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

在awakeFromNib()中进行快速检查:

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

引用非零,但版本号始终为0.

在Finder中获取信息会显示预期的数字。

任何想法为什么?非常感谢。

2 个答案:

答案 0 :(得分:2)

请参阅CFBundleGetVersionNumber的文档:

  
    

返回值

         

Mac OS 'vers'资源样式版本号。如果软件包的版本号是一个数字,则它被解释为由 Mac OS 9 上的'vers'资源定义的无符号长整数格式。如果它是一个字符串,它会自动转换为数字表示形式,其中主要版本号限制为2个BCD数字(换句话说,它必须在0-99范围内),次要和错误修复版本号是每个限制为一个BCD数字(0-9)。更多详细信息,请参见技术说明TN1132。

         

<强>讨论

         

此功能仅支持Mac OS 'vers'资源样式版本号。在使用其他版本号样式(即X,XY或XYZ)的情况下,可以使用CFBundleGetValueForInfoDictionaryKey和键kCFBundleVersionKey将版本号从包的信息字典中提取为字符串。

  

您没有在.rsrc文件中使用旧的OS 9风格的'vers'版本资源,而是使用现代方法将其指定为Info.plist文件中的字符串。< / p>

您可以使用以下内容:

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

答案 1 :(得分:0)

请参阅the documentation for CFBundleGetVersionNumber - 它仅支持X.Y.Z形式的版本号,其中X <= 99,Y <= 9,Z <= 9.您的版本不属于该范围,因此如果您想保留该数字,则必须使用CFBundleGetValueForInfoDictionaryKeykCFBundleVersionKey。或者,您可以将版本格式更改为CFBundleGetVersionNumber支持的Mac OS标准。