Catalyst 应用程序:如何启用 com.apple.developer.default-数据保护权利?
Catalyst app: How do I enable com.apple.developer.default-data-protection entitlement?
我正在尝试分发用于 Beta 测试的 Catalyst 应用程序。由于 Mac 没有试飞,我的目的是分发一个签名的存档,以尽量减少我的用户收到的关于 运行 应用程序的警告数量。我做了以下事情:
- 我的存档Mac,
- 从管理器的 "macOS Apps" 列表中选择了存档,
- 点击了 "Distribute App,"
- 选择"Developer ID."
- 已选择"Upload"
- 已选择"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
。
您将看到显示 Debug
和 Release
版本的原始权利文件。 Select Debug
行,然后单击 +
按钮。单击 Any SDK
并将其更改为 Any macOS SDK
。现在将权利文件的名称更改为您的 MacOS
变体。
对 Release
构建重复该过程,使其如下所示。
最后一步是从您的 MacOS
.entitlements
文件中删除违规权利。这必须手动完成,因为 Signing & Capabilities
选项卡只会显示原始 iOS
文件中的权利。因此,单击 MacOS
.entitlements
文件并删除 Data Protection
条目。
Clean
你的项目,Build & Run
,Export
等。你应该可以开始了。
在 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)
我正在尝试分发用于 Beta 测试的 Catalyst 应用程序。由于 Mac 没有试飞,我的目的是分发一个签名的存档,以尽量减少我的用户收到的关于 运行 应用程序的警告数量。我做了以下事情:
- 我的存档Mac,
- 从管理器的 "macOS Apps" 列表中选择了存档,
- 点击了 "Distribute App,"
- 选择"Developer ID."
- 已选择"Upload"
- 已选择"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
。
您将看到显示 Debug
和 Release
版本的原始权利文件。 Select Debug
行,然后单击 +
按钮。单击 Any SDK
并将其更改为 Any macOS SDK
。现在将权利文件的名称更改为您的 MacOS
变体。
对 Release
构建重复该过程,使其如下所示。
最后一步是从您的 MacOS
.entitlements
文件中删除违规权利。这必须手动完成,因为 Signing & Capabilities
选项卡只会显示原始 iOS
文件中的权利。因此,单击 MacOS
.entitlements
文件并删除 Data Protection
条目。
Clean
你的项目,Build & Run
,Export
等。你应该可以开始了。
在 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)