【问题标题】:iCloud turned on in Xcode, but not app store connect. How to fix?iCloud 在 Xcode 中打开,但不是 app store 连接。怎么修?
【发布时间】:2019-07-15 18:02:02
【问题描述】:

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

我遵循文档并在我的 Xcode 项目中使用 CloudKit 打开了 iCloud。

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

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

注意:下面有很多细节。如果你想跳过细节,总结是我已经按照直接的方式启用了 iCloud,但它还没有显示在 App Store Connect 中或通过 TestFlight 显示在设备上。


步骤:

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

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

2) 在 xcode Capabilities 窗格中,我打开 iCloud,检查 CloudKit,并使用默认容器(名为:“iCloud.com.[bundle identifier]”的容器)。

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

4) 在 developer.apple.com 上,使用该应用 ID 创建配置文件。 iCloud 列在此配置文件的“已启用服务”中。

5) 返回 xcode,在 General 窗格中,关闭自动管理签名并选择此配置文件。如果我选择“自动管理签名”,它使用“iPhone Developer”帐户作为签名证书,这似乎不正确;当我进行手动签名并选择更新的 prov 配置文件时,签名证书正确显示“Iphone Distribution: [team name]”

6) 归档应用程序:产品 -> 归档。 (我在这里仔细检查了 iCloud 在 Capabilities 窗格中保持选中状态,没有错误)

7) 上传应用:窗口 -> 组织者 -> 选择存档,点击分发应用,然后从那里获取。

结果: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 环境说“开发”。我尝试过以这种方式存档和上传,但在 App Store Connect 中启用 icloud 并没有奏效。我也尝试过手动将其切换到“生产”并存档/上传——但结果也是一样的。

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

--当我进入 cloudkit 仪表板时,容器显示“正在开发中”。我还没有看到没有错误的方法来改变它

【问题讨论】:

    标签: ios xcode nativescript icloud


    【解决方案1】:

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

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

    如果没有这些信息,我会被一些人说 iCloud 只是“自动工作”,而其他人会深入了解是否需要进行配置。他们都是对的——只是在谈论不同的事情。

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

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

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

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

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

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

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

    这就是 CloudKit 的用武之地。

    要启用此功能,您需要生成正确的权利文件——例如在 Xcode 上启用带有 CloudKit 的 iCloud,并确保应用 ID 和配置文件确认 CloudKit 已启用。有关更多详细信息,请参阅我的问题中的步骤 1 到 7。这应该可以使事情“启用”。

    但这只是第一部分,然后您需要进行“配置”。为此,您可能需要对 CloudKit 为您的应用程序生成的容器进行一些配置,并在您的应用程序中添加特定于后端进程的代码。在先前答案中链接的tutorial 中有一些很好的信息。

    感谢为此提供信息的人,包括 Apple 开发者技术支持。

    【讨论】:

    • 谢谢,这真的很有帮助。你知道如何在 NativeScript 中防止目录自动备份到 iCloud 吗?
    • 谢谢。我在堆栈溢出的其他地方看到您已经讨论过通过设置 NSURLIsExcludedFromBackupKey 来执行此操作。我还没有实现这一点,所以目前无法添加到该讨论中。也许在nativescript slack上问一下?将 Apple 文档中的 obj C / swift 代码实现为 nativescript 是 nativescript 的一部分,它可以使用更多的教程和文档。
    【解决方案2】:

    这是一个很长的故事,因此,很难理解并了解全貌,但基于您的 cmets...

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

    现在您要迁移到 App Store Connect,我的建议是将所有内容迁移到生产环境,如果还没有,请更新配置文件/配置。

    我引用

    在云套件仪表板上,每个容器都有一个蓝色框,用于 生产环境的开发环境和绿箱 环境。

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

    删除很苛刻...

    试试这个方法,如果我成功了,请告诉我! ;) 如果我没有,请不要投票给我,只是喷气机大声笑,发表评论,我会尽力为您提供进一步的帮助。

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

    祝你好运!

    【讨论】:

    • 谢谢。我的 icloud 容器似乎卡在“开发中”(它们在 cloudkit 仪表板主页中是蓝色的)。我已经尝试进入容器并单击“部署到生产”,但这并没有做任何事情。还有其他方法可以将容器移入绿色生产环境吗?我在启用 iCloud 的情况下设置的应用程序 ID 和配置文件都设置为生产。
    • 正如我所说,尝试创建一个用于生产的新容器,将开发容器留在那里......让我知道这是否成功。
    • 谢谢——但这就是我所缺少的。如何为生产创建新容器?我为生产创建了一个应用程序 ID 和 prov 配置文件(在创建两者时单击应用程序商店分发),并在那里启用了 icloud。然后 xcode 创建了容器,并说它们处于“开发”模式。我应该以不同的方式创建容器吗?
    • 顺便说一句,感谢您的教程。我以前没见过,一定会看看的。
    • 我已经查看了教程。该教程似乎描述了以与我已经完成的方式相匹配的方式设置 cloudkit 容器的方式。但是我看不到它在哪里讨论将开发容器转移到生产容器中。 (我看到它在容器中设置了特定的配置,但没有将整个事情转移到生产环境中。)
    猜你喜欢
    • 1970-01-01
    • 2022-08-12
    • 2015-07-09
    • 2016-04-01
    • 2019-01-30
    • 2010-11-30
    • 2021-04-13
    • 2015-09-22
    • 1970-01-01
    相关资源
    最近更新 更多