Можете ли вы использовать «expo build: ios» в среде CI с двухфакторной аутентификацией Apple и как - PullRequest
1 голос
/ 06 марта 2020

Есть ли способ использовать expo build:ios в среде CI и пройти двухфакторную аутентификацию?

У меня возникают проблемы при запуске сборки с использованием expo в нашей среде CI из-за необходимости двухфакторной аутентификации для моей учетной записи разработчика Apple.

Команда expo build:ios должна использоваться только локально или без двухфакторной аутентификации?

Запуск сборки локально в интерактивном режиме работает - пароль и двухфакторная аутентификация требовались только при первом выборе приложения. Для последовательной сборки я использую только expo build:ios --release-channel test и все

Моя среда CI - это Google Cloud Build - она ​​работает в контейнере Docker, поэтому я не могу go и выполнить однократный ручной вход чтобы бегун сохранил некоторую информацию о сеансе, как это происходит локально, могу я?


После прочтения информации об использовании cli для expo build:ios и того, что вы можете установить пароль своей учетной записи как переменную ENV, например EXPO_APPLE_PASSWORD I хотя должно быть возможно использовать его в среде CI

Но тогда я получаю следующий результат:

expo login --non-interactive -u XXX

Success. You are now logged in as XXX.
expo build:ios --non-interactive --no-wait --release-channel test --apple-id XXXXX --team-id F7NE7X9ZFW
- Making sure project is set up correctly...
[16:43:00] Checking if there is a build in progress...
[16:43:00] Trying to authenticate with Apple Developer Portal...
Two-factor Authentication (6 digits code) is enabled for account 'XXXXX'
More information about Two-factor Authentication: https://support.apple.com/en-us/HT204915
If you're running this in a non-interactive session (e.g. server or CI)
check out https://github.com/fastlane/fastlane/tree/master/spaceship#2-step-verification
...
Please enter the 6 digit code:
[16:43:02] Authentication with Apple Developer Portal failed!
[16:43:02] Reason: Unknown reason, raw: "The input stream is exhausted."

Поэтому я перехожу по ссылке для неинтерактивного сеансы: https://github.com/fastlane/fastlane/tree/master/spaceship#2 -step-проверка

И я вижу, что мне нужно создать и использовать переменную среды FASTLANE_SESSION. Но в этот момент я не уверен, будет ли это работать, так как кажется, что это исходит от некоторого инструментария, который expo использует внутри.

Думаю, я могу установить fastlane локально и попытаться сгенерировать эту переменную с помощью команды fastlane spaceauth -u user@example.org. Я не нашел ничего об этом в документации expo, хотя

Есть информация об использовании expo build:ios для создания автономных приложений, она описывает только то, как их создавать локально https://docs.expo.io/versions/v36.0.0/distribution/building-standalone-apps/

У них есть руководство по потоку CI («на вашем CI») - но он использует turtle-cli, а для iOS требуется работать в среде ma c - в нем рассказывается, как делать сборки самостоятельно. на вашей собственной машине и без использования expo.io https://docs.expo.io/versions/v36.0.0/distribution/turtle-cli/


Еще одна вещь, которую я пробовал, работает так:

expo build:ios \
  --team-id YOUR_TEAM_ID \
  --dist-p12-path /path/to/your/dist/cert.p12 \
  --provisioning-profile-path /path/to/your/provisioning/profile.mobileprovision

С EXPO_IOS_DIST_P12_PASSWORD установлено как переменная env, но сборка не удастся, так как для нее все еще нужны идентификатор Apple и пароль


Есть ли способ, которым я могу поделиться или скопировать свой локальный сеанс - сеанс, который expo создал первым время, когда я запускаю build:ios, где я аутентифицировался, и мне больше не предлагается пароль для компьютера CI?

1 Ответ

0 голосов
/ 11 марта 2020

Вот что у меня получилось в итоге:

Я создал другой идентификатор пакета com.myawesome.stuff Я также сгенерировал / создал:

  • Сертификат распространения P12 --dist-p12-path
  • Pu sh Файл ключа .p8 - --push-id и --push-p8-path
  • Профиль обеспечения. - --push-p8-path

Затем локально Я запустил следующее:

Вход в систему в интерактивном режиме

expo login

Проверка подлинности с помощью Apple в интерактивном режиме

expo build:ios --clear-credentials --apple-id my@appleId.com --team-id=TheTeam --dist-p12-path=dist.p12 --provisioning-profile-path=profile.mobileprovision --push-p8-path=push.p8 --push-id=THEID --release-channel test

