我可以在外部硬盘上安装 Xcode 和 iPhone Simulator.app 吗?

Can I install Xcode on an external hard drive along with the iPhone Simulator.app?

我想安装 xcode 以部署跨平台 flutter 应用程序,但我找不到足够的 space Xcode 有没有其他解决方案可以将它安装在内部存储上


请先阅读此内容!

目前,此答案对运行s:

的系统有效

XCode <= v.11.3 运行ning macOS <= v.10.15.2

为什么?(简短版):

随着 XCode 11.3.x,Apple 在 /usr/lib/libxcselect.dylib 中激活了一些(直到现在)休眠检查,可以检查开发者工具是否位于只读 /由 SIP 保护的不可变系统分区,当您进行 xcode-select -s 目录切换 尝试时被触发。

11.x“Big Sur”macOS 版本,由于 like this 的原因,将其锁定得更加严格。 移动系统相关文件,甚至从外部驱动器启动都无法正常工作,因为新的“加密密封”,the new SSV(签名系统卷)的一部分拒绝启动或 运行 select如果哈希被更改(文件输入/输出等),则程序。

我还没有找到绕过这些检查的方法。 我对使用此方法后损坏的系统不承担任何责任,如果您选择修补更新版本的 XCode / macOS,请先进行完整备份!祝你好运!


正在安装 Xcode、模拟器和其他工具到外部存储

如评论中所述,如果您已经安装了 Xcode,则该过程非常简单。 首先将 Xcode 从内部 HD 复制到外部驱动器,重命名原始驱动器和 运行 第 4 步和第 5 步中的命令,这应该可以解决问题。如果是这样,请删除原始(现已重命名)目录/应用程序包。

我的经验是,如果你还没有 Xcode,这个过程会比较复杂。

可能有更简单的方法来做到这一点,但在我尝试过的每件事都遇到不同的错误之后,我在 MacBook Pro 16" 运行ning 上以这种方式完成了 macOS Catalina (10.15.2)Xcode 11.3:

我一直将外置驱动器连接到 MacBook,使用一点魔术贴,因为我使用的三星 T5 驱动器又小又轻。 它安装在:
/Volumes/SSD

在外部驱动器上,我已将 Xcode 复制到:
/Volumes/SSD/Applications

按照以下步骤安装 Xcode:

  1. Apple's Developer Site 下载最新的 11.3 Xcode 版本(不是 Beta)(这是一个 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. 现在使用以下命令更改默认的开发人员工具目录:
    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

移动模拟器/模拟器

模拟器、缓存和所有这些也占用了大量 space 但存在于其他地方。
对于 Xcode,模拟器通常位于:
~/Library/Developer/CoreSimulator

如果您希望最大限度地利用本地驱动器上的可用空间 space,则需要将整个目录结构移动到外部驱动器。 您可以通过 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 ~ 时。

Homebrew 用户注意事项

如果您使用 Homebrew 来安装软件包(就像许多人一样),那么如果您移动 /Library/Developer/CommandLineTools 目录,并将尝试从源代码编译一些瓶子。
Homebrew 显然需要在与 sudo xcode-select --install 一起安装的单独命令行工具包中找到的一些工具,这些工具在常规 Xcode 安装中缺失(我在升级到 Python 的新版本时注意到了这一点,它是无论我尝试了什么,仍然是从源代码编译的。)
因此,如果您使用 Homebrew,您最好 将命令行工具安装在默认位置。 只需按照 sudo xcode-select --install 命令的说明进行安装,然后将其留在那里,反正不会占用太多空间 space。

重要,记得接受xcodebuild许可 使用依赖于它,使用这样的命令(使用您自己的路径):

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

或者在已经检测到开发者工具并在外部驱动器上找到的情况下,路径已由 XCode 设置:

sudo xcodebuild -license accept 应该可以解决问题。

正如我所说,可能有更简单的解决方案,但是 以这种方式完成后,我已经能够毫无错误地使用 Homebrew 和 Xcode + MacOS、iOS 和 Flutter 框架的工具。

