Легко установить номера сборки и версии вручную в Xcode, и я узнал, как увеличивать их с помощью макроса во время сборки. Но как я могу ссылаться на их значения в коде?
См. Номер сборки или номер версии в коде
Ответ 1
Конечно, вы можете задать свой основной пакет для справочного каталога, который включает в себя все ключи и значения вашего info.plist, включая номер версии:
NSDictionary *info = [[NSBundle mainBundle] infoDictionary];
NSString *version = [info objectForKey:@"CFBundleShortVersionString"];
Ответ 2
NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
NSString *appVersion = [infoDict objectForKey:@"CFBundleShortVersionString"]; // example: 1.0.0
NSString *buildNumber = [infoDict objectForKey:@"CFBundleVersion"]; // example: 42
Ответ 3
@robo Я сделал запись о том, как автоинкремент номер сборки (а не номер версии, но это очень похоже), но теперь я не могу ее найти. Я попытаюсь объяснить, что я сделал. Я надеюсь, что это будет достаточно ясно, чтобы следовать.
В Xcode 4 посмотрите на панели "Навигатор", которая представляет собой панель с левой стороны экрана Xcode. Он имеет 7 значков в верхней части. Выберите левый значок (выглядит как папка с файлом), чтобы получить панель "Навигатор проекта".
Теперь нажмите на первый элемент в этой области, который является самим проектом. Это открывает большое окно в центре с узким столбцом слева от него.
Узкая колонка имеет 2 раздела: "ПРОЕКТ" И "ЦЕЛИ". Нажмите на название своего проекта в разделе "ЦЕЛИ". Теперь центральная панель имеет 5 вкладок вверху: "Сводка", "Информация", "Настройки сборки", "Сборка фаз" и "Правила сборки".
Нажмите вкладку "Построить фазы". Если ваша конфигурация такая же, как у меня, теперь вы увидите 4 раздела в главном окне: "Зависимости целей", "Копирование ресурсов пакета", "Скомпилировать источники" и "Ссылка...". Нажмите "Добавить этап сборки" (в правом нижнем углу) и выберите "Добавить запуск Script". Пятый раздел теперь появляется в центральной панели с надписью "Run Script". Перетащите раздел "Запустить Script", так что это второй раздел сверху, чуть ниже "Зависимости целей".
Теперь нажмите треугольник раскрытия для раздела Run Script. Это откроет окно, в которое вы можете поместить script. Скопируйте и вставьте в это окно Script.
#!/bin/bash
bN=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
bN=$((0x$bN))
bN=$(($bN + 1))
bN=$(printf "%X" $bN)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $bN" "$INFOPLIST_FILE"
Убедитесь, что "Запустить Script только при установке" НЕ ПРОВЕРЕН.
Что это! Теперь ваш номер сборки автоматически увеличивается каждый раз при создании проекта.
Этот Script предполагает, что в вашем файле info.plist есть простой номер строчной шестнадцатеричной сборки и увеличивается его как шестнадцатеричный. Я не уверен, что он делает, если номер сборки отсутствует. Но легко ввести начальное значение - просто перейдите на вкладку "Сводка" в той же центральной панели, которую вы использовали выше, и введите "1" (или любое другое значение) в поле "Построить" (но не отформатировано строка как 1.0).
Я думаю, что шестнадцатеричный Script, который я дал первым, недействителен для отправки в App Store. Здесь используется Script с использованием десятичной арифметики.
#!/bin/bash
bN=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
((bN += 1))
bN=$(printf "%d" $bN)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $bN" "$INFOPLIST_FILE"
Ответ 4
NSBundle *bundle = [NSBundle mainBundle];
NSString *appVersion = [bundle objectForInfoDictionaryKey:(NSString *)@"CFBundleShortVersionString"];
NSString *appBuildNumber = [bundle objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];
Ответ 5
Вы можете получить значения info.plist с этим фрагментом кода (замените CFBundleShortVersionString
на ключ info.plist, который вы хотите cf. Рекомендуемые ключи Info.plist)
[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]
Ответ 6
Так как эти значения хранятся в вашем приложении Info.plist
, вы можете прочитать затем с помощью методов, представленных на NSBundle
:
NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: CFBundleShortVersionString];
См. Доступ к содержимому пакетов в качестве авторитетной справки о получении данных из вашего файла Info.plist и Ключи Core Foundation для доступных ключей Info.plist.
Ответ 7
В Swift:
let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as? String