You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS Ventura下自动更新DMG后提示文件损坏的解决问询

修复macOS 13+下Qt应用自动更新的「文件已损坏」问题

问题根源

macOS 13 Ventura及以上版本强化了Gatekeeper的隔离机制:通过自定义程序(如你的QNetworkAccessManager下载逻辑)获取的文件,系统会自动添加com.apple.quarantine扩展属性。即便文件本身已签名公证,只要这个属性存在,启动时就会触发「文件已损坏,应移至废纸篓」的提示。而Safari下载的公证文件会被系统自动标记为安全来源,不会保留该属性,因此无此问题。

具体修复步骤

1. 下载DMG后立即移除隔离属性

在DMG文件写入磁盘完成后,执行xattr命令删除com.apple.quarantine属性:

xattr -d com.apple.quarantine /path/to/downloaded/YourApp.dmg

在Qt代码中可以通过QProcess调用该命令:

QProcess attrProcess;
attrProcess.start("xattr", QStringList() << "-d" << "com.apple.quarantine" << downloadedDmgPath);
attrProcess.waitForFinished(-1); // 等待命令执行完成

2. 移除挂载命令的-noverify参数

你当前使用hdiutil attach ... -noverify挂载DMG,该参数会跳过系统对DMG签名和公证的校验,可能导致系统无法正确识别文件的安全状态。建议移除该参数,让系统正常校验:

hdiutil attach /path/to/downloaded/YourApp.dmg

3. 替换应用后验证签名(可选)

替换旧应用后,可通过codesign命令验证签名完整性,确保替换过程未损坏文件:

codesign -vvv /Applications/YourApp.app

若输出包含valid on disk和satisfies its Designated Requirement,则签名状态正常。

4. (进阶)改用官方兼容的更新框架

如果长期维护需要,建议集成Sparkle更新框架(支持Qt应用),它会自动处理Gatekeeper隔离属性、签名校验等系统级逻辑,避免自定义更新的兼容性问题。

内容的提问来源于stack exchange,提问作者Violet Giraffe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 13:52:46