Simperiumはコアデータの軽量移行をうまく処理できるはずだという別の回答を読みました。ただし、現在、(オプションの) プロパティを既存のエンティティに追加する単純なケースに苦労しています。
問題を理解しやすくするために、例を見てみましょう。以前のアプリ バージョンが 1.0 で、新しいバージョン 1.1foo
がコア データ エンティティに新しいプロパティを導入したとします。
では、次のシナリオを考えてみましょう。
- デバイス A と B は両方ともバージョン 1.0 を実行し、同じ Simperium 同期アカウントに接続されており、どちらも最新です。
foo
デバイス A がバージョン 1.1 にアップグレードされ、プロパティがデータベースに作成され、ユーザーが新しいプロパティにデータを追加します。このデータは Simperium バックエンドに正しく同期されfoo
、Web データ ブラウザーに表示されます。- デバイス B (まだバージョン 1.0、つまり なし
foo
) は Simperium と同期します。この時点で が表示されますが、これは存在しないSimperium warning: applyDiff for a member that doesn't exist
ため理解できます。foo
ここではまだすべてが期待されており、問題ありません。 - ここで、デバイス B が 1.1 にアップグレードされます。アプリを初めて起動すると、Core Data によって新しい
foo
列が作成されます。ただし、foo
プロパティがそこにあるため、Simperium はまだバックエンドからデータを取得しないため、デバイス A と B はfoo
!の同じデータを認識しません。
これが発生する理由を理解しています (Simperium は最初に変更を破棄しました。これは、プロパティがまだ存在していなかったためです。その後、可能になったときに同じ変更を再度適用しません)。しかし、これは非常に問題があり、事実上、データ モデルへの最も単純な変更でさえも非常に危険なものにしていると思います。ここで何か不足していますか?新しいプロパティをエンティティに追加する安全な方法は何ですか?