Catalyst 应用程序:如何启用 com.apple.developer.default-数据保护权利?

Catalyst app: How do I enable com.apple.developer.default-data-protection entitlement?

我正在尝试分发用于 Beta 测试的 Catalyst 应用程序。由于 Mac 没有试飞,我的目的是分发一个签名的存档,以尽量减少我的用户收到的关于 运行 应用程序的警告数量。我做了以下事情:

  1. 我的存档Mac,
  2. 从管理器的 "macOS Apps" 列表中选择了存档,
  3. 点击了 "Distribute App,"
  4. 选择"Developer ID."
  5. 已选择"Upload"
  6. 已选择"Automatically manage signing"

我预计它会被提交公证,但收到错误消息:

Provisioning profiled failed qualification. Profile doesn't include the com.apple.developer.default-data-protection entitlement.

我随后通过 developer.apple.com. 检查了 Mac OS 配置文件 我有一个标记为 "XC OSX:" 的配置文件(假设这意味着 Xcode 自动生成) 类型字段为 "Developer ID Application." 果然,虽然它显示 iCloud、应用内购买等,但在 "Enabled Capabilities" 部分它没有数据保护。

但是,在 Xcode 中,当我 select 目标并转到 "Signing and Capabilities," 时,数据保护已经列出。当我单击 MacOS 配置文件旁边的信息 "i" 按钮时,它显示 com.apple.developer.default-数据保护已启用。 (它实际上显示了 IOS 和 MacOS 配置文件)。

接下来,我查看了 developer.apple.com 上的 Bundle Identifier,并查看了能力下列出的数据保护:

我尝试在 Xcode 中删除并重新添加数据保护,但错误仍然存​​在。

我尝试在 developer.apple.com 上手动创建 Developer ID 配置文件,但生成的配置文件仍然缺乏数据保护。

我尝试在 developer.apple.com 上的标识符下删除并重新添加数据保护。这成功地使现有配置文件(Xcode 和我创建的配置文件)无效。当我再次尝试签名时,创建了一个新的配置文件,但它仍然缺少数据保护并且错误仍然出现。

我在这里错过了什么?我还需要做什么才能在配置文件中启用数据保护?

烧了一张支持票,找到了答案。我将消息读为:

You failed. You don't have Data Protection (but you need it)

但根据 Apple,它实际上意味着:

You failed. You want Data Protection (because you turned it on) but don't have it (because it's not supported in this config).

因此,"Data protection is missing" 的解决方案是...关闭数据保护

如您所知,这里的问题是 Data Protection 权利不适用于 MacOS

如果您仍想将此用于您的 iOS 版本的应用程序,您需要为您的 MacOS 版本使用不同的 .entitlements 文件到 iOS 建造。

首先,复制您当前的 .entitlements 文件。最简单的方法是在按住 Alt 键的同时轻轻拖动 .entitlements 文件。它会制作一个副本。将其重命名为 Original Name-MacOS.entitlements.

下一步是打开 Build Settings 并在搜索栏中输入 entitlements

您将看到显示 DebugRelease 版本的原始权利文件。 Select Debug 行,然后单击 + 按钮。单击 Any SDK 并将其更改为 Any macOS SDK。现在将权利文件的名称更改为您的 MacOS 变体。

Release 构建重复该过程,使其如下所示。

最后一步是从您的 MacOS .entitlements 文件中删除违规权利。这必须手动完成,因为 Signing & Capabilities 选项卡只会显示原始 iOS 文件中的权利。因此,单击 MacOS .entitlements 文件并删除 Data Protection 条目。

Clean 你的项目,Build & RunExport 等。你应该可以开始了。

在 MacOS 上,数据保护 API 目前不可用。

如果你尝试像这样使用它们,

try data.write(to: fileUrl, options: .completeFileProtection

代码将编译并执行,但数据未安全地存储在文件系统上。

如果您需要安全地存储数据,有多种选择可供您选择。 密码和相关数据可以存储在Keychain中,FileVault将透明地加密磁盘上的所有文件。

但是如果这还不能满足您的需求。在将内容写入磁盘之前,您可以使用 CryptoKit 中的 AES.GCM 加密 API 来加密您的内容。

let key = SymmatericKey(size: .bits256)
let sealed = try AES.GCM.seal(data, using: key)

来源:WWDC 2019 Introducing iPad Apps for Mac