Expo는 EAS 서버에서 하는 빌드 과정을 내 장비나 자체 인프라에서 그대로 돌리는 eas build --local을 공식 문서(Run EAS Build locally)로 안내하고 있어요, iOS 빌드라면 그 장비는 Mac이어야 하고, Node.js, 패키지 매니저, fastlane, CocoaPods가 있어야 해요
GitHub Actions를 이미 쓰고 계시면 그 Mac 자리에 runs-on: xenoci-standard 잡을 두는 방법이 있어요
이 글이 맞는 분
- 이미 GitHub Actions로 Expo 프로젝트의 CI를 돌리고 계신 분
- EAS 클라우드 빌드 대신 직접 고른 환경에서 iOS 빌드를 하고 싶은 분
예시 워크플로
name: iOS (EAS local)
on:
push:
workflow_dispatch:
jobs:
build:
runs-on: xenoci-standard
timeout-minutes: 90
env:
EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- run: npm ci
- run: npx --yes eas-cli@25.3.0 build --local --platform ios --profile preview --non-interactive --output build/app-ios.tar.gz
- uses: actions/upload-artifact@v4
with:
name: app-ios
path: build/app-ios.tar.gzEXPO_TOKEN은 Expo 계정 토큰이고 저장소 Secrets에 넣어 두시면 돼요, XenoCI 쪽에서 따로 발급할 키는 없어요- 러너에는 Node.js 24, CocoaPods, fastlane이 들어 있고 eas-cli는
npx로 잡마다 받아요 --profile에는eas.json의 빌드 프로필 이름을 쓰고, 결과물은 Actions 실행 화면의 Artifacts에서 받아요
Expo 문서에 적힌 로컬 빌드의 한계
- 플랫폼은 하나씩만 빌드해요(
all안 됨) - eas.json의
node,yarn,fastlane,cocoapods,image같은 버전 지정은 무시돼요 - EAS 빌드 캐시는 쓰지 않아요, 필요하면
actions/cache로 node_modules나 CocoaPods를 직접 캐시하세요, XenoCI에서는 저장소당 25GB 무료이고 7일 동안 안 쓰면 지워져요 - Secret 표시의 EAS 환경 변수는 쓸 수 없어서 GitHub Secrets로 넘겨야 해요
XenoCI 쪽 조건
- VM은 vCPU 5, 메모리 7GB, Xcode 27.0과 26.6 중 잡마다 선택
- 시작한 분마다 50원 부가세 포함, 대기와 VM 준비 시간은 차감하지 않아요
- 조직마다 매달 무료 100분(5,000원), 매월 1일 새로 채워지고 이월되지 않아요, 한 사람(GitHub 계정)당 한 조직까지이고 무료 제공 금액으로는 잡 1개씩 돌아요
- 가입은 GitHub 로그인만, 앱은 GitHub 조직에 설치해요, 충전은 콘솔에서 5,000원부터 선불로 해 충전 잔액으로 써요, 요금은 로그인 뒤 콘솔의 결제 화면에 있어요
알아 두실 점
- 이 워크플로는 XenoCI 러너에서 아직 끝까지 돌린 기록이 없어요, 처음 돌릴 때는 로그를 확인해 주세요
- 이 방식이 EAS 클라우드 빌드의 모든 기능을 대신하지는 않아요, 제출, 업데이트, 자격 증명 관리처럼 EAS가 해 주는 일은 그대로 EAS를 쓰시면 되고, 이 글은 빌드를 어디서 돌릴지만 다뤄요
- Expo 앱 빌드 시간은 아직 재지 않아서 숫자는 적지 않았어요
직접 돌려 보시고 막힌 단계를 알려 주시면 감사드리겠습니다