1. ホーム
  2. swift

[解決済み] iPhone Simulator.appと一緒にXcodeも外付けハードディスクにインストールできますか?

2022-02-10 23:06:11

質問

クロスプラットフォームのFlutterアプリケーションを展開するためにXcodeをインストールしたいのですが、Xcodeを入れる十分なスペースがありません。

解決方法を教えてください。


最初にお読みください

現在、この回答は のみ が動作するシステムで有効です。

XCode <= v.11.3 macOS <= v.10.15.2が動作しています。

なぜ? (ショートバージョン)です。

XCode 11.3.xで、Appleはいくつかの(今まで)休止していた /usr/lib/libxcselect.dylib を実行したときに、開発者ツールが SIP で保護された読み取り専用/不変のシステムパーティションに置かれているかどうかをチェックできるようになりました。 xcode-select -s ディレクトリ切り替え を試みます。

11.x "Big Sur"のmacOSバージョンでは、以下の理由により、さらに厳しくロックダウンされています。 このように . システム関連のファイルを移動したり、外付けドライブから起動したりしても、新しい暗号化シール(quot;encryption seal")があるため、機能しません。 新SSV (Signed System Volume) は、ハッシュが変更された場合 (ファイルの入出力など)、起動や特定のプログラムの実行を拒否します。

これらのチェックを回避する方法はまだ見つかっていません。 この方法を使ってシステムが壊れても私は責任を負いません。もし新しいバージョンのXCode / macOSをいじる場合は、最初に完全なバックアップを取ってください グッドラック


Xcode、シミュレーター、その他のツールの外部ストレージへのインストール

コメントにもあるように、すでにXcodeがインストールされている場合、その作業は非常に簡単です。 まず、XcodeをInternal HDからExternalドライブにコピーし、オリジナルの名前を変更し、ステップ4と5のコマンドを実行すれば、トリックが完了します。その場合、元のディレクトリ(現在はリネームされています)/アプリバンドルは削除してください。

私の経験では、Xcodeをすでに持っていない場合、このプロセスはもう少し複雑です。

もっと簡単な方法があるかもしれませんが、何をやっても違うエラーが出るので、MacBook Pro 16"のランニングでこの方法でやっています。 macOS カタリナ (10.15.2) そして Xcode 11.3 :

私が使っているSamsung T5ドライブはとても小さくて軽いので、マジックテープでMacBookに外付けドライブを常時取り付けています。 に取り付けています。
/Volumes/SSD

Xcodeをコピーした外付けドライブに。
/Volumes/SSD/Applications

Xcodeのインストールは、こちらの手順で行ってください。

  1. 最新の11.3 Xcodeリリース(ベータ版ではありません)を以下からダウンロードしてください。 Appleのデベロッパーサイト (これは7.3GBのダウンロードで、無料のデベロッパーアカウントに登録する必要があります。)

  2. Xcodeのコマンドラインツールをインストールします(内蔵ドライブへ)。ターミナルで次のコマンドを実行することで起動します。 sudo xcode-select --install
    これにより、コマンドラインツールのインストールが開始され /Library/Developer/CommandLineTools のパスを設定し、インストール後のデフォルトの開発者ツールのパスとして設定します。

  3. さて、Xcodeのダウンロードは、.xipファイルとして提供されます。 macOSに付属のアーカイブユーティリティ
    SSDにディレクトリを作成済みです。
    /Volumes/SSD/Applications
    で、Xcode_11_3.xipファイルをここに移動してから、Finderでダブルクリックして解凍してください。
    注意 .xipファイルと同じフォルダーに解凍され、Xcode.appに入ります。 が、7.3GBの.xipファイルもそこに残します。 解凍後、.xipファイルをバックアップのためにどこかに移動するか、削除してください。

  4. ここで、developer toolsのデフォルトのディレクトリをコマンドで変更します。
    sudo xcode-select -s /Volumes/SSD/Applications/Xcode.app/Contents/Developer
    で、もう一回 zsh -l をクリックするか、Terminal.appを再起動してください。

  5. Xcode.appをデフォルトの開発者ツールディレクトリとして設定した後、次のコマンドを実行すると、Xcodeが勝手に解決してくれます。
    /usr/bin/xcrun --find xcodebuild
    これは少し時間がかかってから、戻ってきました。
    /Volumes/SSD/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild

シミュレーター/エミュレーターの移動

シミュレータ、キャッシュ、その他もろもろもかなりの容量を占めますが、別の場所に住んでいます。
Xcodeの場合、シミュレーターは通常、この中にあります。
~/Library/Developer/CoreSimulator

ローカル・ドライブの空き容量を最大化したい場合は、このディレクトリ構造全体を外付けドライブに移動することになります。 Finder.appで通常の移動操作を行うことができます。まず、⌘+C(cmd+c)を行い、次のようにコピーします。 ~/Library/Developer/CoreSimulator をクリックし、目的の場所で を使用することができます。 ⌥ + ⌘ + V (opt+cmd+v) でコピーした内容を直接移動することができます(管理者パスワードが必要な場合があります)。

私が使っているのは /Volumes/SSD/Library/Developer/

多くの人が、Finderでファイルを正しくカット&ペーストする方法を知らないので、先にコピーしてから削除してしまうのですが... :)

