Xcodeのバージョンを切り替える
Xcodesというアプリケーションを用いると、とても簡単にバージョン管理が行えます。
といっても、実務ではCLIでコマンド操作することが多く、Xcodeのバージョンの切り替えもコマンドで行われることがあります。そういった趣旨の会話の中でも意思疎通が図れる必要があるので、理解しておくのが吉です。
コマンドでの切り替え
実行にはroot権限が要るため、sudoでroot権限を付与する必要があります。
sudo xcode-select -s
sudo xcode-select --switch
インストールされているXcodeのバージョンを指定することで、起動時のXcodeのバージョンを切り替えられる。
app storeからは最新のXcodeのみダウンロード可能であるため、過去のバージョンに関してはAppleのWebサイトから手動でxipファイルを入手することで可能となります。
その際、homeディレクトリ化のApplicationではなく、optなどに入れておくようにします。通常App Storeからの場合インストール先がApplication下になり、手動で管理する環境ではない分いろいろと問題が生じやすいからではないかと思います。
選択(有効化)されているXcodeのパスを確認する
xcode-select -p
xcode-select --print-path
例
yamada@MacBook-Air ~ % xcode-select -p
/Applications/Xcode-14.0.0.app/Contents/Developer
デフォルトのxcodeに戻す
同じく、切り替えのためroot権限が必要です。
sudo xcode-select -r
sudo xcode-select --reset
参考
シェルでの切り替え
man xcode-select
に記載があり、DEVELOPER_DIR環境変数を変更するスクリプトを書けばよい。
ENVIRONMENT
DEVELOPER_DIR
Overrides the active developer directory. When DEVELOPER_DIR is set,
its value will be used instead of the system-wide active developer
directory. Note that for historical reason, the developer directory is considered
to be the Developer content directory inside the Xcode application
(for example /Applications/Xcode.app/Contents/Developer). You can set
the environment variable to either the actual Developer contents
directory, or the Xcode application directory -- the xcode-select
provided shims will automatically convert the environment variable
into the full Developer content path.
スクリプトでの実行方法については下記のQiita参照でよさそう。
具体的には、Xcordのバージョンを記載してテキストを用意し、ビルド時のスクリプト内で先のバージョンを読み込んでDEVELOPER_DIR変数に値を設定するという流れ。
余談だけれど、Xcodeのバージョンを指定する際に /Contents/Developer
と指定するパス先の書き方が正しいのか若干不安があったんだけど、面白いことに上記に説明されている箇所があった。
Note that for historical reason, the developer directory is considered
to be the Developer content directory inside the Xcode application
(for example /Applications/Xcode.app/Contents/Developer).
というように、開発の主体として利用するdeveloper directory
は謎の歴史的経緯から、Xcodeアプリケーションの中にあるthe Developer content directory
と考えるのだそう。
まとめ
Xcodeのバージョンの切り替え方として
1. Xcodesアプリケーションの利用
2. コマンドでの切り替え
3. シェル(ビルドスクリプト)での切り替え
以上です
Discussion