3

我已经构建了一个带有相当复杂记录图的 CloudKit 应用程序,以向我们的客户证明我们的 MVP。开发几乎完美无缺,每个问题都可以很容易地衍生为糟糕的代码。

现在我们已经部署了我们的第一个版本的应用程序。审查过程就像 Kafka 一样,审查团队无法登录 cloudkit。我不得不使用我们其中一个 AppleTS 问题的生命线来获得一份供审核团队遵循的清单(基本上是说 - 如果您使用的帐户不起作用,请注销并使用另一个 iCloud 帐户登录)。

我们通过了审核流程,该应用已在 AppStore 上发布。但现在真正的混乱开始于我。我需要修复几个错误,但现在如果应用程序是使用我的调试设置构建的,我将无法访问它。事实上,我似乎没有任何方法可以构建和运行(并获得对 CloudKit 开发环境的访问,也就是登录)。

我在网上找到了一些关于正确设置我的开发和生产环境的晦涩参考资料,但据我所知,我只是按照这本书,而 Apple Docs on Design Tips for CloudKit 根本无法解决问题。

简而言之!发布后如何在 CloudKit 中管理 Dev 环境和 Prod 环境,以及如何从 XCode 发送到我的设备的构建中访问 Dev 环境,以在发布后继续开发?

编辑:意识到我的问题不够清楚,这里试图澄清

我可以从 XCode 构建和运行。尝试使用登录 iCloud 时

self.container.requestApplicationPermission(CKApplicationPermissions.UserDiscoverability) {...}

我得到一个

CKApplicationPermissionStatus.Denied

状态回来了。没有错误,只是简单地返回拒绝状态。查看设置-> iCloud-> iCloud Drive->“通过电子邮件查找我”我有时会发现我的应用程序的开关已启用,有时则已禁用。尝试切换开关会使“设置”应用程序崩溃。即使去 www.icloud.com 并为我的应用程序设置我的可发现性设置也不能解决问题。从 App Store 或 Testflight 重新安装应用程序就像一个魅力,但当然会运行到 Prod 环境。

所以问题仍然存在;我如何管理我的 Dev 和 Prod 环境,以便我可以在开发时访问(登录,如果你喜欢)我的 Dev 环境,同时我在 AppStore 中有一个待售的应用程序或在 TestFlight 中用于 beta 测试的生产版本。

4

2 回答 2

4

如何在 Xcode 调试中使用 CLOUDKIT 开发或生产数据库(使用 Xcode v 8.2)不用担心,如果您遵循以下说明,它将确保您能够将 Xcode 配置为与 CloudKit 一起使用并同时使用 CloudKit 开发和XCODE 中的 PRODUCTION DB 并将您的项目部署到 App Store

1) 在 xcode 计算机上创建一个 iCloud 帐户并登录到它 2) 通过打开 iCloud 并选择 CloudKit 框,从项目“菜单”的 Capabilities 选项卡配置 Xcode 以使用 CloudKit。Xcode 然后应该自动生成 Provisioning Profiles 等,如 iCloud 选项卡区域中选中的各种框所示 3) 单击“CloudKit Dashboard”框以调出 CloudKit。我不知道为什么,但有时您无法连接到 CloudKit,屏幕上的登录只是不断询问您的用户 ID 和密码,并且没有给出错误消息......继续尝试,您最终将能够连接 4)在 CloudKit 的 Development 数据库中开发您的 Records 和 Fields Schema 5) 在您的项目中使用 CloudKit,方法是关注网络上的许多博客到您项目中的 CRUD 数据(尤其是 StackOverflow。

像往常一样,关于如何以及何时使用生产数据库的 Apple 文档通常令人困惑、过于复杂、矛盾、过时或完全难以理解(即由程序员编写)。此外,许多关于此问题的博客都没有更新最新的 Xcode 和 iOS 版本,或者完全是错误的。

以下是我发现的工作,主要是通过反复试验(幸运的是找到了一些正确的博客),当我成功构建时,通过使用 Finder 在各个点保存(复制)项目。

当某些东西不起作用时(例如,将 CloudKit 开发数据库部署到 CloudKit IDE 中的生产数据库),我会带回最后一个有效的项目副本并尝试不同的东西。

顺便说一句,在对 Xcode、iOS、CloudKit、我的 Xcode 项目设置(plist、权利文件、构建设置等)进行任何重大更改之前,我已经学会了遵循此过程的艰难方法(即,通过 Finder 复制和保存项目)等),或重大的代码更改。

