Я пытаюсь сохранить данные из CloudKit
в формате c на нескольких устройствах. С помощью следующего кода я могу успешно добавлять, загружать и получать уведомления, когда запись была изменена в CloudKit
, моя проблема заключается в том, что это работает, только когда я использую симулятор для изменения данных и физическое устройство для просмотра уведомлений .
Вот как я это использую.
Я установил приложение в симуляторе и в iPhone.
Из симулятора I go и введите новый примечание / запись, и я получаю уведомление в iPhone, что я и хочу. Я также могу вводить записи непосредственно из CloudKit dashboard
, а также получать уведомления в iPhone.
Третий шаг, и что не работает, так это ... Я пошел iPhone моей жены, установил приложение из XCode и вошел в iTunes & App Store
с той же учетной записью, которую я использовал в симуляторе и на первом устройстве, где обновляются данные, затем я пошел и ввел данные в симуляторе и на сначала iPhone но я не получаю никаких уведомлений в iPhone моей жены. Я попытался ввести данные непосредственно в iPhone моей жены, и кажется, что данные сохраняются, поскольку я могу выйти из приложения, и данные не теряются. Итак, я получаю совершенно разные данные в обоих телефонах, в iPhone моей жены я вижу только то, что было введено непосредственно в этом телефоне, и в моем первом телефоне я вижу то, что было введено прямо там, в симуляторе или в CloudKit приборная панель.
Я, вероятно, неправильно понимаю всю экосистему и то, как она работает. Я ожидал, что на каждом телефоне с установленным приложением и входом в него с одинаковыми iTunes & App Store
учетными данными для входа будут видны обновления на всех устройствах.
В какой части я здесь недопонимаю?
Вот код:
Main ViewController
Добавление записей
public func saveNotestoCloud(){
let privateDatabase = CKContainer.default().database(with: .private)
if let title = self.textfield.text, let body = textView.text, let record = self.note?.record{
record["title"] = title
record["note"] = body
self.note?.record = record
privateDatabase.save(record) { (record,error) in
if let error = error{
print("Error \(error.localizedDescription)")
return
}
print("Successfully saved record \(record?.recordID.recordName ?? "")")
}
}
}
Делегат приложения
Регистрация уведомлений
let privateDatabase = CKContainer.default().database(with: .private)
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
self.createSubscriptions()
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]){ (granter, error) in
guard error == nil else{
print(error!)
return
}
}
application.registerForRemoteNotifications()
return true
}
private func createSubscriptions(){
let predicate = NSPredicate(value: true)
let subscription = CKQuerySubscription(recordType: "Notes",
predicate: predicate,
subscriptionID: "SubscriptionID",
options: [CKQuerySubscription.Options.firesOnRecordCreation, CKQuerySubscription.Options.firesOnRecordDeletion, CKQuerySubscription.Options.firesOnRecordUpdate])
let notificationInfo = CKSubscription.NotificationInfo()
notificationInfo.alertLocalizationKey = "New Note"
notificationInfo.shouldBadge = true
subscription.notificationInfo = notificationInfo
let privateData = CKContainer.default().database(with: .private)
privateData.save(subscription){ result, error in
if let error = error {
print(error.localizedDescription)
}
}
}