国行 Mac 开启 Xcode Predictive Code Completion 代码自动补全/ 绕过 SKU 限制
在国行 Mac 电脑上开启 Xcode 15 的代码自动补全 / Predictive Code Completion 功能。
国行 Mac 代码自动补全被禁用
如果你使用国行版本的 Mac 电脑,打开 Xcode 会发现 Component 中没有 Predictive Code Completion 的选项:
在设置 -> Text Editing -> Editing 中可以看到,但无法启用,提示 Predictive Code Completion is Not Supported in Region.
经过 Twitter 大神们的测试,发现是由于苹果禁用了所有 China SKU 的 Mac 电脑,传统通过修改地区、网络等绕过限制的方法均不生效。
强制绕过 SKU 限制 / 开启 PCC 功能
禁用 SIP 调试限制
System Integrity Protection(SIP)是 macOS 默认开启的一个安全功能,旨在保护系统软件免受篡改,同时允许用户对其它软件和数据进行修改。禁用 SIP 中的调试限制,才能修改 Mac 的 Region 信息。
首先检查当前 Mac 是否已经禁用 SIP 调试限制。你可以通过在终端中运行 `csrutil status 来检查 SIP 状态,如果输出包含 System Integrity Protection status: enable 说明未禁用,请按照以下步骤禁用它。
准备进入恢复模式
- 关闭你的 Mac。
- 开机时按住
Command (⌘)
和R
键,直到看到 Apple logo 或其他启动界面出现。
禁用 SIP 调试限制
进入恢复模式后,执行以下操作:
- 从菜单栏中选择“实用工具”(Utilities),然后打开“终端”(Terminal)。
- 在终端中输入以下命令:
csrutil enable --without debug
- 按回车键执行该命令。
这个命令将启用 SIP 但禁用其中的调试限制。如果你想完全禁用 SIP,可以使用:
csrutil disable
重启 Mac
- 在终端输入
reboot
命令或使用 Apple 菜单进行重启。 - Mac 将正常启动并加载新的 SIP 配置。
验证 SIP 状态
重新启动后,你可以在常规模式下打开终端并输入以下命令来验证 SIP 的状态:
csrutil status
如果你看到这样的输出,说明 SIP 已启用但调试限制已禁用:
通过 LLDB 强制修改 Mac Region.
打开终端,执行以下命令:
使用 LLDB 调试 eligibilityd
sudo lldb
(lldb) process attach --name eligibilityd
修改 Mac 电脑地区
(lldb) e (void) [[[InputManager sharedInstance] objectForInputValue:6] setValue:@"US" forKey:@"_deviceRegionCode"]
重新计算相关域
(lldb) e (void) [[EligibilityEngine sharedInstance] recomputeAllDomainAnswers]
完成退出
(lldb) process detach
(lldb) exit
完成后,重新打开 Xcode,顺利的话将可以启用 Predictive Code Completion.
常见错误
error: attach failed: more than one process named eligibilityd
在执行命令
- process attach --name eligibilityd
时遇到以下错误:
error: attach failed: more than one process named eligibilityd
这通常是因为你打开了 Xcode 并启动了 visionOS 模拟器导致的。
解决方案非常简单:停止所有 Xcode 运行任务并退出 Xcode,然后重新进入 lldb 运行命令即可。
参考信息:https://x.com/unixzii/status/1802582879769375001