SwiftUIのFileManager.default.urls(for: .documentDirectory, in: .userDomainMask)の意味を説明する。
結論
ユーザーが生成したデータを保存する場所はユーザードメインのドキュメントディレクトリと決まっていて、そのURLを取得するためのコードがFileManager.default.urls(for: .documentDirectory, in: .userDomainMask)である。
ディレクトリ構成
iOSファイルシステムのディレクトリ構成は以下のようになっている。
- Appのデータは隔離領域内(Sandboxという)に作成される。
- Bundle ContainerはAppに元々同梱されているデータが保存されている場所。
- Data Container内のDocumentsディレクトリがユーザーが生成したデータを保存する場所。
詳しくはこちら。
File System Basics
Explains how to create and manage files and directories.
ドメイン構成
iOSファイルシステムのドメイン構成は調べきれていないが、macOSファイルシステムではドメイン構成は以下のようになっており、iOSファイルシステムでも同じようなものだと私は信じている。
実験
ディレクトリ構造やドメイン構造の理解を深めるために、以下のコードでforやinの引数を変えてprintするという実験をしてみた。
import SwiftUI
struct ContentView: View {
var body: some View {
Button(action: {
test()
}) {
Text("ここをタップ")
}
}
func test() {
let url = FileManager.default.urls(for: .documentDirectory, // ?
in: .userDomainMask) // ?
print(url)
}
}
forの引数 | inの引数 | print結果 |
documentDirectory | userDomainMask | [file:///var/mobile/Containers/Data/Application/50D27E5E-6875-4C74-8BCD-05C74C66B96A/Documents/] |
libraryDirectory | userDomainMask | [file:///var/mobile/Containers/Data/Application/50D27E5E-6875-4C74-8BCD-05C74C66B96A/Library/] |
applicationDirectory | userDomainMask | [file:///var/mobile/Containers/Data/Application/50D27E5E-6875-4C74-8BCD-05C74C66B96A/Applications/] |
documentDirectory | systemDomainMask | [] |
libraryDirectory | systemDomainMask | [file:///System/Library/, file:///System/Cryptexes/App/System/Library/] |
applicationDirectory | systemDomainMask | [file:///Applications/, file:///System/Cryptexes/App/System/Applications/] |
documentDirectory | localDomainMask | [] |
libraryDirectory | localDomainMask | [file:///Library/] |
applicationDirectory | localDomainMask | [file:///Applications/] |
forとinの引数に設定できる値は他にも有るが、ここでは代表例として9例を示した。
この結果から以下のように理解した。
- inの引数は上位階層を設定するものである。
- forの引数は最下層のディレクトリを設定するものである。
まとめ
SwiftUIのFileManager.default.urls(for: .documentDirectory, in: .userDomainMask)の意味を説明した。
コメント