#swift #xcode #cloudkit #mac-catalyst
#swift #xcode #cloudkit #mac-catalyst
Вопрос:
Мое приложение получает CKQueryNotification
от CKQuerySubscription
обычно на iOS или iPadOS, но с MacCatalyst с тем же идентификатором пакета (сгенерированным из Xcode 11.6), оно никогда не получает CKQueryNotification
, даже если
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
вызывается должным образом при запуске приложения — всякий раз, когда происходит изменение записи в CloudKit, метод
func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Swift.Void)
никогда не запускается при сборке MacCatalyst, в то время как в iOS он запускается немедленно.
Есть идеи, почему? На форуме Apple есть тема, но пока не вижу решения:https://developer.apple.com/forums/thread/125069
Ответ №1:
Для всех, кто также сталкивается с этой проблемой при разработке вашего приложения, я решил опубликовать приложение в любом случае и обнаружил, что в версии App Store на Mac приложение catalyst на самом деле может получать уведомления почти немедленно. Похоже, это ошибка среды отладки для CloudKit.
Ответ №2:
Вы предоставляете недостаточно кода, чтобы мы могли вам помочь, поэтому я попробую предположить. Попробуйте определить ваши значения notificationInfo следующим образом и посмотрите, имеет ли это значение. Внутри didRegisterForRemoteNotifications:
// This is your subscription object
let subscription = CKQuerySubscription(recordType: "Subscription", predicate: NSPredicate(format: "TRUEPREDICATE"), options: [.firesOnRecordCreation, .firesOnRecordUpdate])
// Here we customize the notification message
let info = CKSubscription.NotificationInfo()
info.shouldSendContentAvailable = true
info.desiredKeys = ["identifier", "title", "date"]
info.soundName = ""
info.alertBody = ""
info.title = ""
info.alertActionLocalizationKey = ""
// Assign the notification info to your subscription
subscription.notificationInfo = info
Комментарии:
1. Извините, я уже делаю это, и db.fetchAllSubscriptions правильно возвращает подписки