Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios HealthKit、核心数据和CloudKit_Ios_Swift_Core Data_Cloudkit_Healthkit - Fatal编程技术网

Ios HealthKit、核心数据和CloudKit

Ios HealthKit、核心数据和CloudKit,ios,swift,core-data,cloudkit,healthkit,Ios,Swift,Core Data,Cloudkit,Healthkit,我正在构建一个与HealthKit集成的健身应用程序。最后,我还希望使用CloudKit来a)允许数据冗余,但主要是b)提供一些社交功能,这些功能要求数据至少暂时在iCloud中 我希望能够完全依靠HealthKit获取应用程序中的数据,但我认为,在HealthKit权限被撤销或未被授予的情况下,有必要使用另一种数据模型来保存数据。为此,我选择坚持使用核心数据 我的问题是如何保持核心数据存储和HealthKit存储同步。我在GitHub上搜索了一个示例,并在此处搜索了相关问题,但找不到任何有用的

我正在构建一个与HealthKit集成的健身应用程序。最后,我还希望使用CloudKit来a)允许数据冗余,但主要是b)提供一些社交功能,这些功能要求数据至少暂时在iCloud中

我希望能够完全依靠HealthKit获取应用程序中的数据,但我认为,在HealthKit权限被撤销或未被授予的情况下,有必要使用另一种数据模型来保存数据。为此,我选择坚持使用核心数据

我的问题是如何保持核心数据存储和HealthKit存储同步。我在GitHub上搜索了一个示例,并在此处搜索了相关问题,但找不到任何有用的示例

最终,我会将核心数据中的数据与CloudKit同步,但核心数据中介真的有必要吗

关于应用商店审查指南27.3

使用HealthKit框架存储用户健康信息的应用程序 iCloud中的信息将被拒绝


我认为这意味着任何非应用程序创建的健康数据都不能存储在iCloud中。有许多应用程序将健康数据存储在第三方服务器(即RunKeeper)上。此外,如果没有HealthKit权限,我将被允许在iCloud中存储应用程序创建的健康数据。如果您从HealthKit获取第三方数据并尝试将其放入iCloud,您将被拒绝。

这里有几个问题,所以我将尝试按顺序回答它们

…如何保持核心数据存储和HealthKit存储同步?

因此,在获取数据更新时,您需要担心两种应用程序模式:前台和后台

在前台,您可以使用
HKObserverQuery
,这为您获取所需数据提供了相当大的灵活性。当跨线程边界传递数据时(在后台队列上运行观察者查询时),通常需要注意事项。相关文件:

在后台,您必须使用
enableBackgroundDeliveryForType(uquo:frequency:withCompletion:)
注册后台唤醒。这将以(或接近)指定的频率唤醒您的应用程序,此时您需要跳过任何必要的限制来加载核心数据堆栈并进行更新。相关文件:

…核心数据中介真的有必要吗?

不,事实上,使用核心数据对于您的使用来说可能是完全过度的。我通常建议不要在应用程序开始时实现核心数据。还有性能问题、后台唤醒问题、更改模式时的模式迁移问题,以及iCloud核心数据同步问题(其中大部分问题在iOS 9中已经解决,但仍然偶尔出现)

最重要的是,苹果在新项目中包含核心数据的“模板”通常没有遵循集成核心数据的最佳实践指南。做一些谷歌搜索,看看马库斯·扎拉关于这个主题的书

综上所述,不使用核心数据意味着必须编写更多的代码才能使iCloud与您选择的数据存储同步,因此很难就“正确”的路线提出建议

我认为这意味着任何非应用程序创建的健康数据都不能存储在iCloud中。

不对。从表面上看这条线。如果苹果看到你请求访问HealthKit,并提供了iCloud访问权限,你可能会受到审查,很可能会被拒绝。在这方面,他们对用户隐私非常敏感,我认为这是正确的

你关于Runkeeper的说明虽然准确,但也有缺陷,因为Runkeeper(上次我检查)不使用iCloud,因此不受此限制,所以这个类比是有缺陷的。此外,根据苹果的其他指南,无论其他应用程序做什么或不做什么,都不会影响你的应用程序的审查状态


简言之,我将避免在iCloud中存储用户的健康数据。使用其他提供商或您自己的服务器。

这里有几个问题,所以我将尝试按顺序回答它们

…如何保持核心数据存储和HealthKit存储同步?

因此,在获取数据更新时,您需要担心两种应用程序模式:前台和后台

在前台,您可以使用
HKObserverQuery
,这为您获取所需数据提供了相当大的灵活性。当跨线程边界传递数据时(在后台队列上运行观察者查询时),通常需要注意事项。相关文件:

在后台,您必须使用
enableBackgroundDeliveryForType(uquo:frequency:withCompletion:)
注册后台唤醒。这将以(或接近)指定的频率唤醒您的应用程序,此时您需要跳过任何必要的限制来加载核心数据堆栈并进行更新。相关文件:

…核心数据中介真的有必要吗?

不,事实上,使用核心数据对于您的使用来说可能是完全过度的。我通常建议不要在应用程序开始时实现核心数据。还有性能问题、后台唤醒问题、更改模式时的模式迁移问题,以及iCloud核心数据同步问题(其中大部分问题在iOS 9中已经解决,但仍然偶尔出现)

最重要的是,苹果在新项目中包含核心数据的“模板”通常没有遵循集成核心数据的最佳实践指南。做一些谷歌搜索,看看马库斯·扎拉关于这个主题的书

综上所述,不使用核心数据意味着必须编写更多的代码才能使iCloud与您选择的数据存储同步,所以这很困难