← back to Homesonspec

apps/mobile/scripts/build-ios-prod.exp

37 lines

#!/usr/bin/expect -f
# Drive `eas build --platform ios --profile production` through a pseudo-terminal
# so the FIRST-TIME iOS signing-credential prompts (which eas refuses to answer in
# non-interactive / `!`-piped mode) get answered. Accepts EAS's safe defaults:
# reuse the existing team Distribution Certificate, EAS-managed provisioning profile,
# EAS-managed APNs key (the alerts feature needs push). Cookie-backed Apple auth =
# no password/2FA (same as device-create.exp). --no-wait: queue + return the URL.
#
# Usage: expect build-ios-prod.exp   (run from apps/mobile)

set timeout 900
log_user 1
set ::env(EAS_BUILD_NO_EXPO_GO_WARNING) "true"

spawn npx eas-cli build --platform ios --profile production --no-wait

expect {
  -re "Would you like to use"                 { sleep 1; send "\r"; exp_continue }
  -re "log in to your Apple"                   { sleep 1; send "\r"; exp_continue }
  -re "Apple ID:"                              { sleep 1; send "\r"; exp_continue }
  -re "Distribution Certificate"               { sleep 1; send "\r"; exp_continue }
  -re "[Pp]rovisioning [Pp]rofile"             { sleep 1; send "\r"; exp_continue }
  -re "Push Notifications|APNs|Apple Push"     { sleep 1; send "\r"; exp_continue }
  -re "Would you like to set up"               { sleep 1; send "\r"; exp_continue }
  -re "\\(Y/n\\)|\\(y/N\\)"                     { sleep 1; send "\r"; exp_continue }
  # Terminal states — stop looping once the build is queued or an error prints.
  -re "Build details:.*https://expo.dev\\S+"   { }
  -re "https://expo.dev/accounts/\\S+/builds/\\S+" { }
  -re "Waiting for build"                      { }
  -re "Error:"                                 { }
  timeout                                       { }
  eof                                           { }
}
sleep 2
catch { send "\003" }
expect eof