はじめに
今回画像データを扱うことになり、画像データの保存先をRealmなどのDBではなくファイルシステムの領域へと保存することにしました。
本記事は、iOSのファイルシステムについて理解して設計・開発に役立てること、また将来の自身の振り返りに役立てることを目的にしています。
参考文献
File System Basics(Updated: 2018-04-09)
https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html
↑6年前のアーカイブドキュメントですが図もあり分かりやすいため上記資料をベースに記載していきます。
iOSのファイルシステム
iOSファイルシステムについて
iOSファイルシステムとは、単独で実行されるアプリを対象としており、ユーザーはファイルシステムへ直接アクセスできない。
iOS標準ディレクトリ
セキュリティ上の理由により、iOSアプリとファイルシステムのやり取りはアプリのSandox内のディレクトリに制限されている。
アプリインストール時にインストーラーがアプリのSandbox内に複数のコンテナディレクトリを生成する。
Figure 1-1 An iOS app operating within its own sandbox directory
iOSアプリで一般的に利用されるディレクトリ
-
AppName.app
- アプリのバンドル
- アプリとすべてのリソースが含まれ、このディレクトリに書き込むことはできない
- ただし、アプリのバンドルに保存されているリソースの読み取り専用アクセスを取得することは可能
- このディレクトリはiTunes, iCloudによってバックアップされない
-
Documents/
- ユーザーが作成したコンテンツを保存するために使用する
- このディレクトに保存された内容は、ファイル共有を通じてユーザーが利用できる → ユーザーに公開する可能性のあるファイルのみ配置する必要がある
- このディレクトリはiTunes, iCloudによってバックアップされる
-
Documents/Inbox
- このディレクトリを利用して、アプリが外部から開くように要求されたファイルにアクセスする
- 例)メールアプリの場合、アプリに関連されたメールの添付ファイルをここに保存する
- このディレクトリはiTunes, iCloudによってバックアップされる
- このディレクトリを利用して、アプリが外部から開くように要求されたファイルにアクセスする
-
Library/
- サブディレクトリにApplication Support、Caches、Frameworks、Preferencesなどを持つ
- サブディレクトリを利用(作成?)することでユーザーに公開したくないファイルを利用することができる?(⚠理解が曖昧です)
- Cachesを除くディレクトリの内容はiTunes, iCloudによってバックアップされる
- ※バックアップから除外したいファイルがある場合はURLResourceValuesのisExcludedFromBackupを利用する
-
tmp/
- アプリ起動中に利用する一時ファイルを保存する
- アプリが起動していないとき、システムによって消去される可能性がある
- このディレクトリはiTunes, iCloudによってバックアップされない