Tobe честно, я запускаю их локально, но в облачном консольном терминале Google

Затем в среде CI мы просто используем:

expo login --non-interactive "--username=XXXX"
expo build:ios --non-interactive --no-wait "--release-channel=$BRANCH_NAME"

, который работает и создает следующий журнал

- Making sure project is set up correctly...
[17:48:39] Checking if there is a build in progress...

[17:48:40] Fetching available credentials
[17:48:40] Unable to validate distribution certificate due to insufficient Apple Credentials
[17:48:40] Unable to validate Push Keys due to insufficient Apple Credentials
- Performing best effort validation of Provisioning Profile...

[xmldom error]  element parse error: Error: invalid tagName: 
@#[line:99,col:125]
[xmldom error]  element parse error: Error: invalid tagName: 
@#[line:114,col:75]
[xmldom error]  element parse error: Error: invalid tagName: 
@#[line:143,col:84]
✔ Successfully performed best effort validation of Provisioning Profile.
[17:48:40]
[17:48:40] Project Credential Configuration:
[17:48:40]   Experience: @XXXX/XXXX, bundle identifier: com.XXXXXXXX
[17:48:40]     Provisioning profile is missing. It will be generated during the next build
[17:48:40]     Apple Team ID: XXXXXXX,  Apple Team Name: ---------
[17:48:40]
[17:48:40]   Distribution Certificate - Certificate ID: -----
[17:48:40]     Apple Team ID: XXXXXXX,  Apple Team Name: ---------
[17:48:40]     used by
      @XXXX/XXXX (com.XXXXXXX)
[17:48:40]   Push Notifications Key - Key ID: XXXXXXXX
[17:48:40]     Apple Team ID: XXXXXXX,  Apple Team Name: ---------
[17:48:40]     used by
      @XXXX/XXXX (com.XXXXXXX)
[17:48:40] Unable to find an existing Expo CLI instance for this directory, starting a new one...
[17:48:42] Starting Metro Bundler on port 19001.
[17:48:46] Tunnel ready.
[17:48:46] Publishing to channel 'test'...
[17:48:47] Building iOS bundle
[17:50:13] Finished building JavaScript bundle in 60785ms.
[17:50:13] Building Android bundle
[17:51:04] Finished building JavaScript bundle in 51597ms.
[17:51:04] Analyzing assets
[17:51:06] Finished building JavaScript bundle in 1669ms.
[17:51:08] Finished building JavaScript bundle in 1526ms.
[17:51:08] Uploading assets
[17:51:08] No assets changed, skipped.
[17:51:08] Processing asset bundle patterns:
[17:51:08] - /workspace/**/*
[17:51:08] Uploading JavaScript bundles
[17:51:12] Published
[17:51:12] Your URL is

https://exp.host/@XXXX/XXXX?release-channel=test

[17:51:12] › Closing Expo server
[17:51:12] › Stopping Metro bundler
[17:51:13] Checking if this build already exists...

[17:51:13] Build started, it may take a few minutes to complete.
[17:51:13] You can check the queue length at https://expo.io/turtle-status

[17:51:13] You can make this faster. ?
Get priority builds at: https://expo.io/settings/billing

[17:51:13] You can monitor the build at

 https://expo.io/dashboard/XXXX/builds/e5c32814-8613-4fef-889a-05ca982e952f

[17:51:13] Alternatively, run `expo build:status` to monitor it from the command line.

check Несмотря на неприятные предупреждения в начале, сборка работает и выдает .ipa, что мы ' успешно отправлены на тестовый полет

[ошибка xmldom]: ошибка синтаксического анализа элемента: Ошибка: недопустимое имя тега: @ # [строка: 99, столбец: 125]

[17:48: 40] Профиль обеспечения отсутствует. Он будет сгенерирован во время следующей сборки


Я думаю, что проблема может быть в том, что используемый нами облачный компоновщик Google настроен на местоположение в США, но в последний раз, когда я использовал Команда expo build:ios локально на моем p c Я был в другом регионе. Так что простого запуска expo build:ios -clear-credentials может быть достаточно, и вы можете позволить expo создавать и управлять всеми необходимыми сертификатами.

Но нигде я не нашел никакой информации о том, что в CI (неинтерактивной) среде вы должны использовать expo build:ios без указания идентификатора Apple и учетных данных

...