验证你的dmg是否符合mac安装要求

12 阅读2分钟

第一步:Gatekeeper (门禁) 的最终裁决

这是最重要的测试,它完全模拟了用户第一次打开您的应用时,macOS 系统的反应。

  1. 打开“终端”App。

  2. 输入以下命令并回车:

    Bash

    spctl --assess --verbose=4 /Applications/xxx.app
    
  • 期望的成功结果 ✅:

    /Applications/xxx.app: accepted
    source=Notarized Developer ID
    

    看到 accepted 和 Notarized Developer ID,表示您的应用已被系统完全信任,这是最完美的结果。

  • 可能的问题结果 ❌: 如果看到 rejected,或者 source 显示为 Unnotarized Developer ID,说明公证步骤失败了或没有执行。


第二步:深度签名完整性验证

这个命令会递归检查应用包内所有文件(包括您的扩展)的签名是否完整且在打包后未被篡改。

  • 在终端中输入以下命令并回车:

    Bash

    codesign --verify --deep --strict --verbose=4 /Applications/xxx.app
    
  • 期望的成功结果 ✅没有任何输出。是的,这个命令成功执行后是“沉默”的。安静就代表完美,证明签名是完好的。

  • 可能的问题结果 ❌: 如果输出了任何错误信息(比如 a sealed resource is missing or invalid 或 resource modified),说明签名在打包过程中被破坏了。


第三步:查看签名身份和公证票据

我们可以用这个命令查看是谁签的名,以及检查公证信息。

  1. 查看签名身份

    Bash

    codesign -dv --verbose=4 /Applications/xxx.app
    
    • 您应该关注的输出信息:

      • Identifier=com.xxx.app (或您最终使用的ID)
      • Authority=Developer ID Application: xxxxx . ...
      • Authority=Developer ID Certification Authority
      • Authority=Apple Root CA
      • TeamIdentifier=xxxxxxx
    • 您应该能看到一个完整的信任链,从您的证书一直到苹果的根证书。

  2. 检查公证票据 (Notarization Ticket)

    Bash

    stapler validate -v /Applications/xxx.app
    
    • 期望的成功结果 ✅: 您应该看到类似 The validate action worked! 的成功信息。
    • 可能的问题结果 ❌: 如果提示票据找不到或无效,说明公证未成功附加到应用上。

第四步:检查授权 (Entitlements)

最后,我们可以检查一下主应用和扩展的“权限列表”是否已正确嵌入签名中。

  1. 检查主应用的授权:

    Bash

    codesign -d --entitlements - /Applications/xxx.app
    
  2. 检查扩展的授权:

    Bash

    codesign -d --entitlements - /Applications/xxx.app/Contents/Plugins/xxxExtension.appex
    
  • 期望的结果 ✅: 这两个命令的输出应该是两个 .plist 格式的 XML。请确认它们的内容和您在 build 文件夹中创建的 entitlements.mac.plist 和 entitlements.mac.extension.plist 文件内容一致。

如果您以上所有命令(特别是第一步的 spctl 和第二步的 codesign --verify)都得到了预期的成功结果,那么就可以满怀信心地将这个应用发给您的同事了!它已经达到了苹果官方分发标准。

恭喜您完成了整个复杂但非常有价值的流程!