我正在使用HealthKit集成构建健身应用程序。最后我还想使用CloudKit来a)允许数据冗余,但主要是b)提供一些社交功能,这些功能要求数据至少暂时存在于iCloud中。
我希望能够完全依赖HealthKit来获取应用程序内的数据,但是我觉得有必要使用备用数据模型来保存数据,因为HealthKit权限首先被撤销或不被授予。我选择坚持使用Core Data。
我的问题是如何让我的Core Data商店和HealthKit商店保持同步。我在这里搜索了一个关于GitHub和相关问题的例子,但找不到任何有用的例子。
最终,我将使用CloudKit同步Core Data中的数据,但核心数据中介是否真的有必要?
关于App Store评论指南27.3
使用HealthKit框架存储用户健康状况的应用程序 iCloud中的信息将被拒绝
我认为这意味着您的应用程序未创建的任何健康数据都无法存储在iCloud中。有许多应用程序将健康数据存储在第三方服务器(即RunKeeper)上。此外,如果没有HealthKit权限,我将被允许存储我的应用程序在iCloud中创建的健康数据。如果您从HealthKit获取第三方数据并尝试将其放入iCloud,那么您将被拒绝。
答案 0 :(得分:4)
这里有几个问题,所以我会尝试按顺序回答它们。
...如何让我的Core Data商店与HealthKit商店保持同步?
因此,您需要担心两种应用程序模式以获取数据更新:前景和后台。
在前台时,您可以使用HKObserverQuery
,它可以灵活地获取您需要的数据。通过线程边界传递数据时通常需要注意(因为观察者查询在后台队列上运行)。相关文档:HKObserverQuery Docs
在后台,您必须使用enableBackgroundDeliveryForType(_:frequency:withCompletion:)
注册后台唤醒。这会将您的应用程序唤醒(或接近)指定的频率,此时您需要跳过任何必要的箍来加载您的Core Data堆栈并进行更新。相关文档:HKHealthStore Background Handling Docs
...核心数据中介真的有必要吗?
不,实际上使用核心数据可能会对您的使用造成过度杀伤。我通常建议不要在应用程序开始时实现Core Data。存在性能问题,后台唤醒问题,更改架构时的架构迁移问题以及iCloud<>核心数据同步问题(大多数问题已从iOS 9开始解决,但偶尔会出现问题)。
最重要的是,Apple在新项目中包含Core Data的“模板”通常不遵循集成Core Data的最佳实践指南。做一些Google搜索,看看Marcus Zarra关于这个主题的书籍。
所有人都说,不使用核心数据意味着必须编写更多代码才能使iCloud与您选择的数据存储同步,因此很难提供关于“正确”的建议“采取的路线。
我认为这意味着您的应用未创建的任何健康数据都无法存储在iCloud中。
不正确的。以面值取线。如果Apple看到您已经请求访问HealthKit并且已经配置了iCloud访问权限,那么您可能会被仔细检查并且很可能被拒绝。在这方面,他们对用户隐私非常敏感,在我看来也是如此。
关于Runkeeper的说明虽然准确,但也有缺陷,因为Runkeeper(我最后检查过)不使用iCloud,因此不会受此影响,因此这个类比是有缺陷的。此外,根据Apple的其他指南,无论其他应用程序做什么或不做什么都不会影响您的应用程序的审核状态。
简而言之,我不想在iCloud中存储用户的健康数据。使用其他提供商或您自己的服务器。