从 macOS Sierra(10.12)开始,苹果进一步加强了系统安全策略,具体表现为:
com.apple.quarantine 扩展属性,系统据此进行拦截提示。这些机制虽然提升了安全性,但也给安装一些未上架 App Store 的实用工具带来了不便。
这是最根本的解决方法,通过终端命令重新启用被隐藏的选项:
bash
sudo spctl --master-disable
执行后效果:
如果想恢复默认安全设置(仅允许 App Store 和被认可开发者),可使用:
bash
sudo spctl --master-enable
如果开启“任何来源”后仍提示损坏,说明该应用被标记了隔离属性,需要手动移除:
bash
sudo xattr -r -d com.apple.quarantine /Applications/应用名称.app
操作技巧:
sudo xattr -r -d com.apple.quarantine 后加一个空格为了免去记忆命令和手动操作的麻烦,我们可以使用一个智能化的 Bash 脚本(文章开头已提供完整代码)。该脚本提供四大功能:
sudo spctl --master-disablesudo spctl --master-enable/Applications 下的所有应用,支持带空格的应用名当你想对“Parallels Desktop.app”进行免疫处理时:
4 选择免疫功能Parallels\ Desktop.app)Y 确认执行sudo xattr -r -d com.apple.quarantine /Applications/Parallels\ Desktop.appchmod +x 脚本名.command 赋予执行权限macOS 的“已损坏”提示本质上是系统在保护你免受潜在恶意软件的侵害。通过理解其背后的安全机制,我们可以有选择地、安全地绕过这些限制,安装那些我们信任却未经过苹果官方渠道分发的应用。
文中的自动化脚本将整个流程简化到只需几次选择,特别适合不熟悉终端操作的 Mac 用户。建议将脚本保存到方便的位置,未来遇到类似问题时即可快速调用。
最后提醒:在享受自由安装软件便利的同时,请始终保持对软件来源的警惕,定期更新系统,并配合可靠的安全软件,才能真正做到安全与便利的平衡。
脚本内容,复制如下脚本
然后命名为 《已损坏,移到废纸篓处理脚本.command》 即可愉快的玩耍了
#!/bin/bash
echo "📢📢📢【读在前面】📢📢📢"
echo "当前脚本为了解决Mac安装软件的“已损坏,无法打开 的提示问题"
echo "执行免疫应用前,请先检测你的系统策略控制状态,如果返回了 assessments disabled 则表示你已经放开系统控制权限;"
echo "你可以直接执行 【免疫隔离应用】"
echo "如果结果是assessments enable 则说明现在还不允许 免疫隔离应用"
echo "需要你先执行 【开启允许“任何来源”的选项】 命令后;在执行 【免疫隔离应用】"
echo "------------------------------【分割线】---------------------------------------"
echo "请选择要做的操作"
echo "1.【查看系统策略控制状态】 sudo spctl --status"
echo "2.【开启允许“任何来源”的选项】 sudo spctl --master-disable"
echo "3.【恢复管理系统策略控制 默认设置 】 sudo spctl --master-enable"
echo "4.【免疫隔离应用】 sudo xattr -r -d com.apple.quarantine"
#开始处理输入内容
echo "请输入你要做的事情:"
read in_type
echo "输入内容:<<<< $in_type >>>>"
# 判定输入是否正确
if [ "$in_type" -ne 1 ] && [ "$in_type" -ne 2 ] && [ "$in_type" -ne 3 ] && [ "$in_type" -ne 4 ]; then
echo "⚠️选项不正确⚠你输入的内容是: $in_type️"
else
echo "输入选项合法✅ 你输入的内容是 $in_type"
fi
#执行【查看系统策略控制状态】脚本
if [ "$in_type" -eq 1 ] ; then
echo "✅ 你选择的是【查看系统策略控制状态】"
echo "执行:sudo spctl --status"
cmd="sudo spctl --status"
eval $cmd
fi
#执行【开启允许“任何来源”的选项】命令
if [ "$in_type" -eq 2 ] ; then
echo "✅ 你选择的是【开启允许“任何来源”的选项】"
echo "执行:sudo spctl --master-disable"
cmd="sudo spctl --master-disable"
eval $cmd
echo "最新状态是:$(sudo spctl --status)"
fi
#执行【恢复管理系统策略控制 默认设置】命令
if [ "$in_type" -eq 3 ] ; then
echo "✅ 你选择的是【恢复管理系统策略控制 默认设置 】"
echo "执行:sudo spctl --master-enable"
cmd="ls"
eval $cmd
echo "最新状态是:$(sudo spctl --status)"
fi
#执行【免疫隔离应用】命令
if [ "$in_type" -eq 4 ] ; then
echo "✅ 你选择的是 【免疫隔离应用】"
echo "💻💻💻💻【输出APP列表】"
cmd="cd /Applications"
eval $cmd
#列出mac APP清单列表
cmd="ls -1 | sed 's/ /\\\ /'"
eval $cmd
#开始执行命令
echo "请输入选择的APP:注意📢请从输出的APP列表粘贴APP 如:Parallels\ Desktop.app"
read -r in_app
echo "您选择的app是:$in_app"
echo "正在执行 【免疫隔离应用】"
echo "是否执行脚本Y/N:sudo xattr -r -d com.apple.quarantine /Applications/$in_app"
read in_select
echo "输入内容: $in_select"
if [ "$in_select" == 'Y' ] || [ "$in_select" == 'y' ]; then
echo "执行【免疫隔离应用】:$in_app"
cmd="sudo xattr -r -d com.apple.quarantine /Applications/$in_app"
eval $cmd
else
echo "你选择了取消执行或其他选项✅ 你输入的内容是 $in_select"
fi
fi
echo "脚本执行结束!请打开你的APP看看能否正常打开吧!"