Xcode 버전 선택
잡마다 Xcode 버전을 고르는 네 가지 방법과 우선순위, VM 안에서 선택된 Xcode가 어떻게 적용되는지 설명합니다
모든 잡은 같은 macOS 러너에서 돌고 Xcode만 고릅니다
지금 고를 수 있는 버전은 27.0(기본)과 26.6입니다
어디서 고르나
| 진입점 | 방법 |
|---|---|
| API | "xcode": "26.6" |
| CLI | xenocast build --xcode 26.6 |
MCP build | xcode: "26.6" |
| GitHub Actions | with: xcode: "26.6" |
| 콘솔 플레이그라운드 | 폼의 Xcode 선택 |
| 배치 | matrix.xcode: ["27.0", "26.6"] (조합마다 잡 하나) |
| 레시피 | 레시피의 default_xcode |
| 워크스페이스 기본값 | 콘솔 실행 → 환경 메뉴의 기본 Xcode |
우선순위는 다음과 같습니다
- 잡 요청의
xcode - 잡이 가리킨 레시피의
default_xcode - 워크스페이스 기본값 (
PUT /v1/organizations/{org_id}/workspaces/{workspace_id}/environment) - 베이스 이미지 기본값
27.0
목록에 없는 버전을 보내면 잡은 만들어지지 않고 400 invalid_request와 details.fields: ["xcode"]가 돌아옵니다
VM을 띄운 뒤에 실패하는 일은 없습니다
고를 수 있는 목록 확인
curl -s https://xenoci.com/api/runner/v1/environments \
-H "Authorization: Bearer $XENOCI_API_KEY"{
"data": [
{
"id": "macos-m4",
"name": "macOS M4 (Standard)",
"runner": { "chip": "Apple M4", "vcpu": 4, "ram_gb": 7 },
"base_image": { "name": "macos-xcode", "version": null, "macos_version": null },
"xcodes": [ { "version": "27.0", "default": true }, { "version": "26.6", "default": false } ],
"simulator_runtimes": [ "iOS 27.0", "iOS 26.5" ],
"status": "available"
}
],
"workspace_default": { "workspace_id": "wrk_Hq8sN2", "environment_id": "macos-m4", "xcode": null, "updated_at": null }
}xcodes의 첫 항목이 이미지 기본값이고 workspace_default.xcode가 워크스페이스 기본값입니다
이 응답의 목록이 지금 API가 받는 전체 목록입니다
콘솔 실행 → 환경 메뉴가 같은 내용을 보여 줍니다
워크스페이스 기본값 바꾸기
콘솔 실행 → 환경 메뉴의 환경 기본값에서 고릅니다
조직 소유자와 관리자만 바꿀 수 있고 API 키로는 할 수 없습니다
값을 null로 두면 이미지 기본값을 따릅니다
VM 안에서 적용되는 방식
러너는 스크립트를 시작하기 전에 DEVELOPER_DIR을 고른 Xcode로 내보냅니다
DEVELOPER_DIR=/Applications/Xcode_26.6.app/Contents/Developerxcodebuild, xcrun, swift가 모두 이 값을 따르므로 스크립트에서 xcode-select를 부를 필요가 없습니다
확인하려면 스크립트 첫 줄에 다음을 넣으세요
xcodebuild -version
xcrun --sdk iphonesimulator --show-sdk-version각 Xcode에는 iOS 시뮬레이터 런타임이 하나씩 들어 있습니다 27.0에는 iOS 27.0, 26.6에는 iOS 26.5입니다
다른 런타임을 지정한 -destination은 실패하니 iOS 시뮬레이터에서 기기 이름 정하는 법을 보세요
두 버전으로 한 번에 확인하기
이전 Xcode에서 회귀가 없는지 보려면 배치의 matrix.xcode가 편합니다
조합마다 잡이 하나씩 생기고 각 잡에는 XENOCI_XCODE 환경 변수로 자기 버전이 들어갑니다
curl -s https://xenoci.com/api/runner/v1/batches \
-H "Authorization: Bearer $XENOCI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Xcode 회귀 확인",
"recipe_id": "rcp_builtin_ios_build",
"matrix": { "xcode": ["27.0", "26.6"] },
"env": { "XENOCI_SCHEME": "App" },
"source": { "git_url": "https://github.com/acme/app.git", "ref": "main" }
}'갱신 주기
새 Xcode 정식판이 나오면 2주 안에 베이스 이미지에 넣고 최신 두 버전을 유지합니다
빠지는 버전은 변경 기록으로 미리 알립니다
베이스 이미지가 바뀌어도 잡 요청 형식은 같습니다