ここで、シンボリックリンクを作成します。

ln -s /Volumes/SSD/Library/Developer/CoreSimulator /Users/<your_user>/Library/Developer

これで、通常通りシミュレータを使用し、更新することができるはずです。 初回実行時にエラーが発生することがありますが、それ以降は問題なく実行できるはずです。時には再起動もいいかもしれませんね...。

Android エミュレータは、デフォルトで以下の場所に配置されています。 ~/.android/
Xcodeのシミュレータと同じ手順で、全体の ~/.android ディレクトリを外付けドライブのどこかに移動し、説明に従ってシンボリックリンクすると、次のようなものができあがります。

.android -> /Volumes/SSD/Library/android

を実行すると $ ls -la ~ をTerminalで表示します。

Homebrewをお使いの方へのご注意

を使用している場合 ホームブリュー を移動させると、Homebrew は CommandLineTools をインストールしたことを登録しないようです。 /Library/Developer/CommandLineTools ディレクトリにあるボトルをソースからコンパイルしようとします。
でインストールされる別個のコマンドラインツールパッケージに含まれるいくつかのツールが必要なようです。 sudo xcode-select --install は、通常の Xcode インストールには含まれていません (Python の新しいバージョンにアップグレードしたときにこれに気づきました。何をやってもソースからコンパイルされたままでした。) 。
ということで、Homebrewを使う場合は、おそらく コマンドラインツールをデフォルトの場所にインストールしたままにしておく。 で説明されているようにインストールするだけです。 sudo xcode-select --install コマンドを実行し、そのままにしておいてください。

重要なこと を忘れないでください。 xcodebuildのライセンスに同意する 以前 に依存するツールを使用する場合は、次のようなコマンドを使用します (独自のパスを指定します)。

sudo /Volumes/SSD/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -license accept

または、開発者ツールがすでに検出され、外付けドライブに見つかり、XCodeによってパスが設定されている場合です。

sudo xcodebuild -license accept を実行する必要があります。

もっと簡単な解決策があるかもしれませんが この方法でやってから、Homebrewはエラーなく、Xcode + toolsはMacOS、iOS、Flutterのフレームワークで使えるようになった。

また、Xcode.appのエイリアスを /Applications 他のアプリと一緒に置いておくと便利です。(Cmd+OptでXcode.appをFinderの/Applicationsにドラッグ). この方法で、内蔵ドライブの容量を大幅に節約できました。


コメントでの質問に答えて。

この方法を使用した後、Xcode / Simulatorsをアップグレードすることはできますか?

外付けドライブのXcode.appから、昔ながらのquot;alias"を作成しさえすれば /Applications/Xcode.app を押しながらアプリをドラッグすることで ⌥ + ⌘ アップデートに支障はありません。 しかし からのダウンロードでアップグレードしています。 アップルデベロッパーサイト というのも、AppStoreがエイリアスを受け付けず、Xcodeがインストールされていないと判断してしまうからです。


Xcodeバージョンに関する更新情報 > 11.3

回答のトップに書いたように、11.3より上のXcodeバージョンを使用している場合、この回答を保証することはできません。

新しいマシンにフレッシュインストールし、すべてのステップを実行しました。

