CloudKit:部署到 AppStore 后访问开发环境?

Posted

技术标签:

【中文标题】CloudKit:部署到 AppStore 后访问开发环境?【英文标题】:CloudKit: Access development environment after deploy to AppStore? 【发布时间】:2016-07-11 20:31:22 【问题描述】:

我已经构建了一个带有相当复杂记录图的 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 测试的生产版本。

【问题讨论】:

大概你没有直接从你设备上的 Xcode 运行应用程序;如果你是,那么它会访问开发 CloudKit 环境。如果开发人员向您发送临时构建以安装在您的设备上,那么当他们打包构建时,系统会询问他们是否应该访问生产或开发 CloudKit 环境 哦,是的,我直接从 XCode 运行它。 然后会访问开发CloudKit环境 可能是这样,但是您的 cmets 仍然不能解决我的问题。我将重新表述这个问题,看看它是否有帮助:myContainer.requestApplicationPermission(CKApplicationPermissions.UserDiscoverability) 自从我发布应用程序以来从 XCode 运行时总是返回 CKApplicationPermissionStatus.Denied 状态。无论是尝试访问 Dev 环境还是 Prod 环境,结果都是一样的。预期的行为是登录开发环境。 见***.com/questions/26487535/… 【参考方案1】:

如何在 Xcode 调试中使用 CLOUDKIT 开发或生产数据库(使用 Xcode v 8.2) 不用担心,如果您遵循以下指示,它将确保您能够配置 Xcode 以使用 CloudKit,并在 XCODE 中使用 CloudKit Development 和 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 and Fields Schema 5)在你的项目中使用CloudKit,通过网络上的许多博客到你项目中的CRUD数据(尤其是***.com) 6)当您的项目完成调试并使用 Cloudkit 的 Development 数据库工作时,切换到 Production 数据库以进行调试,因为当您将项目部署到 App Store 时,App Store(和 TestFlight)仅使用 Production数据库。

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

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

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

顺便说一句,在对 Xcode、iOS、CloudKit、我的 Xcode 项目设置(plist、权利文件、构建设置等),或重大的代码更改。

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

使用 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) 然后我将“Development”更改为“Production”作为 com.apple.developer.icloud-container-environment 在步骤 1 的权利文件中。在项目设置“菜单”的“功能”选项卡的 iClould 区域中,所有“框”仍然保持检查成功 然后该项目仍然编译成功。这一次,当我运行它连接到生产数据库的项目时!!!

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

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

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

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

【讨论】:

【参考方案2】:

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

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

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

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

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

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

【讨论】:

以上是关于CloudKit:部署到 AppStore 后访问开发环境?的主要内容,如果未能解决你的问题,请参考以下文章

将 iOS 应用从 Cloudkit 开发转移到生产

将应用程序部署到 App Store 后,Worklight 6.1 “访问受保护的服务被拒绝”

CloudKit:将记录从开发转移到生产

CloudKit“部署到生产”不显示记录更改,“部署”灰显

部署到生产:为啥 CloudKit 删除订阅类型?

CloudKit 支持应用程序开发到生产部署