Боты 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.
Удачи!
Стив