大多数浏览器和
Developer App 均支持流媒体播放。
-
Mac App 公证的新功能
公证和 macOS 的组合可帮助用户通过非 App Store 渠道为其 Mac 安全下载软件。了解从 altool 到 notarytool 所需的过渡,以及 Xcode GUI 可以如何帮助您在对 App 进行公证时改善整体性能。我们还将分享有关 API 的信息,以便和任何联网设备的公证服务关联。
资源
相关视频
WWDC23
WWDC22
WWDC21
WWDC19
-
下载
♪ 柔和乐器演奏的嘻哈音乐 ♪ ♪ 大家好 我是 Johnathan macOS 开发人员将软件 提交给公证服务 以帮助保护他们的客户 免受恶意软件的侵害 去年我们推出了 一种更快更简单的方式 通过 notarytool CLI (命令行界面) 提交 App 进行公证 今年 我们很高兴能通过为您与公证服务的交互 做出的一些重大改进 继续优化性能和灵活性 在本讲座中 我们将讨论 三个主要的主题 首先 我们将了解 从使用 altool 转换为使用 notarytool 进行公证 的重要截止日期 接下来 我们将讨论 即将推出的 Xcode 14 对 Xcode 集成所做的改进 这为 Xcode 带来了 notarytool 的提交速度 最后 我们将讨论一种灵活的 与公证服务交互的新方式 即 REST API 它让您可以在更多地方进行上传 查看提交状态并检查提交内容
去年我们推出了 notarytool 这是一个替代 altool 进行公证的工具 在本讲座的稍后部分 我将讨论 Xcode 通过 Xcode 14 迁移到 我们最新的后端 为通过 altool 和 Xcode 13 进行的公证 准备好迁移路径之后 我们宣布使用这些旧方法进行公证的 截止日期是 2023 年秋季 如果您从 altool 迁移到 notarytool 时需要帮助 请参考去年的讲座 “更快更简单的 Mac App公证方式” 这里还有一些细节要说明 包括捆绑在 Xcode 13 中的 notarytool CLI 在 2023 年秋季的 截止日期之后还能继续工作 不过 与往常一样 我们鼓励您进行更新 以接收最新的改进和修补程序 但我们将在该截止日期后停止支持 使用 Xcode 13 UI 上传到公证服务 请继续关注 Xcode 14 中的 一些性能改进 但在很大程度上您可以预期 您的工作流程不会改变 最后 所有形式的 altool 公证 将在 2023 年秋季停止工作 有关迁移到 notarytool 的详细信息 也请参考去年的 WWDC 讲座 接下来 我们将谈谈 Xcode 14 中公证方式的变化 我们已经迁移了 Xcode 中内置的公证支持功能 以使用与我们去年推出的 notarytool CLI 相同的可靠后端 因此 我们很高兴 为 Xcode 14 带来 大约 4 倍的性能提升 这与我们去年 针对 notarytool 宣布的 性能提升是一致的 最棒的是 除了更新 您无需更改项目设置或工作流程 即可获得这种性能提升 对于本讲座的最后一个主题 我们很高兴地宣布一项新服务 Notary REST API 这项新服务让您可以在更多地方 更灵活地与公证服务进行交互 我们看一下几个重要的概念 这个新的 API 旨在 为公证服务提供更灵活的界面 作为基于 JSON 的 Web 服务 集成在大多数语言里应该相当简单 此 API 允许您 从任何有网络连接的地方 上传提交文件 包括持续集成服务器 在这些地方您目前可能 没有运行 macOS 此外 该 API 还支持 与公证服务的其他交互 例如检索您的提交历史记录 或过去的提交详情 我们引入 REST API 的 目标是 支持从更多平台提交软件进行公证 并允许在自动化系统中 更轻松地与公证人进行交互 提供了当前的提交方法 Xcode 和 notarytool 之外的补充方式 可用于这些方法目前无法运行的地方 比如基于 Linux 的持续集成 举个例子 假设您希望部署管道 在分发之前将您的 App 提交给公证人 通过这个新的 API 和一些基本的脚本 您可以轻松地实现该过程的自动化 在我开始正题之前 一个重要的主题是身份验证 您可以通过像其他 App Store Connect API 一样 使用 JSON Web Tokens 或 JWT 的 API 进行身份验证 有关身份验证或我将要展示的代码 的更多详细信息 请访问下面链接的 REST API 文档 在这些代码片段中 我假设您将有效的 JWT 作为令牌变量传递给函数 我们来看一个在 Python 中 向公证人提交文件的例子 其他编程语言也适用 同样的基本流程 将文件上传给公证人有两个主要步骤 第一步是通知公证人 您希望上传文件 其中包含有关该文件的一些基本信息 如文件名和 SHA-256 响应包含上传文件所需的信息 和通过我们的管道 跟踪提交文件的 ID 第二步是通过 Amazon S3 实际上传文件进行公证 您需要利用 您最喜欢的 S3 SDK 对于这个例子 我将使用 boto3 库 在这里我们使用 上一次调用中返回的临时凭证 进行身份验证并创建客户端 然后 我们使用客户端将文件上传到 第一步的响应中指定的存储桶和对象 上传后 提交文件将 通过公证管道处理 对于大多数提交文件 此过程应在 15 分钟内完成 上传后 您应在分发前确认 公证服务已成功处理 您提交的文件 从广义上讲 有两种方法可以做到这一点 第一种方法 也是最简单的方法 是通过相同的 API 来检查结果 另一种选择是借助于 随 notarytool 引入的 webhook 支持 首先 我们看一下 API 方法 查看向公证人提交的文件的状态 非常简单 您可以使用在上传过程中收到的 提交 ID 提出请求 响应包含提交文件的当前状态 该状态将一直为“进行中” 直到公证人完成处理 然后该状态将转换为 提交文件的最终状态 例如已接受或无效 提交完成后 您可以使用该 API 来检索此次上传的公证日志 有关这些端点的更多详情 请参阅 Notary REST API 文档 接下来 我们将讨论获取状态的 第二种方法:webhook 在 webhook 工作流程中 过程大致相同 但这次您将在初始上传请求中 提供 webhook URL 有关格式的详细信息 请参阅 Notary REST API 文档 和以前一样 这将触发公证服务 来分析您提交的文件 当自动分析结束时 会创建工单 并保存最终状态 完成后 公证服务将调用 提供的 webhook URL 此调用的内容包括提交 ID 团队 ID 和证明其来自我们的签名 收到该通知后 您可以选择下一步做什么 例如 您可以通知原始提交者 或启动自动分发管道 与使用 notarytool 等待相比 这允许您将上传文件的系统 与公证后自动执行操作的系统分离 我们很高兴看到 这个新的 REST API 打开了 与持续集成系统 和其他为 macOS 构建软件的工具 进行更多集成的大门 在本讲座即将结束时 再次提醒一下 转换为使用 Xcode 14、notarytool 或直接使用 REST API 的截止日期 是 2023 年秋季 最后 如果您还不能在部署管道中 使用 notarytool 现在试用 Notary REST API 将为您带来启动自动化的机会 您可以在下面找到文档链接 谢谢 我希望您喜欢 WWDC 22 的其余部分 ♪
-
-
4:53 - REST API: upload file for notarization
# Upload file for notarization def upload_file(token, filepath, sha256): data = { "sha256": sha256, "submissionName": os.path.basename(filepath) } resp = requests.post( "https://appstoreconnect.apple.com/notary/v2/submissions", json=data, headers={"Authorization": "Bearer " + token}) output = resp.json() aws_info = output["data"]["attributes"] submission_id = output["data"]["id"] client = boto3.client( "s3", aws_access_key_id=aws_info["awsAccessKeyId"], aws_secret_access_key=aws_info["awsSecretAccessKey"], aws_session_token=aws_info["awsSessionToken"]) client.upload_file(filepath, aws_info["bucket"], aws_info["object"])
-
6:12 - REST API: wait for completion
# Wait for completion def watch_upload(submission_id, token): while True: resp = requests.get( "https://appstoreconnect.apple.com/notary/v2/submissions/" + submission_id, headers={"Authorization": "Bearer " + token}) output = resp.json() current_status = output["data"]["attributes"]["status"] if current_status != "In Progress": return current_status # For example: Accepted or Invalid time.sleep(30) # Allow time for submission to progress
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。