これを解決しようとしている間に、2つのショーストップを経験し、これを行うための限られた時間しかなかった。 問題は、予想以上に複雑でした。

TODOです。
本日9/8(火)ディスク到着
✅ macOS、Xcode、Android SDK、Flutter SDKの開発ファイルをインストールする。
Flutter SDK、Android SDK、Android エミュレーターを外付け SSD に移動する。
iOS シミュレーターのファイルを外付け SSD に移動する。
[????] FAILEDです。XcodeとPlatformのファイルを外付けSSDに移動する
✅ 変更を反映させるために Zsh の環境変数/スクリプトを適応させる


SIPを有効にしている人(おそらくほとんどのユーザー)は、Xcodeのアプリバンドル内からツールにアクセスする際、内部ドライブの外に移動すると問題が発生するようです。

と思うかもしれませんが、私のツールは /usr/bin などがありますが、問題はこれらのファイルは単に シムバイナリ へのパスを解決するためにシステムライブラリを使用します。 デベロッパー ディレクトリに、実際の実行ファイル、ライブラリ、サポートファイルがすべてインストールされます。

このため、どのファイルが実際に使用されているのかさえわからなくなり、さらに問題が複雑になります。試しにやってみましょう。

$ otool -L /usr/bin/xcrun
# or
$ otool -L /usr/bin/xcode-select


そして、何が流れ出すか見てみましょう... ほとんどのツールに同じことが言えます。

分解した場合 /usr/lib/libxcselect.dylib (それは許されるのでしょうか?) バージョン11.3以降のXcodeを実行すると、どうやらいくつかの追加チェックが実行されるようです。

私は戻って確認し、構成はいくつかのバージョンでこれらのテストが利用可能であった。 しかし、以前のコンシューマービルドでは有効化されていません。

そのため ディレクトリ切り替え は、私の最初の回答で説明したようにしようとすると libxcselect ツールは、XcodeとそのツールがSIPによって守られた不変のシステム構成を持つ内部(安全)ストレージから実行されることを確実にするために、少なくとも1つの(in)サニティチェックを実行するようになります。 システムの完全性保護 , だから、移動したり削除したりすることはできない。

私の推測では、SIPを無効化しないと無理だと思うのですが、それは 許容できない解決策 セキュリティと安定性の問題(さらに性能も悪い)がたくさん出てくるからです。

中間を探す

問題:開発者用ファイルを外付けドライブに移動して、内蔵ドライブの空き容量を確保する方法。
Xcodeを移動する部分に関しては、思いつく限りのことを試してみましたが、どうやっても新たな障害やショーストッパーに出会ってしまいます。

SOです。 妥協点を見つけながら、タオルを投げ入れることになったのです。 約貯めたままでも生きていける 50GB は、私のMacBook Proの内蔵256GB NVMeドライブの空き容量になりました。

移動に支障はありませんでした。 ~/Library/Android/* (Android SDKディレクトリ全体) ~/.android/* (キャッシュと.avdエミュレータイメージファイル)。

中身をコピーしてオリジナルを削除した後、シンボリックリンクだけを使用。 これはAndroid SDKとツールを使って開発する人だけが楽しめるもので、悲しいことに私は、「外国の、敵対する場所にある実行ファイル」に関するAppleの制限的な新しいポリシーによって引き起こされるこの狂気を解決することができませんでした。
この2つのディレクトリだけでもかなりの容量を節約できたので、当面はこんなものでしょう。

Xcodeバンドルの一部をappバンドルの外に出してみましたが、程度の差こそあれ、このスクリーンショットの通りです。

Xcode.appの大部分は"Platforms"ディレクトリ内にあり、これらのファイルをいじり始めると、ビルドツールは私を爆破しますが、そうでない場合もあるので、私は本当に知りません。

シミュレーターのファイルそのものを移動することが可能で、プラットフォーム(iOS / iPadOSなど)のバージョン数にもよりますが、数ギガバイトから数GBの容量を節約することが可能です。

の中に入っています。 ~/Library/Developer/CoreSimulator 元の回答で説明したように、シンボリックリンクを使って、このCoreSimulatorディレクトリ全体をあまり問題なく移動することが出来ました。

今後も試行錯誤を続けますが、今はこの辺で。