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 从内部 HD 复制到外部驱动器,重命名原始驱动器并运行步骤 4 和 5 中的命令,这应该可以解决问题。如果是这样,请删除原始(现已重命名)目录/应用程序包。
我的经验是,如果您还没有 Xcode,那么这个过程会更复杂一些。
可能有更简单的方法可以做到这一点,但是在我尝试过的每件事都遇到了不同的错误之后,我在运行macOS Catalina (10.15.2)和Xcode 11.3的 MacBook Pro 16" 上这样做了 :
我一直将外部驱动器连接到 MacBook,使用了一点魔术贴,因为我使用的三星 T5 驱动器非常小巧轻便。它安装在:
/Volumes/SSD
在外部驱动器上,我已将 Xcode 复制到:
/Volumes/SSD/Applications
按照以下步骤安装 Xcode:
从Apple 的开发人员站点下载最新的 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 ~在终端中执行 a时。
如果您使用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。
正如我在答案顶部提到的,如果您使用的是高于 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.app 位于“Platforms”目录中,当我开始处理这些文件时,构建工具会对我产生影响,但有时不会,所以我真的不知道。
Simulator 文件本身可以移动,这将根据您使用的平台(iOS / iPadOS 等)版本的数量为您节省几 GB 到大量 GB 之间的任何内容。
它们位于内部:
~/Library/Developer/CoreSimulator
如原始答案中所述,我已经能够使用符号链接轻松移动整个 CoreSimulator 目录。
我将继续尝试解决这个问题,但现在,这就是它所在的位置。
我刚刚将 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。
(无需像其他帖子建议的那样克隆操作系统或启动外部驱动器)。
| 归档时间: |
|
| 查看次数: |
34189 次 |
| 最近记录: |