複数の開発プロジェクトに対応していると、それぞれのプロジェクトで使用するXcodeのバージョンが異なっていることがあり、複数バージョンのXcodeを同時にインストールして、プロジェクトに応じて切り替えたくなります。
ここでは、複数バージョンのXcodeをインストールする方法とデフォルト起動バージョンを変更する方法を説明します。また、デフォルト起動バージョンを変更する時にやるべきではないことを説明し、もしそれをやってしまった時にどうやったら復旧できるかも説明します。
複数バージョンのXcodeをインストールする方法
XcodeはAppStoreからインストールすることもできますが、AppStoreからのインストールはお勧めしません。AppStoreからXcodeをインストールすると、Xcodeは自動アップデートの対象になるため、開発中のプロジェクトで使用しているXcodeのバージョンが突然上がり、バージョンアップの影響によるエラーが突然出始めることがあります。
Xcodeのインストールは、Apple Developerのダウンロードサイトからバージョン指定でxipファイルをダウンロードしてインストールすることをお勧めします。
xipファイルをダウンロードし、それをダブルクリックしたら「Xcode」というアプリがダウンロードフォルダに展開されます。通常はそれをアプリケーションフォルダに移動してXcodeを起動するだけでインストールできます。ここで複数バージョンのXcodeをインストールする場合は、アプリケーションフォルダに移動する前に、アプリの名前を変更(例えば「Xcode」→「Xcode265」のようにバージョン番号がわかる名前に変更)して移動します。
これだけで、複数バージョンのXcodeをインストールできます。
指定バージョンのXcodeを起動する方法
複数バージョンのXcodeをインストールしている場合、.xcodeprojファイルをダブルクリックしてプロジェクトを開くと、通常はシステムがデフォルトとして認識しているXcodeが起動されます(最後にインストールしたXcodeがデフォルトと認識されることが多いです)。指定バージョンのXcodeを起動したい場合は、次のように右クリックして「このアプリケーションで開く」を使って指定バージョンのXcodeを起動できます。
デフォルト起動バージョンを変更する方法
「このアプリケーションで開く」のデフォルト設定を変更して、指定バージョンのXcodeをダブルクリックで起動することもできます。その場合、Xcodeの設定メニュー( Xcode - Settings...)を開くと、Locations - Command Line Tools 欄に、インストール済みのXcodeの一覧が表示されますので、ここでデフォルト起動したいXcodeを指定します。すると、ここで指定したXcodeが「このアプリケーションで開く」のデフォルトに設定されます。(Command Line Toolsの設定は、本来xcodebuildやclangなどのターミナルでコマンドを実行した時に使用されるXcodeバージョンの設定ですが、この時、Finderのデフォルト起動Xcodeも変更されます。)
なお、複数バージョンのXcodeを同時起動すると、SimulatorやDerivedDataなどの共有リソースの影響で予期しない挙動になることがあるため、使用するXcodeのバージョンを変更する時は、必ず別バージョンのXcodeを cmd + q で終了させてから起動することをお勧めします。(複数バージョンのXcodeが同時起動されていることは、Dockに複数個のXcodeアイコンが表示されていることでわかります。)
デフォルト起動バージョンを変更する時にやるべきではないこと
Xcodeのプロジェクトファイル(.xcodeprojファイル)を右クリックして「情報を見る」を選択すると、.xcodeprojの情報が表示され、この中に「このアプリケーションで開く」という項目があります。ここでデフォルト起動したいXcodeを選択して「すべてを変更」をクリックすると、.xcodeprojをダブルクリックした時に指定バージョンのXcodeが起動できるようになります。
しかし、Xcodeのバージョン切り替えのためにこの設定を実施することはお勧めしません。
なぜなら、Xcodeを使用するよう割り当てられている拡張子は、.xcodeprojだけでなく他にも色々あるためです。CocoaPodsを使用しているなら、Xcodeを起動する際に.xcworkspaceを開きますが、上記の手順で変更されるのは設定した拡張子(.xcodeproj)だけです。CocoaPodsを使用しているなら、.xcworkspaceも変更する必要があります。それだけでなく、swiftファイル、plistファイル、jsonファイル、storyboardファイル等々、Xcodeを使用するよう割り当てられている拡張子はたくさんあり、これらのファイルをFinderのダブルクリックで開いた時は、.xcodeprojに割り当てたXcodeではなく、それぞれの拡張子にデフォルト設定されているXcodeが起動されます。このため、起動するXcodeのバージョンが拡張子ごとに異なっていると、意図せず複数バージョンのXcodeが同時起動される可能性があり、動作がおかしくなることがあります。
しかも、この拡張子毎のデフォルト起動アプリケーション設定は、前述の Locations - Command Line Tools 欄のXcodeバージョン設定よりも優先されるため、一度拡張子毎のデフォルト起動アプリケーションを設定すると、Locations - Command Line Tools でXcodeのバージョンを変更しても拡張子毎のデフォルトが設定されているXcodeのバージョンは変更されなくなってしまいます。
そこで、拡張子毎のデフォルト起動アプリケーション設定を削除して、Locations - Command Line Tools でXcodeのバージョンを一括変更できるように戻したくなるわけですが、一旦拡張子毎のデフォルト起動アプリケーションを設定すると、それを簡単に削除することができません(少なくともFinderの「このアプリケーションで開く」項目にはそれを削除する設定はありません。)。
そこで、この拡張子毎のデフォルト起動アプリケーションを設定してしまった時の削除方法を次に説明します。
拡張子毎のデフォルト起動アプリケーション設定を削除する方法
まず、Finderで次のフォルダを開きます。(Finderのメニューで、「移動」-「フォルダへ移動」を選択し、そこに下記のフォルダ名を入れてEnterすると開くことができます。)
~/Library/Preferences/com.apple.LaunchServices
すると、次のように「com.apple.launchservices.secure.plist」というファイルが見つかるはずですので、このファイルをダブルクリックして開きます。(Xcodeをインストールしていれば、このplistファイルはダブルクリックで開くはずです。)
すると、次のようにRoot/LSHandlersの下に「Item 数字」というキーがたくさん表示されるはずです。
その「Item 数字」を1個ずつ展開して、「LSHandlerRoleAll」が「com.apple.dt.xcode」になっていて、かつ「LSHandlerContentType」が存在しているItemを探します。「LSHandlerContentType」の値は、割り当てた拡張子によって様々です。例えば、.xcodeprojを割り当てた場合は「com.apple.xcode.project」になりますし、.swiftを割り当てた場合は「public.swift-source」になります。「LSHandlerContentType」が存在していても、「LSHandlerRoleAll」が「com.apple.dt.xcode」でないものはXcodeの設定ではありませんので対象外です。
そして、見つけたItemを「-」ボタンをクリックして全て削除した後、Macを再起動します。(Macを再起動しないと反映されません。)
これで拡張子毎のデフォルト起動アプリケーションの設定は削除されましたので、以後はLocations - Command Line Tools欄のXcodeバージョンを変更するだけで、Xcodeに割り当てられている全ての拡張子の使用Xcodeバージョンを一括で切り替えられるようになります。
この方法を使えば、他のアプリの拡張子についても、誤って設定したデフォルト起動アプリケーションを削除して、元に戻すことができます。
まとめ
- XcodeはApple Developerサイトからインストールする
- バージョンごとにアプリ名を変更して共存させる
- Finderの「このアプリケーションで開く」で拡張子ごとの関連付けを変更するのは避ける
- 誤って設定した場合はLaunchServicesの設定を削除して元に戻せる
複数のプロジェクトを並行して保守していると、古いXcodeと新しいXcodeを切り替えて使用する機会は意外と多くあります。本記事がそのような環境構築の参考になれば幸いです。
この記事の画像はZkitchで作成しました。Zkitchは、画面のスクリーンショットに矢印やテキスト等の説明を入れることができるアプリです。
説明入りの画像をよく作成される方は、ぜひお試しください。






