22
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Swift] iCloudと local(UserDefaults)を同期するライブラリ

Last updated at Posted at 2016-10-25

[17/7/6追記] Swift4に対応・確認しました。
[17/5/20追記] iOS 10.3.1, macOS Sierra 10.12.4で動作確認しました。

MKiCloudSyncというライブラリがあります。
簡単に local (UserDefaults)と iCloud (NSUbiquitousKeyValueStore)を同期してくれる優れものです。アプリ/デバイス間で少量データを授受するのに便利です。
しかしながら、本家が Objective-Cである+機能追加 のため、Swiftで書き直し UbiquitousSyncを作成しました。

インストール

Github UbiquitousSync
Share moduleフォルダー内の UbiquitousSync.swift を Dragして Xcode projectに追加してください。

使用方法

基本

startWithPrefix()

  • アプリ初期処理 (AppDelegateなど)で、UbiquitousSync.startWithPrefix() をコール。
  • Keyに “iCloud_” prefixを持つ UserDefaults項目の初期値が iCloudよりロードされます。
  • 以降、当該 Keyの UserDefaults項目に書き込みがあれば、iCloud側も同期して変更します。
  • iCloud側で変更があった場合は UserDefaultsを更新し、Notification (kUbiquitousSyncNotification)が発生します。userInfoで変更のあった Keyを通知します。

オプション

startWithPrefix(prefixToSync:String, restore:Bool)

  • prefixToSync Keyプリフィックス変更 (defaultは “iCloud_” )
  • restore==true (default) 初期処理で iCloud (NSUbiquitousKeyValueStore)値を UserDefaultsにロードする、restore==false ロードしない。

removeiCloudItems4Debug(prefix:String, cloud:Bool, local:Bool)

  • prefixToSync 同期 Keyプリフィックス変更, 指定する場合は startWithPrefix で同じとしてください。cloud / local 各々 NSUbiquitousKeyValueStore / UserDefaultsの内容を削除します。
  • removeiCloudItems4Debugは startWithPrefixより前にコールしてください。
  • デバッグ用です。

MKiCloudSyncとの仕様差異

  • 初期処理で iCloud の値を localにローディングするようにしました。startWithPrefix restore=false でオリジナル相当になります。
  • Notificationで変更項目の Keyを渡します。
  • オーバヘッドの削減のため、変更項目のみ書き換えるようにしました。
  • iCloud (NSUbiquitousKeyValueStore)と local (UserDefaults)の項目を初期化できます。

デモ・プロジェクト

  • 数字を +/- するだけの iOS/macOSデモアプリです。
  • 開発環境: Xcode9 beta2, Swift4。
  • 動作環境: iOS11 beta2 (iOS simulator), 10.3.2 (iPhone5), macOS Sierra 10.12.5 (iMac), High Sierra 10.13 beta2 (mac book air) で確認しています。
  • iOSシミュレータでは、simulator->iCloud 方向にしか動作しません。
  • 一般的な NSUbiquitousKeyValueStore設定方法は、Appleの sample PrefsInを参照ください。

その他

  • iCloudの同期遅延が大きいです。1分前後かかることもあります。
  • “UbiquitousSync”というクラス名は命名則違反かも?気持ちが悪ければ変更してください。
  • 前述の通り、本ライブラリの基本的なアイディアは MKiCloudSyncに依ります。CopyrightとCreditに関し作者 Kumar氏に連絡し了解をいただいております。
22
21
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
22
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?