此外,我在 /Applications 中为 Xcode.app 创建了一个别名,以便将它与其他应用程序放在一起。 (Cmd + Opt 将 Xcode.app 拖到 Finder 中的 /Applications)。 通过这种方式在内部驱动器上为自己节省了大量 space。


回复评论中的问题:

Can I upgrade Xcode / Simulators after using this method?

只要您在按住 ⌥ + ⌘ 的同时拖动应用程序,从外部驱动器的 Xcode.app 到 /Applications/Xcode.app 创建一个好的旧“别名”,我就没有遇到任何问题更新,但是 我通过从 Apple Developer Site 下载升级,而不是通过 macOS AppStore,因为我注意到 AppStore 不接受别名并认为 Xcode 未安装。


有关 Xcode 版本 > 11.3

的更新

正如我在答案顶部提到的,如果您使用的 Xcode 版本高于 11.3,我无法保证这个答案。

我已经在新机器上使用全新安装完成了所有步骤。

我在尝试解决这个问题时遇到了一些阻碍,而且我只有有限的时间来做这件事。 问题比预期的要复杂一些。

待办事项:
✅ 今天(9月8日星期二)到货
✅ 安装 macOS,Xcode,Android SDK 和 Flutter SDK 开发文件
✅ 将 Flutter SDK、Android SDK 和 Android 模拟器移动到外部 SSD
✅ 将 iOS 模拟器文件移动到外部 SSD
[] 失败:将 Xcode 和平台文件移动到外部 SSD
✅ 适配 Zsh 环境变量/脚本以反映变化


似乎那些启用了 SIP 的用户(可能是大多数用户)在从 Xcode 应用程序包中访问工具时会遇到麻烦,如果它被移动到内部驱动器之外。

您可能会想,“嘿,我在 /usr/bin 或其他地方有我的工具,但问题是这些文件仅仅是 shim 二进制文件 ,这使用系统库解析 Developer 目录的路径,其中安装了所有实际的可执行文件、库和支持文件。

这使事情变得更加复杂,因为您现在甚至不再知道实际使用了哪些文件。试试看:

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

然后看看倾泻而出的东西...大多数工具也是如此。

如果您反汇编 /usr/lib/libxcselect.dylib(允许吗?)当 运行ning Xcode 版本 11.3 之后显然会执行一些额外的检查。

我回去检查了配置,这些测试可用于几个版本,但它们在以前的消费者版本中没有被激活。

因此,当 目录切换 尝试按照我原来的回答中的描述进行时,libxcselect 工具现在将执行至少一次(不)健全性检查以确保Xcode 及其工具 运行 来自内部(安全)存储,它具有由 SIP 保护的不可变系统配置。 System Integrity Protection,因此,您不能只是移动或删除它。

我的猜测是您必须禁用 SIP 才能使这项工作正常进行,这不是一个可接受的解决方案,因为它会带来很多安全性和稳定性问题(甚至更差的性能)。

寻找中间立场

问题:如何通过将开发人员文件移动到外部驱动器来释放内部驱动器上的 space。
关于移动 Xcode 部分,我已经尝试了几乎所有我能想到的方法,但无论如何我都遇到了新的障碍和障碍。

SO. 我不得不认输,寻求妥协。 我可以忍受在我的 MacBook Pro 的内部 256GB NVMe 驱动器上节省了大约 50GB 的 space。

