6

私のアプリは、iCloud をバックエンドとして CoreData を使用しています。したがって、複数のデバイスが iCloud データベースにアクセスできます.public
ローカルの CoreData ストアは、NSPersistentCloudKitContainer. Apple の提案
に従って、履歴追跡を使用しています。 そこで、Apple は可能な限り履歴を削除することを提案しています。彼らが言うには

永続的な履歴追跡トランザクションはディスク上のスペースを占有するため、不要になったトランザクションを削除するためのクリーンアップ戦略を決定します。履歴をプルーニングする前に、単一のゲートキーパーが、アプリとそのクライアントが必要な履歴を消費したことを確認する必要があります。

もともとこれは、 26 :10 から始まるWWDC 2017 トークでも提案されていました。

私の質問は次のとおりです。この単一のゲートキーパーを実装するにはどうすればよいですか?

アプリのすべてのユーザーがデバイスを最後に同期した時刻を単一のインスタンスが認識しているという考えだと思います。その場合、この日付より前のトランザクションの履歴は削除できます。
しかし、ユーザーがローカル データを同期した後、アプリを長期間使用しなくなった場合はどうなるでしょうか。この場合、このユーザーがローカル データを再度同期するまで、履歴を整理することはできません。したがって、履歴データは任意に大きくなる可能性があります。これは、解決方法がわからない中心的な問題のように思えます。

上記のAppleのドキュメントは次のことを示唆しています:

履歴のフェッチと同様に、deleteHistory(before:) を使用して、トークン、トランザクション、または日付より古い履歴を削除できます。たとえば、7 日以上経過したすべてのトランザクションを削除できます。

しかし、これで問題が解決するわけではありません。

この一般的な問題とは別に、ローカル データベースが最後に更新された日付をすべてのデバイスに対して直接 (つまり、CoreData なしで) 格納するパブリック iCloud データベースに iCloud レコード タイプを用意するというのが私の考えです。すべてのデバイスがこれらのレコードを読み取ることができるため、すべてのローカル データベースが最後に更新されたのはいつかを簡単に特定でき、この日付より前の履歴を削除できます。

これは問題を処理する正しい方法ですか?

4

1 に答える 1