与WatchOS共享领域数据

Luk*_*579 4 realm ios swift watchkit watchos-3

在我的项目中,我想在我的iOS 10应用程序和我的watchOs 3应用程序中同时使用一个Realm数据库.所以我所做的是将框架添加到三个不同目标的嵌入式二进制文件中.这恰好工作得很好但是watchKit扩展似乎不能识别我在iOS环境中创建的对象.如何在这两个设备之间建立共享的Realm数据库?

TiM*_*TiM 5

更新: 好的,感谢chrisamanse的单挑,我对此做了更多的研究.

事实证明,watchOS 2上的应用程序组已不再可用.观看应用程序不再作为手机上的扩展程序运行; 它们现在是两个孤立的进程,没有任何共享资源.

因此,这意味着有必要在手表和手机上维护单独的Realm文件,并通过WatchConnectivity框架传达对其所做的任何更改.


原文: iOS应用程序和扩展(今日小部件和watchOS应用程序)需要被视为两个完全独立的实体,分别位于各自的容器中.默认情况下,扩展程序无法访问其父应用程序的容器内的任何文件.如果您要将Realm文件保存到默认路径(即"Documents"文件夹),那么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)
Run Code Online (Sandbox Code Playgroud)

Realm网站上一个教程,解释了如何更详细地完成这项工作,但是API和Swift版本在这一点上已经过时了.