В моем проекте я хочу использовать одну базу данных Realm с моим приложением iOS 10 и моим приложением watchOs 3 одновременно. Итак, я сделал добавление фреймворков во встроенные двоичные файлы для трех разных целей. Это произошло очень хорошо, но расширение watchKit, похоже, не распознает объекты, которые я создал в среде iOS. Как возможно иметь общую базу данных Царства между этими двумя устройствами?Поделиться данными в реальном времени с WatchOS
ответ
Update: Хорошо, спасибо chrisamanse «s хедз-апе, я сделал некоторые дополнительные исследования по этому вопросу.
Оказалось, что группы приложений больше не доступны на watchOS 2. Наблюдение за тем, что приложения больше не работают как расширения на телефоне; теперь они представляют собой два изолированных процесса без каких-либо общих ресурсов.
Как таковой, это означает, что необходимо будет поддерживать отдельный файл Realm как на часах, так и на телефоне и сообщать о любых изменениях, сделанных либо в рамках WatchConnectivity.
Оригинал: IOS приложения и расширения (как сегодня виджеты и watchOS приложения) должны рассматриваться как два совершенно отдельных субъектов в своих отдельных контейнерах. По умолчанию расширение не может получить доступ к файлам внутри контейнера своего родительского приложения. Если вы сохраняете файл Realm в путь по умолчанию (т. Е. В папке «Документы»), у приложения watchOS нет доступа к нему.
К счастью, можно использовать функцию «Группы приложений» для iOS, чтобы указать общую папку, к которой могут обращаться как родительское приложение iOS, так и приложение watchOS, и могут читать и записывать любые файлы Realm, которые там есть.
После того, как вы включили право на использование App Groups
в своем приложении, вам необходимо указать местоположение вашего файла Realm, чтобы указать на это местоположение.
let sharedContainerURL = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.my.appgroups.bundleid")!
let realmURL = sharedContainerURL.appendingPathComponent("SharedRealm.realm")
let realmConfiguration = Realm.Configuration()
realmConfiguration.fileURL = realmURL
let realm = try! Realm(configuration: realmConfiguration)
Там же a tutorial on the Realm website, что объясняет, как сделать эту работу более подробно, однако API и Swift версии являются устаревшими на данный момент. не
Для Swift 3
Я использовал следующий код для обмена Realm дб между приложением и приложения расширения:
let sharedDirectory: URL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.your.app")! as URL
let sharedRealmURL = sharedDirectory.appendingPathComponent("db.realm")
Realm.Configuration.defaultConfiguration = Realm.Configuration(fileURL: sharedRealmURL)
По watchOS 2,0, App группы больше не применяется. https://forums.developer.apple.com/thread/3927 – chrisamanse
Единственный выбор, который у нас есть, - использование рамки 'WatchConnectivity'. – chrisamanse
О! Это новости для меня! Спасибо за хедз-ап! – TiM