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

Во-первых, у меня есть Mac Mini с работающим сервером на 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 file=@"/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"

ОБНОВЛЕНИЕ 20 ноября:

Хороший ресурс, который можно попробовать: TestFlight Bots< /а>

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


person Mark    schedule 24.10.2013    source источник
comment
В этой ветке слишком много дискуссий о TestFlight. Проблема не имеет ничего общего с TestFlight и связана с ошибкой, созданной процессом xcrun: указанное приложение не существует или не является каталогом пакетов.   -  person Kyle Redfearn    schedule 28.10.2014
comment
К сожалению, это не работает для Xcode 6   -  person Maciej Swic    schedule 19.11.2014


Ответы (2)


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

person Truth    schedule 29.10.2013
comment
У меня еще не было возможности проверить это, я дам вам знать, если это было проблемой. Спасибо! - person Mark; 30.10.2013
comment
И почти через месяц... Полностью это не исправило, но помогло. Я все еще не могу загрузить сборку TestFlight, но я нашел еще один хороший ресурс (добавлена ​​ссылка на мой исходный пост). - person Mark; 20.11.2013

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

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

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

Согласно Кра Ларивейн с этим сообщением о CLI CocoaPods и ботах Xcode< /а>:

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

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

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

  • "добавьте в предварительное действие следующий сценарий, где 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

Вы, вероятно, уже видели это, но это стоит упомянуть для других. Проверьте сообщение Джастина Миллера о действиях после архивирования Xcode и testflight. для сравнения с вашим скриптом.

Удачи! Стив

person Steve Jansen    schedule 15.11.2013
comment
Я видел этот пост раньше, я попытаюсь начать это снова. Я добавил ссылку на исходный пост, который также может помочь. Я отправлю обратно с тем, что работает для меня. Спасибо! - person Mark; 20.11.2013
comment
@ Марк, есть прогресс? Я новичок в CI и сталкиваюсь с теми же проблемами в проектах с Cocoapods. - person EdGs; 21.02.2014
comment
@EdGs Я работал над этим некоторое время и в конце концов вернулся к использованию Jenkins на данный момент, я просто не мог загрузить сборки TestFlight. Лучшее (я думаю), что я пробовал, это эта ссылка. Кстати, Apple недавно приобрела Burstly (компанию, которой принадлежит TestFlight). by-apple/" rel="nofollow noreferrer">source, поэтому, возможно, в ближайшем будущем мы увидим некоторую интеграцию с Xcode Server. - person Mark; 04.03.2014
comment
добавьте к вашему предварительному действию следующий сценарий, где BUILD_USER — это ваш пользователь сборки. Вам нужно это где-то настроить? - person ; 14.03.2014