react nativeのアプリを書く時に、各OSごとに保存先の方針の違いに混乱したため、備忘録としてまとめました。
iOSの場合
| 判断基準 | 具体例 | 保存場所 |
|---|---|---|
| ユーザが作成した(一時的ではない)データ アプリが再作成できないデータ ユーザに公開していいもの |
ユーザデータ ダウンロードした画像 |
Application_Home/Document |
| 再ダウンロードできるデータ 再作成できるデータ バックアップを取らなくていいもの |
データのキャッシュファイル ドキュメントデータ |
Application_Home/Library/Caches |
| 一時的にのみ使用されるデータ 勝手に消されても問題がないもの |
起動ごとに変わる一時的なデータ | Application_Home/tmp |
- 一番上の項目だけが、iCloudバックアップ対象
- また、/tmpディレクトリのものはアプリが実行されていない時に、システムに勝手に削除される可能性があるので扱いに注意すること
Androidの場合
※Androidは端末によってファイルの保存場所が異なるため、ファイルパスではなくアクセス手段としてまとめます
| 判断基準 | 具体例 | 保存場所へのアクセス手段 |
|---|---|---|
| アプリ固有のファイル | アプリ独自のデータ | 内部ストレージからは getFilesDir() または getCacheDir() 外部ストレージからは getExternalFilesDir() または getExternalCacheDir() |
| 他のアプリと共有するメディアファイル | 他のアプリと共有する画像、音声ファイル | MediaStore API |
| ダウンロードしたファイル | DLした画像、音声ファイル | ストレージアクセスフレームワーク |
| アプリ設定 | アプリの設定情報 | Jetpack Preferences library |
| データベース | ローカルのデータベース | Room persistence library |
- アプリの固有ファイルについて、外部ストレージにある場合は他のアプリからアクセスできるが、内部ストレージにある場合は他のアプリはアクセスできないので注意が必要
- アプリアンインストール時にはアプリ固有のファイル以外は削除されない
- 内部ストレージと外部ストレージの違い
- 内部ストレージ
- 外部ストレージに比べ容量が少ない
- 全てのデバイスが利用可能→信頼性が高い
- 外部ストレージ
- 内部ストレージに比べ容量が大きいことが多い
- Android9以前は権限が必要だった→Android10以降はデフォルトで付与されるようになった
- 内部ストレージ
参考