在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中获取信息会显示预期的数字。
任何想法为什么?非常感谢。
答案 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.您的版本不属于该范围,因此如果您想保留该数字,则必须使用CFBundleGetValueForInfoDictionaryKey
键kCFBundleVersionKey
。或者,您可以将版本格式更改为CFBundleGetVersionNumber
支持的Mac OS标准。