为了更改为生产数据库,我执行了以下操作,在每个步骤之后复制并保存项目……</p>

在使用 CloudKit Development DB 成功调试您的项目后(当您打开 iCloud 并从项目设置“菜单”的 Capabilities 选项卡中选择 CloudKit 时,Xcode 会自动为您配置)。我做了以下......(同时确保您在开发计算机上登录到 iCloud)

1) 我将此添加到我的权利文件(位于 Xcode IDE 左侧“项目”菜单中的文件)。com.apple.developer.icloud-container-environment 并将其设置为“开发”在 iPhone 上运行,它编译并工作..制作了一个项目副本

2) 在 CloudKit IDE 中,我将 Development Db SCHEMA 部署(在 CloudKit IDE 的左下方选择“部署”)到生产(IDE 的右上方)。这仅复制数据库模式,但不复制实际数据。据我所知,无法使用 CloudKit 或 Xcode 将数据从开发数据库复制到生产数据库。

3)然后我选择了CloudKit IDE左下角的“Production”。CloudKit IDE 背景颜色随后发生变化,表明您将连接到生产数据库。无需更改项目中的任何代码即可连接到生产数据库。

4)然后项目仍然编译成功。但是,当我运行该项目时,它仍然连接到 DEVELOPMENT Db

使用 Finder 复制、标记和保存项目

5)然后我将步骤1的entitlements文件中com.apple.developer.icloud-container-environment的值“Development”更改为“Production”。所有“boxes”仍然在iClould区域保持选中成功项目设置“菜单”的“功能”选项卡然后项目仍然编译成功。这一次,当我运行它连接到生产数据库的项目时!!!

这表明可以按照上面的步骤 1-5 在 Xcode 中使用 PRODUCTION DB 调试您的项目

使用 Finder 复制、标记和保存项目

6)转到iTunes Connect并创建和配置您的项目,以便准备将您的项目上传到App Store(当然,确保所有必需的项目图标和屏幕截图都已在Xcode中创建......(顺便说一句...... ..生产数据库只能在实际设备上工作......它不会在模拟器中工作......要在使用开发数据库和生产数据库之间来回切换,只需将步骤 1 的值更改为生产或开发)

6) 选择“Generic iOS Device”,然后从Product菜单中选择“Archive”,然后选择“Upload to App Store”</p>

于 2017-04-11T17:05:42.523 回答
3

几天前我也被困在这个问题上。我完全同意@adamsde1 在我之前写的所有内容,但我想分享我所做的。

因此,首先,我构建了一个具有 CloudKit 功能的应用程序。这很简单,只是一组可以由所有应用程序用户(公共数据库)共享和编辑的对象。假设你知道如何做到这一点,让我们继续讨论这个问题。

据我了解,有两种类型的数据库开发和生产。开发(您可能猜到)用于 TestFlight 和 AppStore 版本的开发和生产。

要将您的应用程序从开发切换到生产,请转到项目导航器中的权利并添加com.apple.developer.icloud-container-environment行并将其字符串值设置为Production。此外,APS Environment在行中,您还需要将 String 值设置production为。

下一步将在 AppStore Connect 上修改您的数据库。当您进入仪表板时,转到您的容器并按小齿轮并选择Deploy Schema to Production...

截屏

当应用程序无法在 TestFlight 上运行时,这解决了我的问题,但是从 Xcode 部署时一切都很好。希望这对某人也有帮助

于 2020-04-01T19:40:39.267 回答