Expo 빌드
Expo 프로젝트를 prebuild로 네이티브 프로젝트로 만들어 빌드하거나 EAS 로컬 빌드를 XenoCI VM에서 돌립니다
Expo 앱은 두 가지 방법으로 빌드합니다, expo prebuild로 ios/를 만든 뒤 React Native처럼 xcodebuild로 빌드하거나, eas-cli의 로컬 빌드를 VM 안에서 돌립니다
방법 1: prebuild + xcodebuild
React Native iOS 빌드의 스크립트를 그대로 씁니다, ios/ 폴더가 없으면 스크립트가 npx --no-install expo prebuild --platform ios --no-install로 만듭니다, package.json의 dependencies에 expo가 있어야 합니다
프레임워크 실측 픽스처(Expo 55, React Native 0.83, app.json에 ios.bundleIdentifier)가 이 경로로 빌드됩니다
방법 2: EAS 로컬 빌드
EAS 클라우드 대신 XenoCI VM에서 eas build --local을 돌립니다, 시뮬레이터 프로파일이면 Apple 자격 증명이 필요 없습니다
#!/bin/bash
set -euo pipefail
work="$PWD"
curl -fsSL https://nodejs.org/dist/latest-v22.x/SHASUMS256.txt -o node-checksums.txt
node_archive=$(awk '/ node-v[0-9.]+-darwin-arm64.tar.gz$/ {print $2}' node-checksums.txt)
curl -fsSL "https://nodejs.org/dist/latest-v22.x/$node_archive" -o "$node_archive"
mkdir -p node-runtime && tar -xzf "$node_archive" -C node-runtime --strip-components=1
export PATH="$work/node-runtime/bin:$PATH"
npm ci
npx eas-cli build --platform ios --local --non-interactive \
--profile "${EAS_PROFILE:-preview}" --output ci-output/app.tar.gzeas.json에 시뮬레이터용 프로파일을 둡니다
{
"build": {
"preview": { "ios": { "simulator": true } }
}
}xenocast build --script ./ci.sh --timeout 60 --artifacts 'ci-output/*'참고 EAS 로컬 빌드 명령은 저장소의 워크플로 검사 픽스처에 있는 형태이고, XenoCI VM에서 끝까지 돌린 기록은 아직 없습니다, 처음 돌릴 때는
--timeout을 넉넉히 두고 로그를 확인하세요
주의
EXPO_TOKEN이 필요한 작업(EAS 제출, 프로젝트 연결)은 잡 제출 API의env필드로 토큰을 넘기세요, VM에 표준 입력으로 전달되어 명령줄과 로그에 남지 않습니다, CLI와 MCP에는 env 옵션이 없습니다- Ruby와 CocoaPods는 VM에 있지만 Node는 없습니다, 위 스크립트처럼 Node를 받는 단계를 빼지 마세요
- 서명된 기기용 빌드는 인증서와 프로파일을 API 제출의
env로 넘겨eas build --local의 자격 증명 설정에 연결해야 합니다