CFBundleGetVersionNumber возвращает 0? - PullRequest
1 голос
/ 06 февраля 2012

Приложение XCode 3.X, работающее на 10.6.8, имеет эту запись в info.plist:

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

В awakeFromNib () выполняется быстрая проверка:

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

Ссылка ненулевая, но номер версии всегда равен 0.

Get Info в Finder отображает ожидаемое число.

Есть идеи, почему? Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 07 февраля 2012

См. Документацию для CFBundleGetVersionNumber :

Возвращаемое значение

Mac OS 'vers' версия стиля ресурсачисло.Если номер версии пакета является числом, он интерпретируется как формат длинного целого без знака, определенный ресурсом 'vers' в Mac OS 9 .Если это строка, она автоматически преобразуется в числовое представление, где основной номер версии ограничен 2-мя цифрами BCD (другими словами, он должен быть в диапазоне 0-99), а вспомогательные и номера версий исправлений ошибоккаждая ограничена одной цифрой BCD (0-9).См. Техническую ноту TN1132 для получения более подробной информации.

Обсуждение

Эта функция поддерживается только для номеров версий в стиле ресурсов Mac OS 'vers'.Если используются другие стили номера версии, а именно X, XY или XYZ, вы можете использовать CFBundleGetValueForInfoDictionaryKey с ключом kCFBundleVersionKey, чтобы извлечь номер версии в виде строки из информационного словаря пакета.

Вы не используете старые версии 'vers' в стиле OS 9 в файле .rsrc, вы используете современный метод указания его в виде строки в файле Info.plist.

Вы можете использовать что-то вроде:

NSInteger bundleVersion = CFStringGetIntValue(
       CFBundleGetValueForInfoDictionaryKey(br, kCFBundleVersionKey));
0 голосов
/ 06 февраля 2012

См. документацию для CFBundleGetVersionNumber - он поддерживает только номера версий вида X.Y.Z, где X <= 99, Y <= 9 и Z <= 9. Ваша версия непопадайте в этот диапазон, поэтому вы должны использовать <code>CFBundleGetValueForInfoDictionaryKey с клавишей kCFBundleVersionKey, если хотите сохранить это высокое число.В качестве альтернативы вы можете изменить формат вашей версии на стандарт Mac OS, который поддерживает CFBundleGetVersionNumber.

...