2016-09-22 14 views
4

私のプロジェクトでは、iOS 10アプリケーションとwatchOs 3アプリケーションを同時に使用して1つのRealm Databaseを使用したいと考えています。だから私がしたのは、3つの異なるターゲット用の組み込みバイナリにフレームワークを追加することでした。これはうまくいきましたが、watchKit拡張機能は、iOS環境内で作成したオブジェクトを認識していないようです。これらの2つのデバイス間で共有レルムデータベースを使用することはどのように可能ですか?RealosデータをWatchOSと共有する

答えて

5

更新: さて、chrisamanseのヘッドアップのおかげで、私はこの上でいくつかのより多くの研究をしました。

watchOS 2ではApp Groupsが使用できなくなっていることが判明しました。ウォッチアプリは、電話機の内線として実行されなくなりました。共有リソースを持たない2つの独立したプロセスになりました。

このように、これは時計と電話機の両方に別々のレルムファイルを保持し、いずれかの変更をWatchConnectivityフレームワークを通じて伝達する必要があることを意味します。


オリジナル: のiOSアプリケーションや拡張機能(今日のウィジェットやwatchOSのアプリの両方)は、独自の別々の容器に2つの完全に独立したエンティティとして検討する必要があります。デフォルトでは、拡張機能は親アプリケーションのコンテナ内のファイルにアクセスできません。 Realmファイルをデフォルトパス( 'Documents'フォルダ)に保存している場合、そこからwatchOSアプリケーションがアクセスする方法はありません。

ありがたいことに、iOSの 'App Groups'機能を使用して、親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) 

しかしAPIとスウィフトのバージョンは、この時点で期限が切れている、より詳細にこの作業を行う方法について説明しa tutorial on the Realm websiteがあります。

+0

watchOS 2.0のように、アプリケーショングループはもはや適用されません。 https://forums.developer.apple.com/thread/3927 – chrisamanse

+0

唯一の選択肢は、 'WatchConnectivity'フレームワークの使用です。 – chrisamanse

+0

ああ!それが私にとってのニュースです!ヘッドアップありがとう! – TiM

0

がスイフト

についてIアプリとアプリ拡張の間dbのレルムを共有するために、次のコードを使用する:

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) 
関連する問題