乐于分享
好东西不私藏

从 Github 下载的程序提示文件损坏怎么办

从 Github 下载的程序提示文件损坏怎么办

从 Github 下载的程序提示文件损坏怎么办

AI 兴起之后,在大模型的帮助下越来越多的开发者可以独立完成应用程序的开发了。最近发现有些在 Github 上评价还不错的应用下载到 MacOS 上安装完提示 “XXXX.app 已损坏,无法打开。你应该将它移到废纸篓。”

第一次遇到这个提示,我还以为是下载的文件坏了,重下了一遍还是这样,才去查到底是怎么回事。

从第三方平台下载的应用程序,MacOS 向来管理是很严格的,以前遇到的场景通常是 “XXXX.app 已被阻止使用,因为无法检查是否包含恶意软件”,这种就比较简单,苹果官网直接提供了解决方案,在确认软件安全的前提下直接照作即可。

苹果这个官方方案针对的是“无法检查是否包含恶意软件”的提示,做法是右键点应用选“打开”,或者去系统设置的“隐私与安全”里点“仍要打开”。这次遇到的“已损坏,无法打开”是另一个提示,解决方式不一样,下面说。

这个提示是怎么来的

这次遇到的应用程序损坏是什么原因呢?虽然这里提示的是“已损坏”,但实际上是开发者未通过苹果的合规公证,无法合规发行软件,导致 MacOS 无法识别该应用程序的安全性。这种软件通常是 Github 上的开源项目,个人开发者不一定都做了公证(公证需要付费的开发者账号,一年 $99),很多人打包好就直接发布了。要使用这些应用,用户要自行辨别软件安全性和合法性。

怎么解决

如果你自己已经确认了软件的安全性,可以打开终端执行如下命令,注意把 XXX 替换成实际 App 的路径和名称。这样就不会再有“已损坏”的提示了。

sudo xattr -rd com.apple.quarantine "/Applications/XXX.app"

顺手讲讲 xattr

上面那条命令用的是 macOS 自带的 xattr 工具,它专门用来查看和修改文件上的扩展属性。

扩展属性可以理解成贴在文件上的小标签,不占用文件内容本身,跟着文件走。macOS 上最常见的标签是 com.apple.quarantine:从浏览器下载文件时,系统自动给文件贴上这个标签,记下下载来源和时间。Gatekeeper 一看到这个标签,就会去校验应用有没有签名、有没有公证,校验不过就弹“已损坏,无法打开”。

常用参数:

参数
作用
不写参数
列出文件上所有扩展属性的名字
-l
长格式,属性名和值一起显示
-p
打印指定属性的值,可以看隔离标签里记的下载来源
-d
删除指定的属性,后面跟属性名
-c
清空文件上所有属性,删得最干净,但其他标签也会一起没了
-w
写入属性值,日常基本用不到
-r
递归,处理目录时把里面所有子文件一起带上

删完之后可以用 -l 再看一眼,输出里如果没有 com.apple.quarantine 了应该就是删干净了:

sudo xattr -l "/Applications/XXX.app"

如果还是报“已损坏”,那应该就是真损坏了~

一点建议

如果要长期使用这种软件,建议还是在 Github 上给开发者提一个 Issue,请开发者抓紧完成开发者资质认证,我们就可以早日使用上合规的软件了。

大家可以在评论区软件,你都用过哪些好用的开源软件也有类似的问题。