LoginSignup
8
9

More than 5 years have passed since last update.

MagicalRecordでiCloudを使う

Last updated at Posted at 2014-10-11

MagicalRecordでiCloud使うのが大変だったのでメモ。つーかMagicalRecordのバグだなこれ(#749, #787)。

手順

Devleoper CenterでAppの設定

Identifiers -> App IDsから任意のアプリを選択してiCloudを有効にする。

kobito.1412996179.616869.png

CapabilitiesでiCloudの設定

Servicesは iCloud Documents を選択。Containerは Use default container を使います。

kobito.1412996036.513826.png

CloudKitをリンクする

kobito.1412996108.087771.png

CoreDataスタックを初期化する

MagicalRecordでiCloudを利用するように初期化する。iCloudを含めて初期化するメソッドはいくつかあるが MagicalRecord:setupCoreDataStackWithiCloudContainer:contentNameKey:localStoreNamed:cloudStorePathComponent:を使う。ちなみにMagicalRecord:setupCoreDataStackWithiCloudContainer:localStoreNamed:は使えませんでした。

// このメソッドは使えない
//[MagicalRecord setupCoreDataStackWithiCloudContainer:@"iCloud.com.example.Example"
//                                     localStoreNamed:@"Example"];

// こっちを使う
[MagicalRecord setupCoreDataStackWithiCloudContainer:@"iCloud.com.example.Example"
                                      contentNameKey:@"Example"
                                     localStoreNamed:@"Example.sqlite"
                             cloudStorePathComponent:nil];

同じアプリを複数のデバイスにインストールして確認する

同じアプリを複数のデバイスにインストールしてデータを更新します。もう一方のデバイスでアプリを立ち上げると、同じデータがコピーされます。タイミング等はよくわからない。

MagicalRecordのバグ?

MagicalRecord:setupCoreDataStackWithiCloudContainer:localStoreNamed:は最初の引数にiCloudコンテナIDを渡す。内部的にPFUbiquitySetupAssistantクラスを呼び出してオプションとしてコンテナIDを渡すのだが、PFUbiquitySetupAssistantのオプションはピリオドを受け付けないのでエラーになる。

MagicalRecord:setupCoreDataStackWithiCloudContainer:contentNameKey:localStoreNamed:cloudStorePathComponent:は直接コンテナ名を渡すことが出来るのでこちらで代用している。

MagicalRecordのバグのようなので将来的には修正されるかもしれない(チケット無かったら上げておきます)。

参考

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9