Обмен основными данными с CloudKit: невозможно принять совместное использованиеIOS

Программируем под IOS
Ответить
Anonymous
 Обмен основными данными с CloudKit: невозможно принять совместное использование

Сообщение Anonymous »

Мое приложение работало с Core Data, затем с CloudKit для синхронизации между устройствами, и теперь я хотел бы обмениваться данными между пользователями. Я посмотрел оба приложения «Создание приложений, которые обмениваются данными через CloudKit и Core Data», а также «Что нового в CloudKit WWDC21» и подумал, что понял концепции. CloudKit использует совместное использование зон и CKShares для управления общим доступом, а Core Data прикрепляется к этой реализации изначально в iOS15.
Я настраиваю свой стек Core Data следующим образом:

Код: Выделить всё

/// Configure private store
guard let privateStoreDescription: NSPersistentStoreDescription = persistentContainer.persistentStoreDescriptions.first else {
Logger.model.error("Unable to get private Core Data persistent store description")
return
}
privateStoreDescription.url = inMemory ? URL(fileURLWithPath: "/dev/null") : privateStoreDescription.url?.appendingPathComponent("\(containerIdentifier).private.sqlite")
privateStoreDescription.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
privateStoreDescription.setOption(true as NSNumber, forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey)
persistentContainer.persistentStoreDescriptions.append(privateStoreDescription)

/// Create shared store
let sharedStoreDescription: NSPersistentStoreDescription = privateStoreDescription.copy() as! NSPersistentStoreDescription
sharedStoreDescription.url = sharedStoreDescription.url?.appendingPathComponent("\(containerIdentifier).shared.sqlite")
let sharedStoreOptions = NSPersistentCloudKitContainerOptions(containerIdentifier: containerIdentifier)
sharedStoreOptions.databaseScope = .shared
sharedStoreDescription.cloudKitContainerOptions = sharedStoreOptions
persistentContainer.persistentStoreDescriptions.append(sharedStoreDescription)
persistentContainer.loadPersistentStores(...)
Реализовано принятие пользователем SceneDelegate:

Код: Выделить всё

func windowScene(_ windowScene: UIWindowScene, userDidAcceptCloudKitShareWith cloudKitShareMetadata: CKShare.Metadata) {
let container = PersistenceController.shared.persistentContainer
let sharedStore = container.persistentStoreCoordinator.persistentStores.first!
container.acceptShareInvitations(from: [cloudKitShareMetadata], into: sharedStore, completion: nil) //TODO: Log completion
}
Однако после публикации NSObject как такового в моем пользовательском интерфейсе с помощью UICloudSharingController, как показано ниже:

Код: Выделить всё

let object: NSObject = // Get Object from view context
let container = PersistenceController.shared.persistentContainer
let cloudSharingController = UICloudSharingController { (controller, completion: @escaping (CKShare?, CKContainer?, Error?) -> Void) in
container.share([object], to: nil) { objectIDs, share, container, error in
completion(share, container, error)
Logger.viewModel.debug("Shared \(household.getName())")
}
}
cloudSharingController.delegate = self
self.present(cloudSharingController, animated: true) {}
Мой метод SceneDelegate никогда не вызывается, и я получаю следующее предупреждение, когда нажимаю приглашение в приложении сообщений. Я не совсем понимаю, что в этом случае не так, поскольку на консоли разработчика CloudKit я вижу объект в частной базе данных с зоной com.apple.coredata.cloudkit.share.[UUID]. Я еще не выпустил приложение, поэтому не уверен, откуда оно получает информацию о версии, поскольку оба приложения были запущены из отладчика Xcode (одна и та же версия и сборка). Кроме того, мне не удалось найти ссылку на это предупреждение по другим вопросам, поэтому любые советы, предложения или помощь приветствуются, поскольку я застрял на этом на несколько вечеров. Пожалуйста, дайте мне знать, если есть дополнительная информация, которая могла бы пролить свет на эту проблему.
Изображение


Подробнее здесь: https://stackoverflow.com/questions/708 ... cept-share
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»