GitHub ActionsのmacOSランナーには、複数のバージョンのXcodeがインストールされている。ワークフローで使うXcodeのバージョンを固定するには、sudo xcode-select -sでXcodeを切り替える。
- name: Select Xcode
run: sudo xcode-select -s "/Applications/Xcode_26.2.app/Contents/Developer"
- name: Show Xcode version
run: xcodebuild -version
sudoを使えない場合や、特定のステップだけで切り替えたい場合は、環境変数DEVELOPER_DIRを使う。
実行例はmacOS 27.0.1、Xcode 27.0のもの。
ランナーにインストールされているXcodeを確認する
ランナーのイメージにインストールされているXcodeは、actions/runner-imagesリポジトリの、イメージごとのREADMEに一覧がある。macOS 26のarm64のイメージは、images/macos/macos-26-arm64-Readme.mdである。
参考: actions/runner-images(macOSのイメージのREADME)
「Xcode」の節の表は、次のようになっている(イメージのバージョン20260907.0351.1)。
| バージョン | ビルド | パス | シンボリックリンク |
|---|---|---|---|
| 26.6(デフォルト) | 17F113 | /Applications/Xcode_26.6.app | /Applications/Xcode_26.6.0.app、/Applications/Xcode.app |
| 26.5 | 17F42 | /Applications/Xcode_26.5.app | /Applications/Xcode_26.5.0.app |
| 26.4.1 | 17E202 | /Applications/Xcode_26.4.1.app | /Applications/Xcode_26.4.app |
| 26.3 | 17C529 | /Applications/Xcode_26.3.app | /Applications/Xcode_26.3.0.app |
| 26.2 | 17C52 | /Applications/Xcode_26.2.app | /Applications/Xcode_26.2.0.app |
| 26.1.1 | 17B100 | /Applications/Xcode_26.1.1.app | /Applications/Xcode_26.1.app |
| 26.0.1 | 17A400 | /Applications/Xcode_26.0.1.app | /Applications/Xcode_26.0.app |
各バージョンのXcodeは、/Applications/Xcode_[バージョン].appにインストールされている。デフォルトのバージョンには、/Applications/Xcode.appのシンボリックリンクも付く。
デフォルトのバージョンは、イメージの更新で変わる。同じREADMEのお知らせには、macOS 26のデフォルトのXcodeを、2026年7月21日に26.6へ変更する告知が載っている。バージョンを指定しないワークフローは、イメージの更新でXcodeが変わる。ビルドの結果が変わる場合もある。
xcode-select -sでXcodeを切り替える
xcode-select -s(--switch)は、使用するXcodeのDeveloperフォルダを切り替える。パスには、XcodeのContents/Developerか、.appのフォルダを指定する。
$ sudo xcode-select -s "/Applications/Xcode_26.2.app/Contents/Developer"
切り替えた後は、xcode-select -pで、選択中のDeveloperフォルダを確認できる。xcodebuild -versionで、Xcodeのバージョンも確認できる。
$ xcode-select -p
/Applications/Xcode_26.2.app/Contents/Developer
$ xcodebuild -version
Xcode 26.2
Build version 17C52
ワークフローには、xcodebuild -versionのステップを残しておく。ログに、使われたXcodeのバージョンが残る。
xcode-select -sは、rootの権限で実行する。sudoを付けないと、エラーになる。
$ xcode-select -s /Applications/Xcode.app/Contents/Developer
xcode-select: error: --switch must be run as root (e.g. `sudo xcode-select --switch <xcode_folder_path>`).
xcode-select -sの設定は、マシン全体に影響する。manページにも、システムのすべてのユーザーに影響すると書かれている。自分のMacで試すと、普段使うXcodeが切り替わる。GitHubホストランナーは、GitHubがホストする新しい仮想マシンなので、設定を変更しても、普段の環境には影響しない。
GitHub ActionsのmacOSランナーは、パスワードなしでsudoを実行できる。
DEVELOPER_DIRで切り替える
環境変数DEVELOPER_DIRを設定すると、sudoを使わずに、Xcodeを切り替えられる。DEVELOPER_DIRの値は、システム全体の設定より優先される。値には、Contents/Developerのフォルダと、.appのフォルダのどちらも指定できる。
$ DEVELOPER_DIR=/Applications/Xcode.app xcodebuild -version
Xcode 27.0
Build version 27A266a
$ DEVELOPER_DIR=/Applications/Xcode.app xcode-select -p
/Applications/Xcode.app/Contents/Developer
GitHub Actionsでは、ステップのenvに指定すると、そのステップだけで使われる。
- name: Build
env:
DEVELOPER_DIR: /Applications/Xcode_26.2.app/Contents/Developer
run: xcodebuild -scheme [スキーム名] build
ジョブ全体で使うときは、ジョブのenvに指定する。
優先順位を確認する
Command Line ToolsをDEVELOPER_DIRに指定すると、システム全体の設定がXcode.appでも、DEVELOPER_DIRの値が優先される。
$ xcode-select -p
/Applications/Xcode.app/Contents/Developer
$ DEVELOPER_DIR=/Library/Developer/CommandLineTools xcode-select -p
/Library/Developer/CommandLineTools
$ DEVELOPER_DIR=/Library/Developer/CommandLineTools xcrun --find clang
/Library/Developer/CommandLineTools/usr/bin/clang
Command Line Toolsにはxcodebuildが含まれない。xcodebuildは、エラーで終了する。
$ DEVELOPER_DIR=/Library/Developer/CommandLineTools xcodebuild -version
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
$ echo $?
1
存在しないXcodeを指定する
イメージにインストールされていないバージョンをDEVELOPER_DIRに指定すると、xcrunがエラーで終了する。
$ DEVELOPER_DIR=/Applications/Xcode_26.2.app/Contents/Developer xcodebuild -version
xcrun: error: missing DEVELOPER_DIR path: /Applications/Xcode_26.2.app/Contents/Developer
$ echo $?
1
固定したバージョンがイメージから外れると、DEVELOPER_DIRを指定したステップは、同じエラーで失敗する。ランナーのイメージのREADMEで、固定するバージョンが一覧にあるかを確認する。
どちらの方法を選ぶか
| 方法 | sudo | 影響の範囲 | 向いている場面 |
|---|---|---|---|
sudo xcode-select -s | 必要 | ジョブの以降のステップすべて | ジョブ全体で同じXcodeを使う |
DEVELOPER_DIR | 不要 | envを指定したステップかジョブ | 特定のステップだけ別のXcodeを使う |
ジョブ全体でXcodeを固定するなら、ジョブの最初のステップでxcode-select -sを実行する。ステップごとに別のバージョンを使うなら、DEVELOPER_DIRをステップのenvに指定する。
スクリプトの中でツールの場所を調べるときは、xcode-select -pの出力を使わず、xcrun --findを使う。manページでも、xcode-select -pは確認用で、スクリプトやツールはxcrunを使うよう勧めている。
$ xcrun --find xcodebuild
/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild
参考: 【xcrun】Xcodeに含まれるツールのパスを調べる (--find)
