#はじめに
(RealmデータをwatchOSとiOSとの間でやりとりする(1)の続きになります。)
watchOSとiOSとの間でRealmのデータをやりとりする実装方法について述べます。
watchOS2+、iOS9+、Swift 3を前提に話を進めます。
動作するコードをサンプルプロジェクトとしてGitHubに公開しました。実機でランすれば、速度感を体験できます。
#CocoaPodsでRealmを導入
RealmSwiftを利用したいので、CocoaPods 1.0.0以降では、Podfileを次のように記述します。
target 'SampleRealmOnWatchOS3' do
dynamic frameworks
use_frameworks!
pod 'RealmSwift'
end
target 'SampleWatchApp_Extension' do
use_frameworks!
platform :watchos, '2.0'
pod 'RealmSwift'
end
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = '3.0'
end
end
end
サンプルでは、SampleRealmOnWatchOS3
がiOSアプリのターゲット名、SampleWatchApp_Extension
がwatchOSアプリのものとなっています。
ターミナルからpod install
を実行して、正常終了すれば準備完了です。
これで、iOS/watchOSの双方でRealmSwiftをimportできるようになりました。
#Realmのデータモデルのソースファイルを共有する
iOS/watchOSでRealmのデータをやりとりするために、データモデルのSwiftファイルを共用できるようにする手順を見ていきます。
##1. publicでデータモデルを共用できるようにする
まず、データモデルをiOSアプリのターゲット向けに作成します。
サンプルでは、データモデルのクラスField
について、Field.swift
をiOSアプリのターゲットSampleRealmOnWatchOS3
向けに作成し、次のように定義しています。
import RealmSwift
public class Field: Object {
public dynamic var text: String?
}
アクセスコントロールをpublic
にしています。iOSアプリのターゲットSampleRealmOnWatchOS3
とwatchOSアプリのターゲットSampleWatchApp_Extension
は別のモジュールなので、この垣根を超えてソースを共用するために指定しています。
##2. Compile Sourcesに追加する
1.で作成した.swiftファイルはiOSアプリのターゲットSampleRealmOnWatchOS3
に帰属しています。ソース共用のためには、watchOSアプリの(正確にいうと、それが包含するエクステンションの)ターゲットSampleWatchApp_Extension
にもソースを帰属させる必要があります。
TARGETS→SampleWatchApp_Extension
→Build Phases→Compile Sources項目の中に、Field.swiftファイルをドラッグドロップして追加します。
これで、iOS/watchOSアプリが同じソースファイルをしてデータモデルを利用できるようになりました。