Синхронизация iCloud работает на iPhone и Mac, но не на iPad

#swift #core-data #icloud #cloudkit #nspersistentcloudkitcontainer

#swift #core-данные #icloud #cloudkit #nspersistentcloudkitcontainer

Вопрос:

Я обнаружил странную проблему с синхронизацией iCloud.

Ситуация: я разработал приложение для iOS, iPadOS и macOS с использованием SwiftUI. Все три версии используют одну и ту же кодовую базу (версия macOS — это версия Catalyst для iPad). Проект поддерживает синхронизацию iCloud с помощью функции NSPersistenceCloudKitContainer синхронизации данных между всеми 3 устройствами.

Проблема: синхронизация iCloud отлично работает между моим iPhone и моим Mac, но при использовании его с моим iPad я сталкиваюсь с действительно странной проблемой. При создании нового объекта CoreData на моем iPad он появится на других моих устройствах через несколько секунд, что совершенно нормально. Однако при создании объекта CoreData на моем iPhone или Mac он не появится на iPad (я ждал 10 минут). Объект появится только при закрытии и повторном открытии приложения.

Подробности: мне даже не нужно полностью выходить из приложения. Достаточно просто провести пальцем вверх до средства выбора приложений и снова выбрать приложение.

Вопрос: У кого-нибудь есть идея или что-то, что может вызвать эту странную ошибку? И помните: все три устройства используют одну и ту же кодовую базу.

Ответ №1:

Убедитесь, что вы включили Push-уведомления и удаленные уведомления в соответствии с документацией Apple

 Project Settings > Signing and Capabilities 
 

Синхронизируйте CoreData с CloudKit с помощью

 try? persistentContainer.viewContext.setQueryGenerationFrom(.current)
 

Комментарии:

1. предполагается ли это попробовать до loadPersistentStores или после?

2. Я поставил это после. итак, контекст готов.