2016-05-31 149 views
1

我正在構建一個HealthKit集成的健身應用程序。最終,我還希望使用CloudKit來a)允許數據冗餘,但主要是b)提供一些社交功能,這些功能至少需要暫時在iCloud中存儲數據。HealthKit,Core Data和CloudKit

我希望能夠完全依賴HealthKit來處理應用程序中的數據,但覺得需要備用數據模型才能保存數據,因爲HealthKit權限首先被撤銷或不提供。我選擇堅持使用Core Data。

我的問題是如何保持我的核心數據存儲和我的HealthKit存儲保持同步。我在GitHub上搜索了一個例子,並在這裏找到了相關的問題,但是找不到任何有用的例子。

最終我會將Core Data中的數據與CloudKit同步,但核心數據中介是否真的有必要?

隨着使用存儲用戶的iCloud中的健康 信息將被拒絕

我採取這種HealthKit框架問候的App Store審查指南27.3

應用意味着任何健康數據這不是由您的應用程序創建的,不能存儲在iCloud中。有許多應用程序將健康數據存儲在第三方服務器上(即RunKeeper)。另外,如果沒有HealthKit權限,我將被允許將我的應用創建的健康數據存儲在iCloud中。如果您從HealthKit獲取第三方數據並嘗試將其添加到iCloud中,那麼您將被拒絕。

回答

2

這裏有幾個問題,所以我會盡量按順序回答。

...我該如何着手讓Core Data Store和HealthKit store保持同步?

所以有兩種應用模式您需要擔心獲取數據更新:前景和背景。

在前臺時,您可以利用HKObserverQuery,它在獲取所需數據方面提供了相當大的靈活性。在跨線程邊界傳遞數據時(如觀察者查詢在後臺隊列上運行),通常需要注意的事項。相關文檔:HKObserverQuery Docs

在後臺您必須使用enableBackgroundDeliveryForType(_:frequency:withCompletion:)註冊後臺喚醒。這將以指定的頻率(或接近)喚醒您的應用程序,此時您需要跳過任何必要的環節來加載Core數據堆棧並進行更新。相關文件:HKHealthStore Background Handling Docs

...核心數據中介是否真的有必要?

不,實際上使用核心數據可能是完全矯枉過正的用途。我通常建議不要在應用程序開始時實施Core Data。有性能問題,背景喚醒問題,更改模式時的模式遷移問題,以及iCloud核心數據同步問題(其中大部分問題已在iOS 9中解決,但偶爾會出現問題)。除此之外,蘋果公司將「核心數據」納入新項目的「模板」通常並不遵循集成核心數據的最佳實踐指導原則。做一些谷歌搜索,看看Marcus Zarra關於這個主題的書籍。

這一切都表示,使用核心數據意味着必須寫一堆更多的代碼來實現的iCloud與您所選擇的數據存儲同步,所以它很難提供建議,以「正確的」路線走。

我認爲這意味着任何不是由您的應用程序創建的健康數據都不能存儲在iCloud中。

不正確。採取面值的線。如果Apple發現您已請求訪問HealthKit並已配置了iCloud訪問權限,那麼您可能要仔細檢查並最有可能被拒絕。他們對這方面的用戶隱私非常敏感,在我看來也是如此。

您的筆記關於Runkeeper,雖然準確,但Runkeeper(最後一次檢查)也沒有使用iCloud,因此不會受此影響,因此類比是有缺陷的。此外,根據Apple的其他指導原則,任何其他應用程序做或不做的事情都不會影響您的應用程序的審閱狀態。

總之,我會避免將用戶的健康數據存儲在iCloud中。使用其他提供商或您自己的服務器。

+0

我發現奇怪的是,您可以在iCloud中存儲健康數據,但不是健康數據。傳聞中iCloud更強大的安全性可能會改變這一規則。謝謝你的徹底迴應。 – jjatie

+0

當然,是的,我同意這很奇怪,但直到他們加強了iCloud的安全性,我個人不希望我的健康數據在那裏:) –