[macOS翻译]SD Notary:轻松公证

68 阅读12分钟

本文由 简悦 SimpRead转码, 原文地址 latenightsw.com

注意:SD Notary 已被 SD Notary 2 取代。SD Notary 是对应用程序进行公证的实用程序 ......。

注意:SD Notary 已被 SD Notary 2 取代。

SD Notary 是一款用于对应用程序进行 Apple 公证的实用程序。在 macOS 10.13.6 中,Gatekeeper 要求对应用程序进行公证,而以前只接受简单的代码签名应用程序。

基本流程包括三个步骤:更全面的代码签名、向 Apple 提交应用程序并由 Apple 检查和批准,以及(选择性地)将生成的票据装订到应用程序中。

大多数 macOS 应用程序都是用 Xcode 编写的,因此流程的设计也考虑到了这一点。对于非 Xcode 编写的应用程序,例如脚本小程序,可以使用命令行工具进行公证。不过,其中一些工具实际上仍是 Xcode 的一部分。

SD Notary 是一款为这些工具提供更友好用户界面的应用程序。虽然它是针对脚本小程序设计的,但它也适用于任何要求相对简单的应用程序。(SD Notary 可公证 .app.dmg.pkg.plugin.fmplugin 文件。

从 1.4.4 版开始,它是一款通用应用程序,可在英特尔和苹果硅 Mac 上运行。

运行要求

MacOS 10.13 或更高版本。

  • 必须安装 Mac App Store 提供的 Xcode 10(或更高版本),并至少运行一次以安装其命令行工具。

  • 具有双因素身份验证(非两步验证)的 Apple ID

  • 一个应用程序专用密码。见 。您还必须将此密码添加到登录钥匙串(见下文)。

  • 以上述 Apple ID 命名的 Apple 开发者账户

  • 加入苹果开发者计划。费用为 99 美元。这使你有权生成一个开发者 ID 代码签名证书,你需要用它来签署代码。请参阅 developer.apple.com/programs/

  • 正常工作的互联网连接。公证需要与苹果服务器通信。

下载

SD Notary 1.4.12 (3MB)

使用 SD Notary

假设您已满足上述所有要求,您就可以运行 SD Notary。如果您有多个版本的 Xcode 在运行,您可能需要使用 xcode-select 来确保运行的是正确的版本。

你的开发者 ID 签名身份应出现在窗口顶部的弹出窗口中。您应该输入您的 Apple ID,以及在登录钥匙串中添加应用程序特定密码时使用的名称(见下文)。

如果你的 Apple ID 与一个以上的 Apple 开发团队相关联,你还需要输入你希望使用的团队的提供商简称。有一个 选择... 按钮,它可以从 Apple 检索团队成员信息,让您选择正确的团队,但它只有在您运行 Xcode 11 或更高版本时才有效。

一个很好的初始测试是点击获取历史按钮,它将获取您尝试公证的任何应用程序的详细信息。如果出现错误,很可能是您输入的上述值有误。

复选框 "提交时,创建并装订图像"可让您选择创建一个".dmg "文件作为公证过程的一部分,如果您安装了 DropDMG 应用程序,您可以选择由它创建".dmg "文件,并使用您从弹出菜单中选择的配置。

右侧是一个标签视图,有权限高级两个标签。在这里,你可以指定应用程序所需的权限。默认值适合基本的 AppleScript 小程序:允许它发送 Apple 事件和加载第三方框架(在使用 AppleScriptObjC 的某些情况下需要)。你可以对这些值进行相应调整。

另一个按钮可让你跳过签署附文,通常应取消选中。

与其每次都要输入所有设置,还不如用自己喜欢的值设置一个文档窗口,然后从文件菜单中选择设置文档默认值。这将存储窗口的值,每次打开新窗口时都将使用这些值。

设置好您的要求后,您就可以按 提交... 按钮,在出现的工作表中选择您的应用程序,然后开始流程。如果一切顺利,您将得到一份经过公证并装订成册的申请副本。

您也可以将申请拖到 SD 公证人图标上。在出现的窗口中设置您的权利要求,然后按立即提交按钮。

如果您的申请已成功上传,但在装订过程前中断了--会有几分钟或更长时间的延迟--您可以使用 Staple Only... 按钮选择已提交的副本并尝试装订。

进展迹象

根据应用程序的大小和复杂程度、互联网连接速度以及苹果服务器的繁忙程度,整个过程可能需要相当长的时间。从上传到装订(或通知失败)之间可能会有几分钟的延迟。您可以通过 Log 区域了解正在发生的情况。如果出现错误,它将显示提供的任何解释。

提交应用程序时所选择的应用程序副本本身不会被修改。相反,SD Notary 将在其旁边创建一个以应用程序命名的文件夹,并在其中创建一个副本。因此,如果您选择了 MyApp.app 文件夹,则将在其旁边创建一个名为 MyApp - Working 的文件夹。

Working 文件夹中将包含一个应用程序副本、一个用于上传的 .zip 文件、一个名为 Entitlements.plist 的文件(其中包含正在申请的权限)以及一个名为 Submission Log.txt 的文本文件。该日志文件比 SD 公证窗口中显示的日志更详细,包括每次命令行调用和全部结果。

如果上传成功,文件夹将重命名为 MyApp - Submitted,删除 .zip 文件,并添加一个名为 RequestUUID.txt 的新文件。其中包含 Apple 提供的 UUID,以备日后检查。

在此阶段,SD Notary 会开始轮询苹果服务器,以了解应用程序是否已获批准。如果已获批准,则将应用程序与公证票据装订在一起,文件夹重命名为 MyApp - Notarized,原始版本移至名为 MyApp - Unmodified Original 的子文件夹中。如果未获批准,文件夹将重命名为 MyApp - Failed,原始版本则留在原处。

有时,苹果服务器会对状态检查作出错误响应。通常情况下,这涉及到一个错误编号 239,服务器最终会自行纠正,但有时会在几个小时后才纠正。如果出现这种错误,从 1.4 版开始,SD Notary 将保持每分钟重新检查一次,而不是返回错误信息。重试的最大次数为 1000 次,但可通过脚本、应用程序的已知错误重试限制属性进行更改。最小重试次数为 3 次(出现这种情况时,有时取消重试会更快。曾有过这样的情况:第二次上传在几分钟内就获得了批准,而原来的上传却在几个小时后才获得批准)。

公证磁盘镜像和软件包

SD Notary 还可以公证.dmg.pkg.plugin.fmplugin文件。

公证.plugin.fmplugin文件与公证应用程序类似。公证.dmg.pkg文件涉及不同的工作流程,因为只有只读磁盘镜像和平面.pkg文件可以公证。在这种情况下,您需要先签署磁盘镜像或软件包的内容,然后再创建镜像或软件包文件本身。然后,根据已签名的内容创建 .dmg.pkg 文件,并提交以进行公证。

签署 .pkg 文件需要 Developer ID Installer 身份,而不是 Developer ID Application 身份,因此如果要提交软件包,必须确保安装了这两种证书。如果您在构建.pkg文件时已经签署了该文件,则该文件将不会被重新签署。

您可以使用 Sign Only...(仅签署...)按钮签署磁盘镜像和软件包内容。按下按钮后,你可以选择要签名的应用程序,也可以选择包含磁盘镜像中所有文件的文件夹。如果包含多个应用程序,后者会很有用。完成签名后,您就可以制作磁盘镜像或软件包,然后像直接提交应用程序一样提交。

重要的是,在签署和创建磁盘镜像或软件包之间不要做任何更改,并使用经过公证的版本进行分发。磁盘镜像或软件包经过公证后,其内容的任何票据都会附加到容器文件中,如果重新打包,这些票据就会丢失。如果有疑问,也可以先单独公证应用程序,然后再将其添加到磁盘镜像文件中进行公证。

创建磁盘镜像

SD Notary 现在提供了创建磁盘镜像的选项,如果您安装了DropDMG.app,则可将其作为流程的一部分。选择这两个选项时,公证流程的工作方式略有不同。

如果您不选择创建磁盘映像,您的应用程序或插件将被签名,然后创建一个.zip文件并提交给 Apple。一旦获得批准,".zip "文件将被丢弃,已签名的副本将被装订。加沙的装订步骤是可选的,只是为了方便。当有人首次尝试打开经过公证的应用程序时,系统会查找装订在其上的公证票据。如果找不到,系统就会联系苹果公司的服务器,查看该应用程序是否已被公证。显然,这可能会造成很大的延迟,如果你不在线,可能会很不方便。

如果您选择磁盘镜像选项,您的应用程序将如上所述进行签名,然后创建一个只读的".dmg "文件并上传到 Apple,而不是".zip "文件。一旦应用程序通过检查和批准,".dmg "文件将被装订,而不是应用程序的签名副本--签名副本实际上将被丢弃。在分发此类磁盘镜像时,装订的票据会在镜像加载时读取,因此系统无需在首次启动应用程序时检查其状态。

通过使用磁盘镜像,您可以鼓励人们将您的应用程序复制到下载文件夹以外的地方,这反过来又可以删除一些隔离行为。如果使用 DropDMG,您可以指定配置,以便在磁盘镜像文件中包含其他元素,如许可证、"阅读我 "文件和背景图形。

您仍可以用老方法创建磁盘镜像: 只需签署您的应用程序,构建磁盘镜像,然后提交磁盘镜像文件。新选项只是简化了流程。

详情

与传统的代码签名相比,公证应用程序必须以更全面的方式进行代码签名。应用程序必须设置为使用所谓的加固运行时。这意味着应用程序不能执行 Entitlements(权限)或 Advanced(高级)选项卡视图中列出的任何操作,除非这些操作被选中。签名还必须包含时间戳。此外,应用程序捆绑包中的所有可执行代码都必须使用相同的身份进行类似的单独签名,并从最深到最浅递归签名。SD 公证人会进行这种递归代码签名,不过在某些情况下,您可能希望在将项目添加到捆绑包之前对其进行公证(请参阅下面的提示)。

任何现有的代码签名都将被替换,因此在导出只运行版本的小程序时,没有必要在该阶段进行代码签名。

提示

Apple 希望在捆绑包的特定位置找到代码。例如,框架一般放在 Contents/Frameworks 中,资源则放在 Contents/Resources/ 中。(如果 Apple 不喜欢你的代码结构,你的应用程序可能会被拒绝。

一个简单的 AppleScript 小程序(或脚本调试器中的增强型小程序)应该没有问题。但如果添加了其他文件,就需要小心了。

如需进一步指导,请参阅此处的 正确构建代码 部分: forums.developer.apple.com/thread/1281….

如果您的应用程序是一个分发应用程序,并在其捆绑包中包含其他小程序,您可能希望在将这些小程序添加到主应用程序之前对其进行单独公证,然后在签署主应用程序时选中 Don't sign enclosures 复选框。

另一个需要注意的问题是应用程序的捆绑 ID。确保您上传的每个应用程序的捆绑 ID 都是唯一的,最好是基于您拥有或控制的域名。

特定应用程序密码

公证使用的工具需要密码授权。这意味着你需要做两件事:

  • 设置应用程序专用密码。方法是登录 Apple ID 帐户页面,点击 "App-Specific Passwords(应用程序专用密码)"下面的 "Generate Password(生成密码)"。

  • 将应用程序专用密码添加到登录钥匙串。打开 Keychain Access.app,选择左侧的登录钥匙串(选择正确的钥匙串非常重要),选择文件 -> 新密码项...,然后在 "钥匙串项名称 "中输入应用程序专用密码的名称,在 "账户名称 "中输入 Apple ID,并在 "密码 "字段中输入实际的应用程序专用密码。

您应在 SD Notary 中输入应用程序专用密码的名称。

在提交或签署应用程序时,如果由于文件问题而导致失败,您可以在创建新版本(相同名称和位置)后,从文件菜单中选择再次提交再次签署,而不必再重新选择文件。

脚本

SD Notary 完全可以编写脚本。使用提交应用程序命令时,需要设置一个非常大的超时。某些错误的from参数中包含额外的日志信息。由于执行命令可能需要相当长的时间,因此大多数应用程序属性只能在status属性返回 "ready" 字符串时才能更改,以避免在进程中更改值。

在 SD Notary 中创建新文档窗口时,应用程序级属性通常会影响默认值。这与更改值并在文件菜单中选择设置文档默认值是一样的。

要跳过的路径属性是一种高级设置,现阶段不会在界面中显示。


www.deepl.com 翻译