2016-05-31 8 views
1

Я создаю приложение для фитнеса с интеграцией HealthKit. В конечном итоге я хотел бы использовать CloudKit, а также: a) разрешить избыточность данных, но в основном b) предоставить несколько социальных функций, которые требуют, чтобы данные были в iCloud по крайней мере временно.HealthKit, Core Data и CloudKit

Я хочу, чтобы иметь возможность полагаться исключительно на HealthKit для данных в приложении, но чувствую, что альтернативная модель данных необходима для сохранения данных, если разрешения HealthKit отменены или не указаны в первую очередь. Я решил использовать Core Data для этого.

Мой вопрос в том, как я могу синхронизировать хранилище Core Data и хранилище HealthKit. Я искал пример на GitHub и связанные с ним вопросы, но не могу найти полезных примеров.

В конечном итоге я буду синхронизировать данные в Core Data с CloudKit, но действительно ли необходим посредник Core Data?

Что касается Руководства по рассмотрению Маркет 27,3

Apps с помощью платформы HealthKit, которые хранят здоровье информации о местонахождении пользователей в ICloud будет отклонено

Я принимаю это означает, что любые данные Здоровья который не был создан вашим приложением, не может быть сохранен в iCloud. Существует множество приложений, которые хранят данные о работоспособности на стороннем сервере (т. Е. RunKeeper). Кроме того, без разрешений HealthKit мне будет разрешено хранить данные о работоспособности, созданные моим приложением в iCloud. Если вы берете данные сторонних производителей из HealthKit и пытаетесь поместить их в iCloud, вы будете отклонены.

ответ

2

Здесь есть пара вопросов, поэтому я постараюсь ответить им по порядку.

... как я могу синхронизировать хранилище Core Data и мой магазин HealthKit?

Итак, есть два режима приложений, о которых вам нужно беспокоиться о получении обновлений данных: переднем плане и фоновом режиме.

Если на переднем плане вы можете использовать HKObserverQuery, который обеспечивает достаточную гибкость в получении необходимых данных. Обычные оговорки применяются при передаче данных через границы потоков (поскольку запросы наблюдателей выполняются в фоновых очередях). Перспективные документы: HKObserverQuery Docs

В фоновом режиме вам необходимо зарегистрироваться для пробуждения в фоновом режиме с использованием enableBackgroundDeliveryForType(_:frequency:withCompletion:). Это пробудит ваше приложение на (или близком к) указанной частоте, после чего вам нужно будет перепрыгнуть через все необходимые обручи, чтобы загрузить стек Core Data и выполнить ваши обновления. Перспективные документы: HKHealthStore Background Handling Docs

... действительно ли необходим посредник по основным данным?

Нет, и на самом деле использование основных данных может быть полным излишним для ваших целей. Обычно я рекомендую не применять Core Data в начале приложения. Существуют проблемы с производительностью, проблемы с обратным фоном, проблемы миграции схемы при изменении схем и iCloud <> Проблемы синхронизации с Core Data (большинство из них были разрешены как с iOS 9, но все же появляются иногда).

Помимо всего прочего, «шаблон» Apple для включения основных данных в новый проект обычно не соответствует рекомендациям по лучшей практике для интеграции Core Data.Сделайте некоторые поиски Google и взгляните на книги Маркуса Зарры по этому вопросу.

Это все сказанное, не с использованием основных данных означает, чтобы писать кучу больше кода, чтобы позволить ICloud для синхронизации с хранилищем данных по выбору, так что трудно предложить предложение, как к «правильному» пути взять ,

Я предполагаю, что любые данные о здоровье, которые не были созданы вашим приложением, не могут храниться в iCloud.

Неверный. Возьмите линию по номинальной стоимости. Если Apple увидит, что вы запросили доступ к HealthKit и предоставили доступ iCloud, вы, вероятно, будете тщательно изучены и, скорее всего, отвергнуты. Они очень трогательны в отношении конфиденциальности пользователей в этом отношении, и правильно это, на мой взгляд.

Ваша заметка о Runkeeper, в то время как точна, также ошибочна, так как Runkeeper (последний раз я проверял) не использует iCloud и поэтому не подлежит этому, поэтому аналогия неверна. Кроме того, согласно другим рекомендациям Apple, независимо от того, что делают или не делают другие приложения, не влияет на статус проверки вашего приложения.

Короче говоря, я бы избежал хранения данных о здоровье пользователей в iCloud. Используйте другого поставщика или собственный сервер.

+0

Мне кажется странным, что вы можете хранить данные о состоянии здоровья, но не данные о здоровье, в iCloud. Возможно, по слухам, более сильная безопасность в iCloud изменит это правило. Благодарим вас за тщательный ответ. – jjatie

+0

Несомненно, да, я согласен, что это странно, но пока они не усилят безопасность в iCloud, я лично не хочу, чтобы мои данные о здоровье были там :) –