본문으로 건너뛰기

Xcode 버전 선택

잡마다 Xcode 버전을 고르는 네 가지 방법과 우선순위, VM 안에서 선택된 Xcode가 어떻게 적용되는지 설명합니다

모든 잡은 같은 macOS 러너에서 돌고 Xcode만 고릅니다

지금 고를 수 있는 버전은 27.0(기본)과 26.6입니다

어디서 고르나

진입점방법
API"xcode": "26.6"
CLIxenocast build --xcode 26.6
MCP buildxcode: "26.6"
GitHub Actionswith: xcode: "26.6"
콘솔 플레이그라운드폼의 Xcode 선택
배치matrix.xcode: ["27.0", "26.6"] (조합마다 잡 하나)
레시피레시피의 default_xcode
워크스페이스 기본값콘솔 실행 → 환경 메뉴의 기본 Xcode

우선순위는 다음과 같습니다

  1. 잡 요청의 xcode
  2. 잡이 가리킨 레시피의 default_xcode
  3. 워크스페이스 기본값 (PUT /v1/organizations/{org_id}/workspaces/{workspace_id}/environment)
  4. 베이스 이미지 기본값 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/Developer

xcodebuild, 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주 안에 베이스 이미지에 넣고 최신 두 버전을 유지합니다

빠지는 버전은 변경 기록으로 미리 알립니다

베이스 이미지가 바뀌어도 잡 요청 형식은 같습니다

다음 단계