2012-04-04 3 views
34

Легко установить номера сборки и версии вручную в Xcode, и я научился их увеличивать с помощью макроса во время сборки. Но как я могу ссылаться на их значения в коде?Обратитесь к номеру сборки или номеру версии в коде

+0

у вас есть задание/ссылку о том, как Autocreate версии #s? – phlebotinum

+0

@robo см. Мой «ответ» ниже. – RobertL

ответ

67

Конечно, вы можете задать свой основной пакет для каталога информации, которая включает в себя все ключи и значение вашего info.plist, включая номер версии:

NSDictionary *info = [[NSBundle mainBundle] infoDictionary]; 
NSString *version = [info objectForKey:@"CFBundleShortVersionString"]; 
+1

Wow 5 хорошие ответы в течение 12 минут после размещения вопроса! Все заслуживают зеленого чека, но я могу только принять его, поэтому я беру его с самой ранней меткой времени. – RobertL

+0

@RobertL В этом случае вы могли бы поддержать свои ответы, чтобы дать им некоторую репутацию. – JustSid

+0

Сделал это. Я не знал, что могу это сделать до сих пор. Благодарю. – RobertL

3

Вы можете получить info.plist значения с этой частью кода (замените CFBundleShortVersionString с ключом info.plist, которого вы хотите ср Recommended Info.plist Keys)

[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"] 
77
NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary]; 
NSString *appVersion = [infoDict objectForKey:@"CFBundleShortVersionString"]; // example: 1.0.0 
NSString *buildNumber = [infoDict objectForKey:@"CFBundleVersion"]; // example: 42 
+0

Является ли это документально зарегистрированным в документах Apple? Благодаря! – snowbound

+0

https://developer.apple.com/library/ios/documentation/general/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html документирует ключи, которые могут быть в приложении (ну, на самом деле, любой комплект) Info.plist, включая эти два. –

10
NSBundle *bundle = [NSBundle mainBundle]; 
NSString *appVersion = [bundle objectForInfoDictionaryKey:(NSString *)@"CFBundleShortVersionString"]; 
NSString *appBuildNumber = [bundle objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey]; 
3

Поскольку эти значения сохраняется в вашем приложении Info.plist вы можете прочитать затем с помощью методов, предусмотренных на NSBundle:

NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: CFBundleShortVersionString]; 

См Accessing bundles contents как авторитетному ссылки на получение данных из файла Info.plist и Core Foundation keys для доступного Info.plist ключи.

13

@robo Я сделал запись о том, как автоинкремент номер сборки (а не номер версии, но это очень похоже), но теперь я не могу ее найти. Я попытаюсь объяснить, что я сделал. Надеюсь, это будет достаточно ясно, чтобы следовать.

В Xcode 4 посмотрите на панели навигации, которая представляет собой панель с левой стороны экрана Xcode. Он имеет 7 значков в верхней части. Выберите левый значок (выглядит как папка с файлом), чтобы получить панель «Навигатор проекта».

Теперь щелкните по первому элементу в этой области, который является самим проектом. Это открывает большое окно в центре с узким столбцом слева от него.

Узкая колонка имеет 2 секции: «ПРОЕКТ» И «ЦЕЛИ». Нажмите на название своего проекта в разделе «ЦЕЛИ». Теперь центральная панель имеет 5 вкладок вверху: «Сводка», «Информация», «Настройки сборки», «Сборка фаз» и «Правила сборки».

Перейдите на вкладку «Построить фазы». Если ваша конфигурация такая же, как у меня, теперь вы увидите 4 раздела в главном окне: «Зависимости целей», «Копирование ресурсов пакета», «Скомпилировать источники» и «Ссылка ...». Нажмите «Добавить этап сборки» (в правом нижнем углу) и выберите «Добавить сценарий запуска». Пятый раздел теперь появляется в центральной панели с надписью «Run 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" 

Убедитесь, что «Запустить скрипт только при установке» НЕ ПРОВЕРЕН.

Вот и все! Теперь ваш номер сборки автоматически увеличивается при каждом создании проекта.

Этот скрипт предполагает, что в вашем файле info.plist имеется простой номер строчной шестерки и увеличивается его как шестнадцатеричный. Я не уверен, что он делает, если номер сборки отсутствует.Но легко ввести начальное значение - просто перейдите на вкладку «Сводка» в той же центральной панели, которую вы использовали выше, и введите «1» (или любое другое значение, которое вам нравится) в поле «Создать» (но не в формате строка вроде 1.0).


Я думаю, что шестнадцатеричный сценарий, который я дал первым, недействителен для отправки в App Store. Вот тот же скрипт, использующий десятичную арифметику.

#!/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" 
+0

большое спасибо. (10char) – phlebotinum

+0

К моему удивлению, я узнал, что шестнадцатеричные номера версий не проходят проверку для App Store. Я отправляю ответ ниже с пересмотренной версией скрипта, который выполняет десятичную арифметику. Смотри ниже. – RobertL

+0

Я пошел дальше и отредактировал ваш десятичный скрипт в нижней части этого ответа. Таким образом можно удалить другой ответ, сократив некоторые из них. – thegrinner

0

В Swift:

let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as? String 
Смежные вопросы