2013-07-28 5 views
2

У меня есть «бесплатная» и «платная» версия моего приложения, и я хочу автоматически увеличивать оба номера сборки одновременно, потому что иногда я тестирую с помощью «Free », и иногда я тестирую версию« Платный »в зависимости от того, что я делаю. Это, по сути, одна и та же база кода, у меня есть две цели с директивой препроцессора, определенной с помощью «Платной» версии, чтобы разблокировать определенные вещи.Auto-Increment номер сборки для нескольких целей в Xcode

Я использую код в этом вопросе: Version vs build in XCode

#!/bin/bash  
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE") 
buildNumber=$(($buildNumber + 1)) 
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE" 

Я думаю, что мне просто нужно добавить еще две строки, задающей путь к другому $INFOPLIST_FILE вдоль линий:

"Print CFBundleVersion" "NEW_PATH/$INFOPLIST_FILE" 

и увеличивайте его, но как мне получить путь к Plist одной цели, когда я строю другой?

+0

Не могли бы вы рассказать о том, что вы на самом деле имеете в виду по пути? –

+0

Я имел в виду путь к файлу, т. Е. "~/Projects/iOSApp/App." Я понял вопрос и ответил ниже, если вы заинтересованы –

ответ

3

Я понял. Вам нужно использовать переменную SRCROOT. Это даст вам базовый каталог для проекта. Оттуда вам нужно вручную указать расположение файлов info.plist, которые вы хотите использовать, и запустить команду PlistBuddy -c с этим путем.

Вот пример, который увеличивает «Free» версия первого, а затем увеличивает «оплачено» версия:

#!/bin/bash 
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE") 
buildNumber=$(($buildNumber + 1)) 
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE" 

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$SRCROOT/Pro-Info.plist") 
buildNumber=$(($buildNumber + 1)) 
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$SRCROOT/Pro-Info.plist" 

Вы должны убедиться, что вы инвертировать сценарий для каждой цели, поэтому он использует $INFOPLIST_FILE переменной по текущей цели, и вы указываете местоположение других. Возможно, вы сохранили их в пользовательских переменных или указали каждый из них, вместо того, чтобы использовать переменную $INFOPLIST_FILE, но все они делают практически то же самое.