如何公证包含嵌入其中的助手的应用程序包?

How to notarize an app bundle containing helpers embedded in it?

有谁知道如何发送 Mac 应用程序包,其中包含要由 Apple 公证的嵌入式助手应用程序包?当我尝试归档一个简单的应用程序时,一切都很顺利。该应用程序已正确存档,我可以上传存档文件,我的应用程序会在几分钟内得到公证。

但是,当我尝试使用脚本阶段归档包含辅助应用程序包的应用程序包并尝试通过创建存档的正常自动工作流程自动签署和公证我的应用程序包时,我无法上传应用程序包进行公证。那么,我该怎么办?

感谢任何帮助。

您可以找到有用的信息here

看看能不能通过公证。对我来说,我必须解压一些罐子并在其中签署文件并重新打包。

我遇到的另一个问题是,当您使用 'runtime' 选项对它进行代码签名时,java 应用程序无法 运行,这可能与您遇到的问题相同(消失)。 要查看错误,您可以从终端 运行 您的应用程序,您将看到错误。在这种情况下,您可以尝试使用 --entitlements 添加一些例外。

这是我用来申请 运行

的权利
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.cs.allow-jit</key>
    <true/>
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
    <key>com.apple.security.cs.disable-executable-page-protection</key>
    <true/>
    <key>com.apple.security.cs.disable-library-validation</key>
        <true/>
        <key>com.apple.security.cs.allow-dyld-environment-variables</key>
        <true/>
</dict>
</plist>

签署应用程序的命令:

codesign --force  --verbose=9 -s "Developer ID Application: XXXXXXX" --options runtime --deep --entitlements ./entitlements Myapp.app

感谢Apple在WWDC 2019期间制作的新文档,我终于能够解决这个问题,这在以前是不可能的,即使是在使用DTS票之后。基本上,如果你有一个复杂的包并且你需要使用脚本自动构建它,你不能通过存档使用自动工作流,然后通过 Xcode[=70= 中的管理器上传应用程序包].

因此,对于那些现在和将来遇到此问题的人,以下是解决我的问题的方法:

1) 转到项目导航面板并单击您的项目

2) 通过单击构建设置转到每个目标并进行以下修改(在搜索框中输入单词 "signing",因为这会缩小显示的构建设置):

  • 转到代码签名身份并在发布构建更改Mac开发人员(默认值)添加到钥匙串上的 Developer ID Application
  • 转到代码签名注入基本权利并在发布构建更改(默认值)改为 No。如果您不这样做,您的应用程序包将被公证服务器拒绝,因为您允许代码注入到您的应用程序中,这是调试所必需的,但存在安全风险。
  • 转到 代码签名样式 并在 Release 版本上将 Automatic 更改为 手动。如果您不这样做,正确的签名将失败。
  • 转到其他代码签名标志并在发布构建上添加--timestamp .这将标记 Xcode 您想要为您的应用添加安全时间戳。如果您不这样做,您的应用程序包将被公证服务器拒绝。

3) 要构建用于分发的应用程序,请执行以下操作:

  • 使用发布构建设置创建一个包含所有目标的新方案
  • 单击 Build 或 Command + B 作为快捷键,只要您遵循 inside-out 规则(即代码deeper-level 目录应首先签名!)

4) 要公证您刚刚创建并正确签名的应用程序包,并使用有效的安全时间戳,您有多种选择:

  • 创建 .dmg 磁盘映像并按照 answer 中的说明进行操作。但是,请跳过代码签名说明,因为我在这里解释的内容涵盖了那里解释的所有问题和注意事项。或者,您可以压缩并上传 zip 文件,如下所述:
  • 在终端中使用此命令将您的应用程序包压缩为 zip 文件:/usr/bin/ditto -ck --keepParent "*APP_PATH*" "*ZIP_PATH*"

5) 在终端中使用此命令上传磁盘映像或 zip 文件:xcrun altool --notarize-app --primary-bundle-id "your-primary-bundle-id-here" --username "*your-username*" --password "*your-app-specific-password-here*" --file *your-path-here*。您需要前往 appleid.apple.com 帐户为 altool 应用程序生成 app-specific 密码。这是一项安全措施,因此您不会明文发送您的 Apple ID 密码。您可以在 Apple ID 管理帐户的安全面板中执行此操作。 在确认上传成功之前不要执行任何操作

6) 要请求公证历史状态,运行 在终端中这样:xcrun altool --notarization-history 0 -u "*your-account*" -p "*your-app-specific-password-here*"。您应该会看到上传列表及其各自的日期和 RequestUUID。最新上传的通常是列表中的第一个。

7) 在终端中请求公证状态,包括访问公证日志文件 运行:xcrun altool --notarization-info RequestUUID -u "*your-account*"

8) 如果您获得应用程序包已获批准的状态,那么您可以通过 运行 在终端中装订该批准:xcrun stapler staple *path-to-your-app-bundle*.