1

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

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

任何帮助表示赞赏。

4

2 回答 2

5

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

所以,对于现在和将来遇到这个问题的人来说,这就是解决我的问题的方法:

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

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

  • 转到代码签名身份并在发布版本中将Mac Developer(默认值)更改为钥匙串上的Developer ID 应用程序。
  • 转到Code Signing Inject Base Entitlements并在Release build上将Yes(默认值)更改为No。如果您不这样做,您的应用程序包将被公证服务器拒绝,因为您允许将代码注入您的应用程序,这是调试所必需的,但存在安全风险。
  • 转到Code Signing Style并在Release build上将Automatic更改为Manual。如果你不这样做,正确的签名将失败。
  • 转到其他代码签名标志并在发布版本上添加--timestamp。这将标记 Xcode,您希望为您的应用添加安全时间戳。如果您不这样做,您的应用程序包将被公证服务器拒绝。

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

  • 使用 Release 构建设置创建一个包含所有目标的新方案
  • 单击Build或 Command + B 作为快捷键,只要遵循由内而外的规则,您将正确签署所有捆绑包(即,应首先签署更深层次目录中的代码!)

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

  • 创建 .dmg 磁盘映像并按照此答案中的说明进行操作。但是,请跳过代码签名说明,因为我在这里解释的内容涵盖了那里解释的所有问题和注意事项。或者,您可以压缩并上传 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。这是一项安全措施,因此您不会以明文形式发送您的 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*

于 2019-06-28T00:00:26.223 回答
2

你可以在这里找到有用的信息

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

我遇到的另一个问题是,当您使用“运行时”选项对其进行代码设计时,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
于 2019-02-25T02:18:49.007 回答