解决 Mac 下「XXX was blocked from loading」

情景再现

安装软件时,有时可能会弹出「System software from developer XXX was blocked from loading.」的提示,根据提示进入到系统偏好设置中可见类似以下图的情况

一般方法

尝试点击「Allow」可解绝大多数情况

有时会出现点了 Allow 和没点击没有任何区别。此时,多数情况下是由于其他软件冲突引起的,常常可以通过关掉其他所有看似无害的软件来测试,当然,也可以每关掉一个软件就测试一下能否正常点击 Allow,下一次就方便了。

我统计出的会造成冲突的软件

  • 欧路词典
  • QQ音乐

特殊方法

如果上面的一般方法采用后依然不行,请采用「特殊方法——直接修改数据库」

简述「原理」

原理部分请自行阅读 Synack
也可直接忽略,是否阅读本文与解决方案无关

开始操作

1. 将 Kext 文件拷贝

打开终端(Terminal,放置于实用工具中),运行以下内容

1
$ cp /private/var/db/SystemPolicyConfiguration/KextPolicy ~/KextPolicy

此步骤将 KextPolicy 文件拷贝至用户目录下备用

2. 修改 Kext 文件

下载 Navicat for sqlite 并安装

打开 Navicat,新建一个 Connection

设置来源文件为「~/KextPolicy」

选中「Kext_policy」表

将本表中所有「allowed」列下面的内容改成 1 即可

最后,点击下面的对勾保存即可

3. 关闭 SIP

如果熟知恢复模式下命令行的使用,可直接在恢复模式中运行相关命令(注意需要提前解锁硬盘)来避免多次重启。本文暂不叙述此方法。

由于 Mac 限制了直接修改系统文件,因此需要先关闭 SIP 以给予 sudo 完全 root 权限

关闭 Mac,然后按住 Command + R 开机(进入恢复模式),选择顶部菜单中的「实用工具 - 终端」,执行以下命令

1
$ csrutil disable

点击菜单中的 Apple Logo,选择重启即可

4. 替换 文件

运行以下命令替换系统的 Knex 文件

1
$ sudo cp ~/KextPolicy /private/var/db/SystemPolicyConfiguration/KextPolicy

运行此命令时会需要你输入管理员密码

5. 重新打开 SIP

SIP 关闭对于电脑而言风险会非常大,因此,在执行完操作后请重新打开

关闭 Mac,然后按住 Command + R 开机(进入恢复模式),选择顶部菜单中的「实用工具 - 终端」,执行以下命令

1
$ csrutil enable

6. 完成

正常开机,应该已经没有问题了


需要本文的人员可能的搜索关键字如下:

  • VmWare Cannot find a valid peer process to connect to
  • System software from developer XXX was blocked from loading.
  • SIP
  • Rootless
  • mac @