【iOS】アプリを格納するフォルダの構造 | 渋谷で働くUnity野郎

渋谷で働くUnity野郎

備忘録として有効活用していきます。

アプリはディレクトリ(フォルダ)に格納されている。
そして、そのアプリはインストールされているディレクトリ外へのアクセスはできなくなっている。(サンドボックス)

という訳で、今回はそのディレクトリの構造について記述してみる。

ディレクトリの構造はアプリ下に
「Documentsフォルダ」、「アプリ」、「Libraryフォルダ」、「tmpフォルダ」の4つです。

$Iichinのブログ

Library下には「Preferences」があります。
またCacshesの情報はLibrary/Cacshesというディレクトリが作成されます。

データ保存で有名なNSUserDefaultは~/Library/Preferences/~.plistのようにプロパティリストとして保存されます。

iTunesでのバックアップについては以下のようになっています。

Documents   - バックアップの対称
Library
|_ Preferences - バックアップの対称
   |_ Caches - バックアップの対象外
tmp - バックアップの対象外


Documentsフォルダは、アプリ固有のデータファイルを保存する。
Preferencesフォルダは、アプリ固有の環境設定を保存する。
tmpは一時ファイル。

で、これらのファイルにアクセスするためのコードはメソッドのNSSearchPathForDirectoriesInDomainsの第一引数で指定する。

NSArray *NSSearchPathForDirectoriesInDomains (NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde)

この第一引数のdirectoryは以下のようなものがある。
・NSLibraryDirectory → ライブラリ (~/Library)
・NSDocumentationDirectory → ドキュメント (~/Documents)
・NSCachesDirectory → キャッシュ (~/Library/Caches)


Preferencesは直接アクセスすることはできません。

また、第二引数domainMaskにはどこを探すのかを指定する定数を指定します。
ユーザのホームディレクトリを探す場合はNSUserDomainMask
システムディレクトリを探す場合はNSSystemDomainMask
基本的にNSUserDomainMaskです。

そして第三引数のexpandTildeは~を展開するかどうかを指定するフラグです。
要は、YESを指定するとフルパスが得られます。
ですので、NSDataのwriteToFile:atomically:メソッドを使ってファイルに書き込む際に展開しておかないといけないので、YESを指定しておく方がよいでしょう。


また、アプリのホームディレクトリやtmpファイルは以下のようにアクセスできます。
・NSHomeDirectory() → (~)
・NSTemporaryDirectory() → 一時ファイル (~/tmp)

以上。