Как добавить номер интеграции хоста Xcode в сборку Script

Я создаю приложение iPad с файлом Settings.bundle. Я пишу скрипты сборки, чтобы отобразить номер версии приложения и номер интеграции ботов xcode (а не номер сборки пакета). Я искал в Интернете и не нашел решения. Вот что я получил:

-- Add the app version number
cd $PROJECT_DIR
cd "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app"

RELEASE_VERSION=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" Info.plist)
/usr/libexec/PlistBuddy -c "Set :PreferenceSpecifiers:1:DefaultValue $RELEASE_VERSION" Settings.bundle/Root.plist

-- Add the build version number
BUILD_NUMBER=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" Info.plist)
/usr/libexec/PlistBuddy -c "Set :PreferenceSpecifiers:2:DefaultValue $BUILD_NUMBER" Settings.bundle/Root.plist

В номере версии сборки я хотел бы заменить CFBundleVersion на число интеграции xcode bot.

Ответ 1

Я реализовал это, используя Shell Script Фаза сборки в моем проекте Xcode. В моем случае я использовал номер интеграции для установки внутренней версии моего встроенного продукта. Мой Script выглядит следующим образом:

if [ "the$XCS_INTEGRATION_NUMBER" == "the" ]; then
    echo "Not an integration build…"
    xcrun agvtool new-version "10.13"
else
    echo "Setting integration build number: $XCS_INTEGRATION_NUMBER"
    xcrun agvtool new-version "$XCS_INTEGRATION_NUMBER"
fi

Обратите внимание, что XCS_INTEGRATION_NUMBER существует по умолчанию в среде сборки Xcode Server. Если вы хотите имитировать сборку интеграции (для целей этого script), вы можете просто добавить его в свои настройки сборки в качестве настраиваемой переменной.

Ответ 2

На самом деле вам даже не нужен agvtool, чтобы установить номер сборки в номер интеграции ботов Xcode. Просто установите номер сборки в ${XCS_INTEGRATION_NUMBER} в настройках вашего проекта.

Ответ 3

Я добавил (+) a Запустить Script для моих целей Фаза сборки непосредственно перед шагом Скомпилировать источники. Эта одна строка script работает для меня, чтобы установить номер интеграции как номер сборки. Спасибо Kaelin, я просто хотел немного упростить вещи.

[ -z "$XCS_INTEGRATION_NUMBER" ] && echo "Build #0" || xcrun agvtool new-version ${XCS_INTEGRATION_NUMBER}

Ответ 4

Я недавно наткнулся на ту же проблему. Существует очень прагматичный, но уродливый способ получения информации о последнем номере интеграции Xcode Bots:

sudo grep -r "integration =" /Library/Server/Xcode/Logs/xcsbuildd.log | tail -1 | cut -d'=' -f 2| cut -d';' -f 1 |tr -d '\040\011\012\015'

Я также создал вопрос stackoverflow, чтобы найти более интегрированный и менее хакерский способ достижения этой цели: Зарегистрировать сообщения из collabd, такие как XCSBuildService, для получения номера интеграции Xcode Bots

Но, возможно, способ для синтаксического анализа xcsbuildd.log, как описано выше, достаточно для ваших целей.