Боты Xcode 5 и автоматические сборки Testflight

Во-первых, у меня Mac Mac с запущенным сервером на Mavericks и установлен Xcode 5. На сервере мои проекты iOS настроены с помощью ботов для запуска автоматических сборок моего репозитория Github при каждой фиксации к мастеру. Что я хочу выяснить, так это то, что кто-то уже настроил этот тип установки для работы с автоматическими сборками, отправляемыми в TestFlight.

Скрипт, который ранее работал с процессом сборки Jenkins, вставлен ниже, но выдает ошибку и не загружается, когда бот завершает сборку. У меня этот скрипт запущен на "пост-действии" процесса архивирования моего приложения.

Ошибка журнала сервера:

Печать: запись "CFBundleVersion" не существует

ошибка: указанное приложение не существует или не является каталогом комплектов: '/Library/Server/Xcode/Data/BotRuns/Cache/s892fj1n2-f4bb-2514-522v-2a23d0f0c725/DerivedData/Build/Products/Debug-iphoneos/myApp.ipa"

Автор сценария:

 PLIST_FILE=$(echo -n "${SRCROOT}/${INFOPLIST_FILE}")
 BUILD_TYPE=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PLIST_FILE}")
 API_TOKEN="<API_TOKEN>"
 TEAM_TOKEN="<SECRET>"

 APP="${BUILD_ROOT}/Debug-iphoneos/${FULL_PRODUCT_NAME}"

/bin/rm "/bots/${PRODUCT_NAME}.ipa"
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${APP}" -o "/bots/${PRODUCT_NAME}.ipa"

/usr/bin/curl "http://testflightapp.com/api/builds.json" \
-F [email protected]"/bots/${PRODUCT_NAME}.ipa" \
-F a      pi_token="${API_TOKEN}" \
-F team_token="${TEAM_TOKEN}" \
-F notes="Build uploaded automatically from server." \
-F distribution_lists="internal"

ОБНОВЛЕНИЕ 11/20:

Хороший ресурс, чтобы попробовать: TestFlight Bots

Я не получил его работать пару недель назад, но пост был обновлен с тех пор, как я в последний раз пытался.

Ответ 1

Это похоже на проблему с разрешениями. Вы можете получить доступ к папке \Library\XCode\Data? Мне удалось запустить script (кроме загрузки в testflight). Мне пришлось предоставить доступ для чтения к \Data и записать доступ к папке назначения, и я вижу, что созданный ipa.

Ответ 2

Я изучаю способы переключения моей команды из нашей фермы Jenkins для сборки iOS на новый сервер ботов Xcode. У меня очень похожая проблема для решения проблемы непрерывного развертывания при успешной сборке/тестировании CI.

У меня нет ответа (пока), но я хотел поделиться некоторыми вещами, которые я нашел, которые могут вам помочь.

Два потока могут помочь дать понять, почему ваша загрузка TestFlight не работает на сервере ботов.

Согласно Kra Larivain с этот пост относительно CocoaPods CLI и Xcode bots:

  • "сборка работает на боте как непривилегированный пользователь без оболочки (_teamsserver с /usr/bin/false как оболочка)"

  • "добавить _teamsserver в sudoers без пароля (%_teamsserver ALL=(ALL) NOPASSWD: ALL в вашем файле sudoers). Вероятно, вы хотите быть немного умнее и предоставить только sudo-привилегию" для необходимых команд

  • /Library/Server/Xcode/Data устанавливается как rw только пользователем _teamsserver

  • "добавьте в свое предварительное действие следующее script, где BUILD_USER - ваш, ну, создайте пользователя. Убедитесь, что Provide build settings from главная цель, SRCROOT не будет установлена ​​иначе (по умолчанию None). Этот пример предназначен для CocoaPods, но может быть адаптирован к вашему использованию

if [ `whoami` = '_teamsserver' ]; then
echo "running pod install as part of CI build"
chmod 777 /Library/Server/Xcode/Data
cd ${SRCROOT}
rm ./Podfile.lock
rm -rf ./Pods
sudo chown -R BUILD_USER .
sudo -H -u BUILD_USER pod install
sudo chown -R _teamsserver .
fi

Вероятно, вы видели это уже, но это стоит упомянуть для других. Отметьте сообщение Justin Miller в сообщениях Xcode и testflight после архива для сравнения с вашим script.

Удачи! Стив