【发布时间】:2020-03-28 06:21:31
【问题描述】:
我想安装 xcode 来部署跨平台颤振应用程序,但我找不到足够的空间来存放 Xcode 是否有任何替代解决方案可以将其安装在内部存储上
【问题讨论】:
标签: swift xcode macos flutter mobile-development
我想安装 xcode 来部署跨平台颤振应用程序,但我找不到足够的空间来存放 Xcode 是否有任何替代解决方案可以将其安装在内部存储上
【问题讨论】:
标签: swift xcode macos flutter mobile-development
我找到了一种在外部驱动器中安装 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 时,您可能会发现未找到错误。在这种情况下,请转到首选项 > 位置 > 命令行工具,然后选择您的版本。
这就是我现在使用 Unity 为 Mac 应用程序工作的方式。稍后我会尝试在 iOS 上做同样的事情。如果我发现其他问题和解决方法,我会在这里更新(或者如果我不能,我会在这里寻求帮助)。
【讨论】:
注意:仅尝试用于 cordova 项目。感谢@cseder
来自 macOS Big Sur(11.0.1)、Xcode 12.3、MacBook Air (2017)、WD 外置硬盘(非 SSD)的报告:
注意:
【讨论】:
XCode
为什么?(短版):
在 XCode 11.3.x 中,Apple 在/usr/lib/libxcselect.dylib 中激活了一些(直到现在)休眠检查,可以检查开发人员工具是否位于由 SIP 保护的只读/不可变系统分区上,并在您这样做时触发xcode-select -s 目录切换尝试。
由于like this 的原因,11.x “Big Sur” macOS 版本更难将其锁定。 移动系统相关文件,甚至从外部驱动器启动都不起作用,因为新的“加密封条”是the new SSV(签名系统卷)的一部分,如果散列被更改(文件在 /等)。
我还没有找到解决这些检查的方法。 我对使用此方法后损坏的系统不承担任何责任,如果您选择修补更新版本的 XCode / macOS,请先进行完整备份!祝你好运!
如 cmets 中所述,如果您已经安装了 Xcode,则该过程非常简单。 首先将 Xcode 从内部 HD 复制到外部驱动器,重命名原始文件并运行步骤 4 和 5 中的命令,这应该可以解决问题。如果是这样,请删除原始(现已重命名)目录/应用程序包。
我的经验是,如果您还没有 Xcode,则该过程会涉及更多。
可能有更简单的方法可以做到这一点,但在我尝试过的每件事都出现不同的错误之后,我在 MacBook Pro 16" 上运行时这样做了 macOS Catalina (10.15.2) 和 Xcode 11.3:
我的外置驱动器始终连接到 MacBook,使用了一点 Velcro,因为我使用的三星 T5 驱动器又小又轻。
它安装在:/Volumes/SSD
在我已将 Xcode 复制到的外部驱动器上:/Volumes/SSD/Applications
按照以下步骤安装 Xcode:
从Apple's Developer Site 下载最新的 11.3 Xcode 版本(不是 Beta 版)(这是一个 7.3GB 的下载,您需要顺便注册一个免费的开发者帐户)
安装 Xcode 命令行工具(到内部驱动器),可以通过在终端中运行以下命令来触发:
sudo xcode-select --install
这将触发命令行工具的安装并建立/Library/Developer/CommandLineTools
路径并将其设置为安装后的默认开发者工具路径。
现在,Xcode 下载以 .xip 文件的形式出现,需要使用
macOS 随附的存档实用程序。
我已经在 SSD 上创建了一个目录:/Volumes/SSD/Applications
并将 Xcode_11_3.xip 文件移到此处,然后通过在 Finder 中双击它来提取它。
注意:
它将解压到与 .xip 文件相同的文件夹中,进入 Xcode.app,但也会将 7.3GB 的 .xip 文件保留在那里。
解压后,您可以将 .xip 文件移动到某处进行备份或直接删除。
现在使用以下命令更改默认开发者工具目录:sudo xcode-select -s /Volumes/SSD/Applications/Xcode.app/Contents/Developer
然后再执行一次zsh -l或重新启动 Terminal.app。
将 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 ~ 时。
如果您使用Homebrew 安装软件包(就像许多人一样),如果您移动
/Library/Developer/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 应该可以解决问题。
正如我所说,可能有更简单的解决方案,但是
这样做之后,我已经能够毫无错误地使用 Homebrew 以及带有 MacOS、iOS 和 Flutter 框架的 Xcode + 工具。
另外,我在/Applications 中为 Xcode.app 创建了一个别名,以便将其与其他应用程序方便地放在一起。 (Cmd + Opt 将 Xcode.app 拖到 Finder 中的 /Applications 中)。
这种方式在内部驱动器上为自己节省了大量空间。
回答 cmets 中的问题:
使用此方法后我可以升级 Xcode / Simulators 吗?
只要您在按住⌥ + ⌘ 的同时拖动应用程序,从外部驱动器的Xcode.app 到/Applications/Xcode.app 创建一个好的旧“别名”,我在更新时没有任何问题,但是 我通过从Apple Developer Site 下载而不是通过 macOS AppStore 进行升级,因为我注意到 AppStore 不接受别名并认为未安装 Xcode。
正如我在答案顶部提到的,如果您使用的 Xcode 版本高于 11.3,我无法保证此答案。
我已经在新机器上使用全新安装完成了所有步骤。
在尝试解决这个问题时,我遇到了一些阻碍,我只有有限的时间来做这件事。
问题比预期的要复杂一些。
待办事项:
✅ 磁盘今天到货(9 月 8 日,星期二)
✅ 安装 macOS、Xcode、Android SDK 和 Flutter SDK 开发文件
✅ 将 Flutter SDK、Android SDK 和 Android 模拟器移至外部 SSD
✅ 将 iOS 模拟器文件移动到外部 SSD
[?] 失败:将 Xcode 和 Platform 文件移动到外部 SSD
✅ 调整 Zsh 环境变量/脚本以反映变化
如果将 Xcode 应用程序包中的工具移到内部驱动器之外,启用 SIP 的用户(可能是大多数用户)似乎会遇到麻烦。
你可能会想,“嘿,我的工具在 /usr/bin 或其他地方,但问题是这些文件只是 shim 二进制文件,它们使用系统库来解决Developer 目录的路径,其中安装了所有实际的可执行文件、库和支持文件。
这使事情变得更加复杂,因为您现在甚至不再知道这些文件中的哪些文件在实际使用中。试试看:
$ otool -L /usr/bin/xcrun
# or
$ otool -L /usr/bin/xcode-select
看看会产生什么...大多数工具也是如此。
如果你反汇编 /usr/lib/libxcselect.dylib(允许这样做吗??)在 11.3 版本之后运行 Xcode 时显然会执行一些额外的检查。
我回去检查了一下,配置已经为几个版本提供了这些测试,但它们在以前的消费者版本中没有被激活。
因此,当按照我的原始答案中所述尝试 目录切换 时,libxcselect 工具现在将执行至少一次(不)完整性检查,以确保 Xcode 及其工具从内部(安全)存储,具有由 SIP 保护的不可变系统配置。
System Integrity Protection,所以,你不能只是移动或删除它。
我的猜测是,您必须禁用 SIP 才能使其正常工作,这是不可接受的解决方案,因为它会带来许多安全性和稳定性问题(甚至性能更差)。
问题:如何通过将开发人员文件移动到外部驱动器来释放内部驱动器上的空间。
关于移动 Xcode 部分,我已经尝试了几乎所有我能想到的方法,但无论如何我都遇到了新的障碍和阻碍。
所以。我不得不在这个问题上认输,找到一个折衷方案。
我可以忍受在我的 MacBook Pro 的内部 256GB NVMe 驱动器上节省大约 50GB 的空间。
我移动没有问题:
~/Library/Android/*(整个Android SDK目录)
~/.android/*(缓存和 .avd 模拟器图像文件)
在复制内容并删除原件后,只使用符号链接。
这仅对那些使用 Android SDK 和工具进行开发的人感兴趣,所以很遗憾,我无法解决由于 Apple 对“外国、敌对”位置的可执行文件的限制性新政策而导致的这种疯狂。
仅这两个目录就为我节省了相当多的空间,所以我想暂时就是这样。
我尝试将 Xcode 包的某些部分从应用包中移出,并取得了不同程度的成功,但正如您在此屏幕截图中看到的那样:
Xcode.app 的大部分位于“Platforms”目录中,当我开始处理这些文件时,构建工具会炸毁我,但有时不会,所以我真的不知道。
模拟器文件本身可以移动,这将为您节省几 GB 到大量 GB 的空间,具体取决于您使用的平台(iOS / iPadOS 等)版本。
这些位于内部:
~/Library/Developer/CoreSimulator
如原始答案中所述,我已经能够使用符号链接轻松移动整个 CoreSimulator 目录。
我会继续尝试解决这个问题,但现在,这就是它的所在。
【讨论】:
除了将 XCode 移动到外部驱动器之外,您还可以克隆 Mac 光盘并将整个操作系统移动到外部驱动器上并使其可启动。
你需要的东西:
安装克隆软件,按照说明进行操作,不到一小时您将拥有一个可启动的外部驱动器(取决于您要克隆的内容)
您现在有一个便携式开发磁盘,可以插入并从同一个 mac 启动。从其他 mac 启动可能无法像 cseder 在 cmets 中建议的那样工作。
在第一次启动和使用 XCode 时,Apple 操作系统会执行一些应用程序验证,但一旦完成,你应该没问题。
我有一台运行 Big Sur 的 2018 mac-mini,只有 128GB 内部 SSD。每次我需要升级 XCode 时,我都必须删除所有的模拟器。升级到 Big Sur 更加困难:-/
性能?
外置驱动器 (Samsung T5) 的写入速度比 Apple 在 mac-mini 上使用的廉价内置 SSD 快 3 倍。根据BlackMagic,读取速度大致相同。总体而言,在外部驱动器上构建 Flutter 应用程序的速度大约快 10%。
【讨论】:
花了很长时间回答@cesder,这绝对是很棒的。我确实发现了移动模拟器的问题。如果我使用 simlink,Xcode > 11.3 将找不到它们,但使用别名效果很好。
创建别名:
右键单击外部驱动器上的CoreSimulator 文件夹,然后选择Make alias,然后将其复制到~/Library/Developer/
编辑:通过将 Xcode 格式化为“Mac OS 扩展(日志式)”,我已经能够从我的外部驱动器成功运行 Xcode。它就像 ExFAT,Xcode 出于某种原因不喜欢它。
我还没有测试将模拟器移动到外部驱动器,但是移动所有 Xcode 对我来说已经足够了。 要将 Xcode 移动到您的外部驱动器,只需遵循 Xcode
【讨论】:
CoreSimulators 文件夹。将 IPhone 别名为/Volumes/SSD/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app,然后将其复制到 ~/Applications/Simulator.app。当我尝试打开它时它立即关闭。谢谢。
https://hacknicity.com/xclauncher 完成的,因为我只是想找到一些东西来完成这项工作,并记得花了 3 美元。
系统 MacBook Pro,带有外部 SSD。,带有 MacOS BigSur 版本 11.2.1 我在本地磁盘上安装 Xcode 版本 12.4。 安装后我将 Xcode.app 复制到外部磁盘,并删除本地磁盘上的版本。 没有进行进一步的更改。 从外部磁盘启动 Xcode。没有问题。 小心:第一次启动需要 5 分钟
【讨论】:
我刚刚将 Xcode 12.3 安装到 /Applications 然后将 .app 复制到我的外部驱动器,然后删除了原始文件。 之后:
ln -s /Volumes/ExternalSSD/Applications/Xcode.app /Applications/Xcode.app
第一次启动需要一段时间,但后来一切正常。 MacOS 11.1,M1 2020 Air。
(无需克隆操作系统或从外部驱动器启动,就像其他帖子所建议的那样)。
【讨论】:
这对我有用,不仅适用于 XCode,而且适用于所有应用程序。
例子:
cd /应用程序 ln -s "/Volumes/Extreme SSD/Applications/XCode.app" XCode.app
我已经在我的 Mac 上的所有应用程序上尝试过这个,它就像一个魅力。
优点: - 减少头痛。将 XCode 目录复制到外部 SSD 可能不起作用。我已经这样做了,奇怪的是,有一个目录循环,我最终失去了我所有的外部 SSD 空间。
- The application is installed in the way it should
缺点: - 你必须失去 12GB 才能安装 Mac
到目前为止,这对我来说就像一个魅力。
【讨论】:
我找到了一个更简单的解决方案。在您的 Mac 上创建一个新用户。授予管理员权限(可选),将您刚刚创建的用户帐户的主目录设置为外部硬盘驱动器。然后登录新用户并将 Xcode 安装到 ~/Applications 目录而不是 /Applications。然后 Xcode 安装在您的外部 ssd 上。到目前为止对我来说使用它没有问题!希望对您有所帮助。
编辑:我忘了说我应该从开发者网站下载 Xcode。没试过从 App Store 下载。
【讨论】:
@cseder 你是救命稻草!
顺便说一句,如果您在执行步骤 5 /usr/bin/xcrun --find xcodebuild 时遇到问题或在 Mac Catalina 中需要很长时间来验证:
csrutil disable
sudo reboot
然后你就可以直接打开Xcode而不用做任何/usr/bin/xcrun --find xcodebuild
请注意,在您能够运行 Xcode 之后,请确保再次关闭并在安全模式下启用 csrutil enable。
【讨论】: