【问题标题】:Catalyst app: How do I enable com.apple.developer.default-data-protection entitlement?Catalyst 应用程序:如何启用 com.apple.developer.default-data-protection 权利?
【发布时间】:2020-09-21 04:15:37
【问题描述】:

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

  1. 为 MyMac 存档,
  2. 从管理器的“macOS 应用”列表中选择存档,
  3. 点击“分发应用”,
  4. 选择“开发者 ID”。
  5. 已选择“上传”
  6. 已选择“自动管理签名”

本以为会提交公证,结果却收到错误:

配置分析失败的资格。个人资料不包括 com.apple.developer.default-data-protection 权利。

我随后通过developer.apple.com. 检查了 Mac OS 配置配置文件,我有一个标记为“XC OSX:”的配置文件(假设这意味着 Xcode 自动生成),类型字段为“开发人员 ID 应用程序”。果然,虽然它显示 iCloud,在应用程序购买等,在“启用的功能”部分它没有数据保护。

但是,在 Xcode 中,当我选择目标并转到“签名和功能”时,已经列出了数据保护。当我单击 MacOS 配置文件旁边的信息“i”按钮时,它显示 com.apple.developer.default-data-protection 已启用。 (它实际上显示了 IOS 和 MacOS 配置文件)。

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

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

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

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

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

【问题讨论】:

    标签: ios xcode ios-provisioning mac-catalyst


    【解决方案1】:

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

    你失败了。您没有数据保护(但您需要它)

    但对于苹果来说,这实际上意味着:

    你失败了。你想要数据保护(因为你打开了它)但是 没有它(因为此配置不支持它)。

    因此,“缺少数据保护”的解决方案是...关闭数据保护关闭

    【讨论】:

      【解决方案2】:

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

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

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

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

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

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

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

      Clean 你的项目,Build & RunExport 等等......你应该很高兴。

      【讨论】:

        【解决方案3】:

        在 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

        【讨论】:

          猜你喜欢
          • 2016-08-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多