我移动没有问题: ~/Library/Android/*(整个Android SDK目录) ~/.android/*(缓存和 .avd 模拟器图像文件)

仅使用符号链接,复制内容并删除原件。 这只对那些使用 Android SDK 和工具进行开发的人感兴趣,所以很遗憾,我无法解决由于 Apple 关于“外国、敌对”位置的可执行文件的限制性新政策而导致的疯狂问题。
仅这两个目录就为我节省了相当一部分 space,所以我想暂时就是这样。

我曾尝试将 Xcode 捆绑包的某些部分移出应用程序捆绑包并取得了不同程度的成功,但正如您在此屏幕截图中所见:

Xcode.app 的大部分都在“Platforms”目录中,当我开始弄乱这些文件时,构建工具对我造成了破坏,但有时却没有,所以我真的不知道.

模拟器文件本身可以移动,根据您使用的平台(iOS / iPadOS 等)版本的数量,这将为您节省几 GB 到大量 GB 之间的任何内容。

这些位于内部: ~/Library/Developer/CoreSimulator 如原始答案中所述,我已经能够使用符号链接轻松移动整个 CoreSimulator 目录。

我会继续努力解决这个问题,但现在,这就是问题所在。


@cseder 你真是个救星!

顺便说一句,如果您在 Mac Catalina 中遇到问题或需要很长时间才能在执行步骤 5 /usr/bin/xcrun --find xcodebuild 时进行验证,只需:

  1. 关闭计算机
  2. 开机,快速进入安全模式(按多次CMD+R)
  3. 登录到您的帐户并在安全模式开启后打开终端
  4. 运行 此命令 csrutil disable <- 将禁用从互联网下载软件的验证
  5. 运行 sudo reboot

然后你可以直接打开Xcode而不做任何/usr/bin/xcrun --find xcodebuild

请注意,在您能够 运行 Xcode 之后,请确保再次关闭并在安全模式下启用 csrutil enable

除了将 XCode 移动到外部驱动器之外,您还可以克隆 mac 光盘并将整个操作系统移动到外部驱动器上并使其可启动。

你需要的东西:

安装克隆软件,按照说明操作,您将在不到一个小时内获得可启动的外部驱动器(取决于您克隆的内容)

您现在有一个便携式开发磁盘,可以插入并从同一个 mac 启动。从其他 mac 启动可能无法像 cseder 在评论中建议的那样工作。

首次启动和使用 XCode 时,Apple OS 将对应用程序执行一些验证,但完成后应该没问题。

我有一个 2018 mac-mini 运行 Big Sur,只有 128GB 内置 SSD。每次我需要升级 XCode 时,我都必须删除所有模拟器。升级到 Big Sur 更难 :-/

性能?

外部驱动器 (Samsung T5) 的写入速度比 Apple 在 mac-mini 上使用的廉价内置 SSD 快 3 倍。根据 BlackMagic,读取速度大致相同。总体而言,在外部驱动器上构建 Flutter 应用程序的速度提高了大约 10%。

我找到了一个更简单的解决方案。在您的 Mac 上创建一个新用户。授予管理员权限(可选),将刚刚创建的用户帐户的主目录设置为外部硬盘驱动器。然后登录到新用户并在 ~/Applications 目录而不是 /Applications 中安装 Xcode。然后 Xcode 安装在您的外部 ssd 上。到目前为止,我使用它没有问题!希望对你有帮助。

编辑:我忘了说我应该从开发者网站下载 Xcode。还没有尝试从 App Store 下载。

以下是对我有用的方法,不仅适用于 XCode,而且适用于所有应用程序。

  1. 将MacOS安装到外部媒体(SSD会更好)。
  2. 您需要启用从外部驱动器启动。您可以在重启后看到苹果符号后立即按 Command 和 R 来执行此操作
  3. 在外部媒体上安装 MacOS 后,安装所需的任何应用程序。 WhatsApp、XCode、IntelliJ、Adobe Photoshop 等
  4. 完成后,更改启动设置,从 MacMini 或 Macbook pro 驱动器启动。
  5. 创建指向您在外部驱动器上安装的应用程序的符号链接

示例:

cd /应用程序 ln -s "/Volumes/Extreme SSD/Applications/XCode.app" XCode.app

我已经在我的 Mac 上的所有应用程序上尝试过这个,它非常有效。

优点: - 减少头痛。将 XCode 目录复制到外部 SSD 可能不起作用。我已经这样做了,奇怪的是,有一个目录循环,我最终丢失了所有外部 SSD space。

- The application is installed in the way it should

缺点: - 安装 Mac

你必须损失 12GB

到目前为止,这对我来说非常有用。

我刚刚将 Xcode 12.3 安装到 /Applications,然后将 .app 复制到我的外部驱动器,然后删除了原来的。 之后:

ln -s /Volumes/ExternalSSD/Applications/Xcode.app /Applications/Xcode.app

第一次启动用了一段时间,现在好了。 MacOS 11.1, M1 2020 Air.

(无需克隆 OS 或启动外部驱动器,就像其他帖子所建议的那样)。

花了很长时间回答@cesder,这绝对很棒。我确实发现了移动模拟器的问题。 Xcode > 11.3 如果我使用 simlink 将找不到它们,但使用别名效果很好。 要创建别名: 右键单击外部驱动器上的 CoreSimulator 文件夹,然后 select Make alias,然后将其复制到 ~/Library/Developer/


编辑:通过将外部驱动器格式化为 'Mac OS extended (journaled)',我已经能够成功地 运行 Xcode。它是 ExFAT,Xcode 出于某种原因不喜欢它。

我还没有测试过将模拟器移动到外部驱动器,但是移动所有 Xcode 对我来说已经足够了。 要将 Xcode 移动到您的外部驱动器,只需按照 Xcode <= 11.3 的@cesder 说明进行操作,它应该可以工作。我已经在 12.2 (12B45b) 上测试过了。

我找到了一种非常简单的方法来在外部驱动器中安装 Xcode,但模拟器文​​件仍会下载到 Mac 安装中。

  • 从以下位置获取独立的 Xcode 应用程序: Apple Developer Xcode Downloads (使用 Apple 开发者帐户登录)

  • 登录后,输入您想要的版本,然后下载Xcode_x_x_x.xip文件。请记住,Xcode 11.4.1 是 8 GB,因此这将需要一段时间,具体取决于您的互联网连接。

  • 下载文件后,单击 .xip 将其解压缩。您的 Mac 会将其解压缩到您下载它的同一文件夹中。这个提取过程是自动的。单击 .xip 文件后,您无需再执行任何操作。此步骤需要几分钟时间。

  • [可选] 提取后,如果您使用多个版本,请将应用程序重命名为“Xcode11.x.x”。

  • 将该文件拖到您的外部驱动器。

  • 也许您在使用 Transporter 将您的应用程序提交到 Mac App Store 时会发现未找到错误。在这种情况下,转到首选项 > 位置 > 命令行工具,然后 select 你的版本。

  • 这就是我现在使用 Unity 开发 Mac 应用程序的方式。稍后我将尝试对 iOS 执行相同的操作。如果我发现其他问题和解决方法,我会在这里更新(如果我不能,我会在这里寻求帮助)。

Caution : Only tried for cordova projects. Thanks @cseder

来自 macOS Big Sur(11.0.1)、Xcode 12.3、MacBook Air (2017)、WD 外置硬盘(非 SSD)的报告:

  1. apple developer website
  2. 下载 .xip 文件
  3. 将 .xip 文件移动到外部硬盘驱动器(我也将此硬盘驱动器用作时间机器。我不确定这种情况是否是一个因素)
  4. 确保您的 本地 硬盘驱动器至少有 25 GB 可用空间 space。因为在安装过程中本地硬盘填充,安装完成后,free space return.
  5. 双击 .xip 文件。
  6. 耐心点。久等了:) (我没用过SSD:)
  7. 瞧!

注:

  1. 您的 Xcode 应用不会显示在启动面板中。
  2. 我没有使用全功能。仅用于编译一个cordova项目。

系统 MacBook Pro,带外部 SSD。,MacOS BigSur 版本 11.2.1 我在本地磁盘上安装 Xcode 版本 12.4。 安装后我复制了Xcode.app到外盘,并删除了本地盘的版本。 没有做进一步的改变。 从外部磁盘启动 Xcode。没有问题。 小心:第一次开始需要 5 分钟测试