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

macOS通过脚本安装Discord.dmg后出现签名验证异常问题

macOS 14.2.1脚本自动安装DMG应用后签名验证失败的解决办法

问题背景

在MacOS 14.2.1上用bash脚本自动化安装Discord的.dmg文件,执行步骤为:

  • 挂载.dmg文件
  • 将.dmg内的.app文件复制到/Applications目录
  • 卸载.dmg

但脚本安装完成后,打开Discord时会弹出“无法打开,因为无法验证开发者”的提示,手动拖放安装则无此问题。Discord本身是经过官方签名验证的应用。

所用脚本

#!/bin/sh

hdiutil attach ~/Downloads/Discord.dmg -quiet -nobrowse
cp -rf /Volumes/Discord/Discord.app /Applications
hdiutil detach /Volumes/Discord

签名验证错误信息

执行codesign --verify /Applications/Discord.app验证签名时,输出如下错误:

/Applications/Discord.app: bundle format is ambiguous (could be app or framework)
In subcomponent: /Applications/Discord.app/Contents/Frameworks/Electron Framework.framework

问题原因

Discord基于Electron框架开发,这类应用的Contents/Frameworks目录下包含嵌套的框架bundle。用cp -rf递归复制时,会破坏框架的签名元数据和权限结构,导致macOS无法正确识别应用的签名。而手动拖放安装时,macOS会用专门的处理逻辑保留签名完整性。

解决方法

1. 替换复制命令为rsync

rsync能更好地保留文件的权限、元数据和签名信息,适合复制带签名的应用bundle:
修改脚本中的复制命令为:

rsync -a /Volumes/Discord/Discord.app /Applications/

完整优化后的脚本:

#!/bin/sh
DMG_PATH=~/Downloads/Discord.dmg
# 动态获取挂载路径,避免同名冲突
MOUNT_PATH=$(hdiutil attach "$DMG_PATH" -quiet -nobrowse | grep -E '/Volumes/.*' | awk '{print $NF}')
# 用rsync复制应用
rsync -a "$MOUNT_PATH"/Discord.app /Applications/
# 卸载挂载点
hdiutil detach "$MOUNT_PATH" -quiet

2. 修复已损坏的应用签名(针对已用cp安装的情况)

如果已经用cp命令复制了应用,可以通过以下步骤修复:

  • 移除应用的隔离属性:
    sudo xattr -rd com.apple.quarantine /Applications/Discord.app
    
  • 重新签名应用(用临时签名让系统绕过验证,仅适用于信任的应用):
    sudo codesign --force --deep --sign - /Applications/Discord.app
    

内容的提问来源于stack exchange,提问作者Youssef Hammad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 17:50:21