2016-09-22 10 views
4

В моем проекте я хочу использовать одну базу данных Realm с моим приложением iOS 10 и моим приложением watchOs 3 одновременно. Итак, я сделал добавление фреймворков во встроенные двоичные файлы для трех разных целей. Это произошло очень хорошо, но расширение watchKit, похоже, не распознает объекты, которые я создал в среде iOS. Как возможно иметь общую базу данных Царства между этими двумя устройствами?Поделиться данными в реальном времени с WatchOS

ответ

5

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 версии являются устаревшими на данный момент. не

+0

По watchOS 2,0, App группы больше не применяется. https://forums.developer.apple.com/thread/3927 – chrisamanse

+0

Единственный выбор, который у нас есть, - использование рамки 'WatchConnectivity'. – chrisamanse

+0

О! Это новости для меня! Спасибо за хедз-ап! – TiM

0

Для 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)