runs-on: xcode-27 で「Unable to find a device matching the provided destination specifier」:iPhone Duo しかない iOS 27.1 のシミュレーターと、イメージにある Xcode の版
GitHub の Xcode 27 のランナーのイメージが一般公開されました(GitHub の changelog・2026年10月15日)。macOS 27 の上で動き、イメージはこれから macOS の版でなく Xcode の大きい版ごとに分かれ、ラベルは xcode-27 と xcode-27-xlarge です。Apple Silicon(arm64)だけで動きます。移したあとにいちばんよく落ちるのは、存在しないテストの行き先です:既定の Xcode は 27.1 で、その iOS 27.1 のシミュレーターのランタイムにはデバイスが1つ、iPhone Duo しかありません。
見え方
xcodebuild test がテストをビルドする前に止まります(runner-images #15000):
xcodebuild test -destination 'platform=iOS Simulator,name=iPhone 18 Pro,OS=27.1' ... xcodebuild: error: Unable to find a device matching the provided destination specifier
iOS 27.1 のランタイムが受け持つデバイスを並べると、理由が分かります:
xcrun simctl list -j runtimes | jq '.runtimes[] | select(.version=="27.1") | [.supportedDeviceTypes[].name]' ["iPhone Duo"]
同じランタイムなら CI の外の Mac でも同じなので、イメージの不具合ではなく Apple の iOS 27.1 の出し方です。issue のコメントは、iOS 27.1 は iPhone Duo のためだけで、すべてのデバイス向けには 27.2 が続く、と読んでいます。
イメージにあるもの
イメージの readme から(イメージの版 20261026.0314.1):
- Xcode 27.2:
/Applications/Xcode_27.2_Release_Candidate.app(Xcode_27.2.appとしてもリンク)。 - Xcode 27.1(既定):
/Applications/Xcode_27.1.app。/Applications/Xcode.appはこれを指します。 - Xcode 27.0:
/Applications/Xcode_27.app。 - シミュレーター:iOS 27.0 に iPhone 17・iPhone 17e・iPhone 18 Pro・iPhone 18 Pro Max・iPhone Air と iPad、iOS 27.1 に iPhone Duo だけ、tvOS・watchOS・visionOS は 27.0。iOS 27.2 の SDK はありますが、そのシミュレーターのランタイムは一覧にありません。
一覧はイメージの版ごとに変わります。ジョブが受け取ったものを出すには:
xcodebuild -version xcrun simctl list devices available
直し方
- ランタイムにあるデバイスでテストする。iPhone 18 Pro などは、行き先で iOS 27.0 を指定します:
-destination 'platform=iOS Simulator,name=iPhone 18 Pro,OS=27.0'。27.1 は iPhone Duo のために残します。 - 別の Xcode を使うなら、ビルドの前に選びます:
- run: sudo xcode-select -s /Applications/Xcode_27.2.app
Xcode 27.2 では、先にxcrun simctl list runtimesを見ます。iOS 27.2 のランタイムが無ければ、ジョブで落としてくる(xcodebuild -downloadPlatform iOS・毎回数分とネットワークを使う)か、古いランタイムを使います。 - 行き先を「latest」に任せない:OS の版を書けば、イメージに新しいランタイムが入ってもデバイスの一覧が足元で変わりません。
actionlint と新しいラベル
actionlint 1.7.12 はまだ xcode-27 を知らず、知らないランナーのラベルとして出します(sauna-studio/sauna-app #8)。知っている版が出るまでは .github/actionlint.yaml に並べます:
self-hosted-runner:
labels:
- xcode-27
- xcode-27-xlarge
見分け方
xcode-27で「Unable to find a device matching the provided destination specifier」:そのランタイムにデバイスが無い。このページです。macos-14のジョブが動かない:そのイメージは終わりました(macOS 14 の終わり)。- Intel のラベルのジョブ:Xcode 27 のイメージは Intel のランナーにはありません。
失敗したジョブを IntelliJ IDEA から見るなら
Pipeline Inbox for GitHub Actions Workflows は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。すべてのリポジトリの実行を、ジョブ・ステップと一緒に IDE のツールウィンドウに並べるので、シミュレーターが見つからなかったステップがすぐ分かり、いまのブランチの実行はステータスバーに出ます。読むのは無料、失敗したジョブの再実行・キャンセル・ワークフローの実行・デプロイのレビューは Pro(月 US$1.50・30日の無料試用つき)です。
GitHub と GitHub Actions は GitHub, Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標、Apple・Xcode・iPhone・macOS は Apple Inc. の商標です。このページはそのいずれとも提携しておらず、承認も受けていません。
ほかに:macOS 14 の終わり · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English