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

Mac应用DMG公证失败:Sparkle框架签名与时间戳问题排查

Sparkle框架DMG公证失败的签名修复方案

针对你遇到的DMG公证时Sparkle文件出现“未用有效Developer ID证书签名”“缺少安全时间戳”的问题,按以下步骤排查修复:

  • 先确认Sparkle框架的原始签名状态
    官方预编译的Sparkle框架本身已经经过Apple公证签名,如果你是自行编译或修改过框架文件,会破坏原有签名。先检查框架二进制的签名信息:

    codesign -dv --verbose=4 YourApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Sparkle
    

    若输出显示签名无效或无时间戳,直接替换为官方最新预编译Sparkle包。

  • 严格遵循签名与打包的顺序
    错误的顺序会导致内部文件签名失效,正确流程:

    1. 单独签名主应用,不要用--deep参数(递归签名会覆盖Sparkle的合法签名),必须带时间戳:
      codesign --force --sign "Developer ID Application: 你的开发者ID信息" --timestamp --options runtime YourApp.app
      
    2. 基于签名完成的.app制作DMG(推荐用create-dmg工具,确保DMG仅包含已签名的应用)
    3. 最后对DMG容器签名,同样带时间戳:
      codesign --sign "Developer ID Application: 你的开发者ID信息" --timestamp YourApp.dmg
      
  • 本地预验证再提交公证
    提交notarytool之前,先通过spctl本地验证DMG的签名合法性:

    spctl -a -t open --context context:primary-signature -v YourApp.dmg
    

    只有本地验证通过,再提交公证,避免反复试错。

  • 修正自定义签名函数的逻辑
    检查你的codesignApp函数,如果包含--deep参数或者未添加--timestamp,会导致Sparkle文件的签名被错误处理。调整函数,仅签名主应用,不递归处理框架文件,且强制添加时间戳参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:33:14