アプリからKeychainに保存したデータがバックアップされているのか確認したかったので総当たりで検証したメモです。
結果から言うと同一デバイス間か異なるデバイス間かで結果が変わります。
環境
デバイス
- iPhone6+ (8.4.1)
- iPhone5 (8.4.1)
リセット方法
- すべてのコンテンツと設定を消去
同一デバイス間で検証
iPhone6+
-> iPhone6+
|復元方法|Keychain|
|---|---|---|
|新しいiPhoneとして設定|データなし|
|iCloudバックアップから復元|復元されている|
|iTunesバックアップから復元|復元されている|
|暗号化されたiTunesバックアップから復元|復元されている|
異なるデバイス間で検証
iPhone5
-> iPhone6+
|復元方法|Keychain|
|---|---|---|
|iCloudバックアップから復元|データなし|
|iTunesバックアップから復元|データなし|
|暗号化されたiTunesバックアップから復元|復元されている|
まとめ
- 機種変だと異なる端末から復元されるパターンになるので注意した方が良い。例えばデータベースのアクセスキーをKeychainに保存しているアプリでアプリをバックアップに含めていた場合に、アプリ内のデータベースは復元されるけどKeychainに保存していたアクセスキーは復元されないパターンがあるのでそうなるとデータベースにアクセスできない状況が起きます。
- 他に未検証なのはiOS9とiTunesで初期化してから復元がありますが、仮に挙動が変わってもKeychainが復元されない場合を想定していれば大丈夫そう。