かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

UWPのApplicationData.Currentのデータをバージョン管理する

アプリの設定とかはApplicationData.Currentの下のLocalSettingsとかRoamingSettingsとかを使うのが一般的ですよね。ここの設定がアプリのバージョンアップによって非互換が発生してしまった!?というときに使える小技を紹介します。

ApplicationData.Current.SetVersionAsyncというメソッドを使います。 このメソッドには、アプリケーションのバージョン番号と、バージョン番号変える時の操作を指定できます。 こんな感じで使います。

await ApplicationData.Current.SetVersionAsync(0, r =>
{
    var d = r.GetDeferral();
    Debug.WriteLine($"CurrentVersion: {r.CurrentVersion}, DesiredVersion: {r.DesiredVersion}");
    // バージョンが違ってたら必要に応じて変換ロジックを走らせる
    d.Complete();
});

アプリのバージョンが上がって仕様が変わったタイミングでSetVersionAsyncの第一引数をインクリメントする感じで使います。 バージョン番号が変わってなくても、第二引数で指定したコールバックは呼ばれるので注意ですね。