Ответ 1
https://gist.github.com/966838 - это короткий bash script, который соответствует требованиям Apple, что CFBundleVersion должна быть монотонно увеличенной строкой.
В Xcode я хочу установить версию пакета проекта для хеша git, чтобы создать уникальную ссылку между версией и сборкой.
(Я видел несколько сообщений об этом, которые увеличивают номер сборки для каждой сборки, но для меня это кажется чрезмерным, и я хотел бы иметь номер сборки, на который могут ссылаться тестеры, когда обратная связь отправителя).
Я добавил следующее как Run Script в фазах сборки:
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion `git rev-parse --short HEAD`" *.plist
И затем я зачитал версию пакета в коде с помощью:
[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
Однако, новый номер версии не отображается в коде до следующей сборки. Я предполагаю, что это связано с тем, что файл plist уже считывается компилятором, когда выполняется мой Script.
Кроме того, поскольку plist изменяется с строкой ревизии после фиксации до git, это вызывает раздражающий diff в проекте, поэтому, возможно, я не настолько умный в конце концов.
Альтернативой было бы записать номер версии в текстовый файл (build.txt), который игнорируется git. Но мне все равно хотелось бы, чтобы номер сборки проекта следовал за git.
Кто-нибудь знает блестящий способ сделать это?
https://gist.github.com/966838 - это короткий bash script, который соответствует требованиям Apple, что CFBundleVersion должна быть монотонно увеличенной строкой.
Вам понадобится установить PlistBuddy
, чтобы использовать этот метод.
Метод, который я использую, заключается в установке script в качестве последней фазы сборки и внесении изменений в целевой каталог сборки. Другими словами:
BUILD_NUMBER=`git rev-parse --short HEAD`
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUMBER" "${TARGET_BUILD_DIR}"/"${INFOPLIST_PATH}"
Таким образом, в репо значение должно быть фиктивным значением, равным 0, и оно будет перезаписываться каждый раз. Это означает, что текущий номер сборки будет доступен только после сборки.
Было несколько способов сделать это.
Я использовал для запуска post build script, чтобы ввести sha в пакет:
https://gist.github.com/208825
Но более современный метод на Cocoa является моим блогом подруги http://www.cimgf.com/2011/02/20/revisiting-git-tags-and-building/
Я написал гораздо более короткий script для этого. Bash может выполнить задачу; нет необходимости в других переводчиках.