Swift 네이티브 iOS 빌드
xcodebuild로 iOS 앱을 빌드하고 테스트하는 가장 기본적인 사용 사례입니다, 기본 제공 레시피와 같은 명령을 씁니다
Xcode 프로젝트를 시뮬레이터용으로 빌드하고 단위 테스트를 돌립니다, 서명이 필요 없어 API 키와 소스만 있으면 바로 됩니다
이 사례의 명령은 콘솔 빌드 → 레시피의 기본 제공 레시피(iOS 빌드, 단위 테스트, UI 테스트, 아카이브)와 같고, 공개 저장소(IceCubesApp)로 새 VM에서 빌드와 12개 테스트가 통과한 기록이 저장소에 있습니다
준비
- 콘솔에서 발급한 API 키,
xenocast config set api-key로 저장하거나XENOCI_API_KEY로 전달 - 프로젝트 폴더에
.xcodeproj또는.xcworkspace와 스킴 하나
빌드 스크립트
프로젝트 폴더에 ci.sh를 만듭니다
#!/bin/bash
set -euo pipefail
SCHEME="App" # 프로젝트의 스킴 이름
SIM="iPhone 16" # 시뮬레이터 이름
if ls *.xcworkspace >/dev/null 2>&1; then
FLAG=(-workspace "$(ls -d *.xcworkspace | head -1)")
else
FLAG=(-project "$(ls -d *.xcodeproj | head -1)")
fi
xcodebuild -scheme "$SCHEME" "${FLAG[@]}" -configuration Debug \
-destination "platform=iOS Simulator,name=$SIM" \
CODE_SIGNING_ALLOWED=NO build
xcodebuild -scheme "$SCHEME" "${FLAG[@]}" \
-destination "platform=iOS Simulator,name=$SIM" \
CODE_SIGNING_ALLOWED=NO -resultBundlePath TestResults.xcresult test실행
xenocast build --script ./ci.sh --xcode 27.0 --timeout 30 \
--artifacts 'TestResults.xcresult'- 현재 폴더가 tar.gz로 올라가고 새 VM에서 스크립트가 돕니다, 끝날 때까지 로그가 흐르고 종료 코드는 스크립트의 종료 코드입니다
- 끝나면
실행 125초, 과금 3분, 금액 $0.1188, 남은 잔액 $19.8812같은 한 줄이 남습니다 - 결과물은
xenocast artifacts <job_id> --out ./dist로 받습니다, 폴더(.xcresult)는 zip으로 묶입니다
CLI와 MCP와 GitHub Action은 잡에 환경 변수를 따로 넘기지 않으니 스킴 이름 같은 값은 스크립트 안에 적습니다, 잡 제출 API로 직접 제출할 때는 env 필드로 넘길 수 있습니다
레시피로 실행하기
같은 작업을 기본 제공 레시피로 하면 스크립트 없이 제출할 수 있습니다, 레시피는 스킴을 env.XENOCI_SCHEME로 받으므로 API나 콘솔(빌드 → 레시피)에서 씁니다
curl -X POST "https://xenoci.com/api/runner/v1/jobs" \
-H "Authorization: Bearer $XENOCI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"recipe_id":"rcp_builtin_unit_test","source":{"upload_id":"upl_4Hq8ZkT2mP"},"env":{"XENOCI_SCHEME":"App"}}'| 레시피 | 하는 일 |
|---|---|
rcp_builtin_ios_build | Debug 시뮬레이터 빌드 |
rcp_builtin_unit_test | 테스트, TestResults.xcresult |
rcp_builtin_ui_test | 시뮬레이터를 미리 부팅하고 테스트, UITestResults.xcresult |
rcp_builtin_archive | Release 아카이브(서명 없음), App.xcarchive.zip |
rcp_builtin_testflight_upload | ASC_KEY_ID, ASC_ISSUER_ID, ASC_KEY_P8로 서명된 .ipa 업로드, env가 없으면 VM을 띄우지 않고 400 |
GitHub Actions에서
jobs:
ios:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: xeno-ci/build@v2
with:
api-key: ${{ secrets.XENOCI_API_KEY }}
script: ./ci.sh
xcode: "27.0"
artifacts: TestResults.xcresult서명과 배포
서명된 IPA를 만들려면 인증서와 프로비저닝 프로파일을 API 제출의 env 필드로 넘기고 스크립트에서 임시 키체인을 만들어 넣습니다(security create-keychain, unlock-keychain, set-key-partition-list), 서버에 서명 자료를 보관하는 기능은 아직 없습니다, TestFlight 업로드 레시피는 서명된 .ipa가 작업 폴더에 있어야 합니다