我可以将 Xcode 与 iPhone Simulator.app 一起安装在外部硬盘驱动器上吗?

Oma*_*mam 43 macos xcode swift mobile-development flutter

我想安装 xcode 来部署跨平台 Flutter 应用程序,但我找不到足够的空间来安装 Xcode 是否有其他解决方案可以将其安装在内部存储上

cse*_*der 77


请先阅读本文!

目前,此答案仅对运行的系统有效:

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

为什么?(精简版):

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

在11.x的“大苏尔”的MacOS版本,锁定下来,更难的是,因为事情是这样。移动系统相关文件,甚至从外部驱动器启动都不起作用,因为新的“加密密封”,新 SSV(签名系统卷)的一部分,如果散列被更改(文件在 /出等)。

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


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

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

我的经验是,如果您还没有 Xcode,那么这个过程会更复杂一些。

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

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

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

按照以下步骤安装 Xcode:

  1. Apple 的开发人员站点下载最新的 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

移动模拟器/模拟器

模拟器、缓存和所有这些也占用了大量空间但位于其他地方。
对于 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 ~在终端中执行 a时。

Homebrew 用户注意事项

如果您使用Homebrew来安装软件包(就像许多人一样),如果您移动/Library/Developer/CommandLineTools 目录,Homebrew 似乎不会注册您安装了 CommandLineTools ,并且会尝试从源代码编译一些瓶子。
Homebrew 显然需要在单独的命令行工具包中找到一些工具,这些工具安装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 应该做的伎俩。

正如我所说,可能有更简单的解决方案,但在这样做之后,我已经能够在 MacOS、iOS 和 Flutter 框架中毫无错误地使用 Homebrew 和 Xcode + 工具。

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


针对评论中的问题:

使用此方法后,我可以升级 Xcode / Simulators 吗?

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


有关 Xcode 版本的更新 > 11.3

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

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

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


?磁盘今天(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

Run Code Online (Sandbox Code Playgroud)

看看会流出什么……大多数工具也是如此。

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

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

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

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

寻找中间立场

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

所以。我不得不放弃这个,找到妥协。我可以忍受在 MacBook Pro 的内部 256GB NVMe 驱动器上节省了大约50GB的空间。

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

复制内容并删除原件后,只使用符号链接。这仅对那些使用 Android SDK 和工具进行开发的人感兴趣,因此遗憾的是,我无法解决 Apple 对“外国、敌对”位置中的可执行文件的限制性新政策造成的这种疯狂。
仅这两个目录就为我节省了相当多的空间,所以我想暂时就这些。

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

Xcode 空间使用

大部分 Xcode.app 位于“Platforms”目录中,当我开始处理这些文件时,构建工具会对我产生影响,但有时不会,所以我真的不知道。

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

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

我将继续尝试解决这个问题,但现在,这就是它所在的位置。


  • 我在这里完成了所有步骤,但是移动 Xcode 后,我的模拟器无法工作。他们启动应用程序,但不加载操作系统,只是停留在黑屏状态。有人知道为什么会这样吗? (5认同)
  • 我有几个问题: 1. 这种方法是否也会移动模拟器?2.当我们移动Xcode时,以后可以更新Xcode吗? (2认同)
  • 请参阅我在主要答案顶部部分中关于使用最新版本 Xcode 和 macOS Catalina 的问题的编辑。 (2认同)
  • 也期待这一点 - 与@JoseTapizquent 的模拟器有同样的问题。 (2认同)

小智 9

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

\n

编辑:我忘了提到我应该从开发者网站下载 Xcode。Haven\xe2\x80\x99t 尝试从 App Store 下载。

\n


BSU*_*SUK 7

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

ln -s /Volumes/ExternalSSD/Applications/Xcode.app /Applications/Xcode.app
Run Code Online (Sandbox Code Playgroud)

第一次启动需要一段时间,但随后就可以了。MacOS 11.1,M1 2020 Air。

(无需像其他帖子建议的那样克隆操作系统或启动外部驱动器)。

  • @DeveloperSammy,您好,您可以将文件或文件夹拖到终端窗口中,以便快速轻松地“输入”路径。看到你的回复后,我也使用相同的方法移动了模拟器: ln -s /Volumes/ExternalSSD/Applications/Xcode\ Simulators/dyld /Users/bsuk/Library/Developer/CoreSimulator/Caches 这又节省了 10gb 左右。 (2认同)
  • 刚刚使用此技术在我的 M1 Mac Mini(只有 256GB 内部存储)上成功将“Xcode_13.3.1”安装到外部驱动器。我从 https://developer.apple.com/download 下载了 zip,将 zip 直接展开到外部磁盘的应用程序文件夹,然后双击生成的“.xip”,这将创建最终的“Xcode.app”(删除 .xip 文件)。 xip)。然后我创建了符号链接并从 /Applications/Xcode.app 别名运行 xcode。我不敢相信它成功了! (2认同)