Вероятно, самый простой способ - это использовать PlistBuddy.У меня есть фаза Run Script, которая выглядит следующим образом:
BUILD_NUMBER=`git rev-list HEAD --count`
INFO_PLIST="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH"
if [ -f "$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" ] ; then
oldversion=`/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$INFO_PLIST"`
fi
if [ "$BUILD_NUMBER" != "$oldversion" ] ; then
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUMBER" "$INFO_PLIST"
fi
(Обратите внимание, что начиная с Xcode 6, вы должны запустить эту после фазы Copy Bundle Resources, потому что Info.plist
не копируется в целевое местоположение до тех пор, и PlistBuddy не сможет.)
Редактировать 01/17: Обновлено, чтобы избежать ненужного копирования или подписания целей.Вы не хотите трогать Info.plist, если что-то действительно не изменяется, иначе Xcode будет рассматривать его (и, следовательно, цель) как измененный.Проверка предыдущего значения CFBundleVersion
может значительно ускорить сборку - это сэкономило мне несколько секунд при сборке noop.