打不开的 app 先查隔离标记与签名
```bash
xattr -dr com.apple.quarantine "/path/to/App.app" open "/path/to/App.app"
## 那四行命令里,真正起作用的是第三步
```bash
mkdir -p "$HOME/Applications" # 1 保证目标目录存在
ditto "/Applications/X.app" "$HOME/Applications/X.app" # 2 复制一份到用户目录
xattr -dr com.apple.quarantine "$HOME/Applications/X.app" # 3 解除隔离 ← 关键
open "$HOME/Applications/X.app" # 4 启动
- 复制不是必须的,直接对
/Applications里的原件执行xattr -dr+open也行。复制只是为了避开系统目录权限、并保留一份原件。 - 用
ditto而不是cp,是因为.app本质是 App Bundle 目录,ditto能保留权限、符号链接与扩展属性。 - 所以「只执行后两步打不开」的原因很简单:如果副本还没被创建,第 3、4 步操作的就是一个不存在的路径。
风险与边界
- 解除隔离绕过了一部分 macOS 安全检查,只对来源可信、确定没被篡改的 app 做。
- 它修不了真正损坏、架构不兼容或签名有严重问题的 app —— 只是移除了「下载隔离」这一个障碍。
- 用
xattr -l <app>能看到隔离属性及其来源(例如WeChat);对比两个副本的隔离状态可以直接定位差异。
相关
- 先分清平台错误还是应用错误 —— 先判断是系统安全机制还是应用自身
- 以前能用最近坏了先查自己改了什么
- 本地开发脚本可能连生产资源
- 真机白屏先分清Debug包与证书
- 移动应用正式分发需要签名
- 功能缺失先确认运行的是哪份产物