我需要公证应用程序和dmg镜像文件吗?

10

我有一个应用程序,已签名、公证并被钉住,然后压缩成zip文件,作为Sparkle更新程序的对象。

我还将其分发到DMG镜像中供新用户使用(也是我网站上的主要下载)。 我是否可以只将已经公证/钉住的应用程序放在DMG中,还是需要单独进行DMG文件的公证和钉住过程?


您需要对DMG进行公证。 - Jim Merkel
因此,对于一个简单的应用程序,我可以将其公证为 .app,将其存档为 .zip 并使其可用于 Sparkle 更新。然后,公证包含 .app 的 .dmg。在这种情况下,.app 是否会有一个附带的票证?我之所以问是因为一旦 .app 从 .dmg 中复制出来并且 .dmg 被弹出/移除,.app 就是唯一剩下的东西,如果它要在没有活动互联网连接的情况下工作,就需要一个票证。 - Trygve
是的,它可以递归地工作。使用spctl或检查公证日志进行检查。 - jvarela
1
在对 .dmg 进行公证后,我在 .dmg 上运行“xcrun stapler validate --verbose”,并获得“验证操作成功”的结果,但是打开 .dmg 并在其中运行相同的命令时,会出现“My.app 没有被加盖印章”的错误,尽管 spctl -a -v 显示该应用已经过公证。这似乎比仅将正确加盖印章的 .app 复制到 dmg 中而不对 .dmg 本身进行公证更糟糕。 - Trygve
你在启动时是否收到了来自Gatekeeper的任何警告? - Parag Bafna
3个回答

7

您只需要对应用进行一次公证:

  1. 创建一个包含已签名应用的DMG文件。
  2. 对DMG文件进行签名、公证和装订。
  3. 打开DMG文件并复制应用程序到外面。装订它并为 Sparkle 创建一个存档文件 [1]

要确认应用程序是否已公证,请运行以下命令:

spctl -a -t exec -vv MyApp.app

然后您将看到类似以下的信息:

MyApp.app: accepted
source=Notarized Developer ID
origin=Developer ID Application: Name (ID)

请注意源代码中的 "Notarized Developer ID"。

您还可以通过运行此命令来确认票证是否已被装订:

xcrun stapler validate MyApp.app

然后您会看到这个消息:

Processing: /path/to/MyApp.app
The validate action worked!

只需要对DMG文件进行公证即可,因为公证服务会对磁盘映像中的任何应用程序进行公证。来自苹果文档

或者,您可以将应用程序、内核扩展和其他软件放入容器中,例如磁盘映像,并对容器进行公证。公证服务接受磁盘映像(UDIF格式)、签名的平面安装程序包和ZIP存档。它还处理嵌套的容器,例如磁盘映像中的软件包。


[1] 您也可以将DMG文件用于Sparkle,不需要第二个存档。来自Sparkle文档

Sparkle支持从DMG、ZIP存档、tarball和安装程序包更新,因此您通常可以在您的网站上重复使用相同的存档来分发您的应用程序以及Sparkle更新。


5
根据我在苹果文档中所读(见下面的引用),以及我的经验和其他应用程序,只需对DMG文件进行公证即可。您不必先公证应用程序...
“例如,如果您提交一个包含签名安装程序包和内部应用程序束的磁盘映像,则公证服务会为磁盘映像、安装程序包和应用程序束生成票证。” 来源:https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution/customizing_the_notarization_workflow#3087734

我认为只有在您不打算将应用程序固定时,这才是正确的。 - dkl

4

您需要将应用程序压缩成zip格式,发送zip文件以进行公证,然后将原始应用程序装订。接着,使用已装订的应用程序创建dmg文件,将dmg压缩,发送给公证机构进行公证,再将dmg装订并分发。


1
请问如何发送压缩的 dmg 文件进行公证?我在这一步遇到了困难。 - Cyril

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接