iCloud 在 Xcode 开启,但未开启 App Store Connect。怎么修?

iCloud turned on in Xcode, but not app store connect. How to fix?

我一直在努力让我的 iOS 应用程序启用 iCloud。

我已按照文档进行操作,并在 Xcode 的项目中使用 CloudKit 打开了 iCloud。

但是,当我将应用程序从 Xcode 上传到 App Store Connect 时,iCloud 不存在。它没有显示在 "Capabilities" 下,并且在通过 TestFlight 使用该应用程序时,未启用 iCloud。

我有什么特别需要做的吗?使用 Xcode 版本 10.1 + Mac OS High Sierra 10.13.

注意:下面有一堆细节。如果你想跳过细节,总结是我已经按照直接的路线启用 iCloud,但它还没有通过 TestFlight 出现在 App Store Connect 或设备上。


步骤:

我遵循了文档并尝试了一些解决方案,例如 here and here

1) 我在 xcode 中打开我的项目。

2) 在 xcode 功能窗格中,我打开 iCloud,选中 CloudKit,并使用默认容器(名为:"iCloud.com.[bundle identifier]" 的容器)。

3) 在 developer.apple.com,我确认我使用的应用程序 ID 已自动启用 iCloud 和 CloudKit(它在那里显示为绿色)。

4) 在 developer.apple.com,使用该应用程序 ID 创建配置文件。 iCloud 列在该配置文件的 "Enabled Services" 中。

5) 返回 xcode,在“常规”窗格中,关闭自动管理签名和 select 此配置文件。如果我 select "automatically manage signing",它使用 "iPhone Developer" 帐户作为签名证书,这似乎不正确;当我进行手动签名和 select 更新的 prov 配置文件时,签名证书正确读取 "Iphone Distribution: [team name]"

6) 存档应用程序:产品 -> 存档。 (我在这里仔细检查过 iCloud 仍然 selected 在功能面板中,没有错误)

7) 上传应用程序:window -> 管理器 -> select 存档,点击分发应用程序,然后从那里获取。

结果:Build 成功上传到 App Store Connect,但在任何地方都看不到 iCloud 支持。

我还需要做什么?

备注:

当我存档应用程序时,权利文件(在 AppName -> AppName -> AppName.entitlements 下列出)包括:

<dict>
    <key>aps-environment</key>
    <string>development</string>
    <key>com.apple.developer.icloud-container-identifiers</key>
    <array>
        <string>iCloud.$(CFBundleIdentifier)</string>
    </array>
    <key>com.apple.developer.icloud-services</key>
    <array>
        <string>CloudKit</string>
    </array>
    <key>com.apple.developer.ubiquity-kvstore-identifier</key>
    <string>$(TeamIdentifierPrefix)$(CFBundleIdentifier)</string>
</dict>
</plist>

aps 环境显示 "development"。我试过以这种方式存档和上传,但在 App Store Connect 中启用 icloud 并没有奏效。我也尝试过手动将其切换为 "production" 和 archiving/uploading--but 结果也一样。

--底层应用程序是用 Nativescript 制作的,但我认为这对这个阶段来说不重要,因为我正在通过 xcode 上传。 (我已经浏览过有关此的 Nativescript 信息。)

--当我进入 cloudkit 仪表板时,容器显示 "in development"。我还没有找到一种方法来改变它而不会出错

这是一个很长的故事,因此,很难理解并了解全貌,但根据您的评论...

您似乎以某种方式缺少控制台云激活。我猜你可能混合了开发和分发配置文件。

既然您要迁移到 App Store Connect,我的建议是将所有内容迁移到生产环境,如果还没有,请更新profiles/provisionings。

我引用

On the cloud kit dashboard, each container will have a blue box for the Development environment and green box for the Production environment.

您可以在(蓝色)开发环境中即时创建和删除记录类型。但是,一旦您部署到(绿色)生产环境,该模式就会在该容器中永久存在。您无法从(绿色)生产环境中删除记录类型。

删除是严厉的...

试试这个方法,如果我成功了请告诉我! ;) 如果我没有,请不要投票反对我只是喷气哈哈,发表评论,我会尽力帮助你。

本教程广为人知,但我认为它对 iCloud 初学者非常有用,如果您没有,请查看: https://www.raywenderlich.com/1000-cloudkit-tutorial-getting-started

祝你好运!

我已经弄清楚了这里的基本问题:我基本上混淆了两种不同的 iCloud(或者至少两种非常不同的开发人员使用 iCloud 的方式)。

这对于many/most熟悉iOS编程的人来说是显而易见的,但这是我没有掌握的关键点。

如果没有这些信息,有些人会说 iCloud 只是 "automatically works",而其他人会深入探讨是否需要进行配置,这让我很反感。他们都是对的——只是在谈论不同的事情。

所以这是我之前没有掌握的:从开发者的角度来看,这是iCloud的两种不同用途:

1) 自动,备份 iCloud。这是系统范围的功能,允许用户从他们的设备备份数据。用户通过开启“iCloud Backup”(设置-->apple id-->iCloud)来开启它。开机后,设备会定期自动备份用户数据。此功能将自动备份 app/Documents 目录中包含的应用程序数据。更多信息 here

如果需要,请参阅 here 了解有关防止备份某些数据的详细信息。

除了将您想要在系统范围内备份的数据备份到文档目录中之外,您作为应用程序开发人员不需要做任何事情。您甚至不需要通过 Xcode 启用 iCloud(我认为——如果我错了,请其他人纠正我)。

这不会在加载应用程序时将数据从 iCloud 加载到您的应用程序。相反,它会保存一个备份(您的应用程序数据和用户 phone 上的其他数据)——其主要好处是如果用户丢失了他们的设备,他们可以在另一台设备上恢复该数据。

2) 通过 iCloud 的特定应用程序云存储。 这肯定不会自动发生,需要有意义的配置。

在这里您可以像后端云解决方案一样使用 iCloud。例如,您可以在创建特定数据时将特定数据发送到 iCloud,然后在用户加载应用程序时将该数据从 iCloud 获取到应用程序(而不是将该数据本地存储在用户设备上)。

这就是 CloudKit 的用武之地。

要启用此功能,您需要生成正确的授权文件——例如在 Xcode 上启用带 CloudKit 的 iCloud,并确保应用程序 ID 和配置文件确认 CloudKit 已启用。有关更多详细信息,请参阅问题中的步骤 1 到 7。这应该可以得到东西 "enabled"。

但这只是第一件,接下来你需要得到东西"configured"。为此,您可能需要对 CloudKit 为您的应用生成的容器进行一些配置,并在您的应用中添加特定于后端进程的代码。先前答案中链接的 tutorial 中有一些很好的信息。

感谢提供相关信息的人员,包括 Apple 开发人员技术支持。