Application Support: 設定保存とCore Data

著者: IT Sectr 公開日: 2026-07-10 読了時間: 10 分

Application Supportは、iOSアプリのサンドボックス内にあるディレクトリで、アプリの動作に必要な補助データを保存するために設計されていますが、ユーザーが直接作成するものではありません。Apple File System Basics(2024)によると、このディレクトリは設定ファイル、Core DataのSQLiteデータベース、キャッシュされたドキュメント、アプリが自ら生成するその他のデータに最適です。Documents Directoryとは異なり、Application SupportはiTunes File Sharingに表示されず、ユーザーは直接アクセスできないため、サービスデータが誤って削除されるのを防ぎます。

重要ポイント

  • Application Support — アプリが自身の動作のために作成するデータ用のディレクトリで、ユーザー向けではありません。
  • Application Supportのファイルは、除外フラグが設定されていない限り、自動的にiCloudとiTunesにバックアップされます。
  • ディレクトリへのパスはNSApplicationSupportDirectoryまたはFileManager.urls(for: .applicationSupportDirectory)です。
  • Core DataはデフォルトでSQLiteデータベースをApplication Supportに配置します。
  • ユーザーはFilesやiTunesを介してApplication Supportに直接アクセスできません

iOSのApplication Supportとは?

Application Supportは、iOSアプリのサンドボックス内にあるディレクトリで、アプリが自身の動作のために作成・使用するデータを保存するために設計されていますが、ユーザードキュメントではありません。設定、データベース、キャッシュされたメタデータ、その他の補助ファイルの主要な場所です。

iOSはApplication Supportを、Documents(ユーザーデータ)とCaches(一時データ)の間の中間層として指定しています。Application Support内のファイルは比較的永続的ですが、ユーザーは直接アクセスできないようにする必要があります — これがDocuments Directoryとの違いです。

Apple Developer Documentation(2024)によると、Application Supportは、Core DataのSQLiteデータベース、Realmファイル、JSON/plist形式の設定、ダウンロードした参考資料、アプリが使用するがユーザーが明示的に作成していないその他のデータを保存するための推奨場所です。

重要:デフォルトでは、Application SupportはiCloudおよびiTunesのバックアップに含まれます。アプリがこのディレクトリに再作成可能な大量のデータ(ダウンロードしたガイドなど)を保存する場合は、関連ファイルにisExcludedFromBackupフラグを設定する必要があります。

Application Supportへのパスを取得する方法

Swiftでは、Application Support DirectoryへのパスはFileManager.urls(for: .applicationSupportDirectory)を介して取得します。Appleはデータ分離のため、Application Support内にアプリ名のサブディレクトリを作成することを推奨しています。

swift
import Foundation

let fileManager = FileManager.default
guard let appSupportURL = fileManager.urls(
    for: .applicationSupportDirectory,
    in: .userDomainMask
).first else { return }

// Create app subdirectory
let bundleID = Bundle.main.bundleIdentifier ?? "com.example.app"
let appDir = appSupportURL.appendingPathComponent(bundleID)
try fileManager.createDirectory(
    at: appDir,
    withIntermediateDirectories: true
)

Objective-Cは、NSApplicationSupportDirectoryを指定してNSSearchPathForDirectoriesInDomainsを使用します。Swiftと同様に、アプリ名の子ディレクトリを作成することをお勧めします。

objective-c
@import Foundation;

NSArray *paths = NSSearchPathForDirectoriesInDomains(
    NSApplicationSupportDirectory,
    NSUserDomainMask,
    YES
);
NSString *appSupportPath = paths.firstObject;
NSString *appDir = [appSupportPath stringByAppendingPathComponent:@"com.example.app"];

初回起動時、Application Supportディレクトリは存在しない場合があります — createDirectory(at:withIntermediateDirectories:)を使用して作成する必要があります。これが、システムが自動的に作成するDocuments Directoryとの違いです。

Application Supportに保存するデータ

Application Supportは、アプリが動作のために使用する幅広いデータに適しています。このディレクトリに適切なデータを選択することで、ファイルシステムの整理が向上し、バックアップが簡単になります。

Core DataおよびRealmデータベース

Core DataのSQLiteファイルはデフォルトでApplication Supportに作成されます。Realmもデータベースをこのディレクトリに配置することを推奨しています。これにより、ユーザードキュメントがアプリの内部データベースから分離されます。

設定ファイル

アプリ設定、Feature Flags、キャッシュされたユーザーメタデータ(認証トークンは除く — それらにはKeychainを使用)を含むJSON、plist、XMLファイル。

データタイプApplication Support代替
SQLite Core Dataはい(デフォルト)
設定 .plist / .jsonはいUserDefaults(単純なもの用)
ダウンロードした参考資料はいDocuments(ユーザー向けの場合)
アプリログ条件付きCaches(ログ用)
認証トークンいいえKeychain

選択基準:データがアプリによって作成・使用され、ユーザーによるものではなく、起動間で永続化する必要がある場合 — Application Supportが適切な場所です。

Core DataとApplication Support

Core DataはApplication Supportの主要な利用者の1つです。NSPersistentContainerを作成すると、Core Dataは自動的にSQLiteファイルをLibrary/Application Supportに、モデル名に基づく一意の名前で配置します。

Core Dataがファイルをどこに保存するかを理解することは、マイグレーション、バックアップ、デバッグにとって重要です。主なファイル:.sqlite(データ)、.sqlite-wal(Write-Ahead Log)、.sqlite-shm(Shared Memory)。

swift
import CoreData

// Create Core Data container
let container = NSPersistentContainer(name: "MyAppModel")

// Custom store URL directory
guard let appSupportURL = FileManager.default
    .urls(for: .applicationSupportDirectory,
        in: .userDomainMask).first else { return }

let storeURL = appSupportURL
    .appendingPathComponent("MyAppModel.sqlite")
let description = NSPersistentStoreDescription(url: storeURL)
container.persistentStoreDescriptions = [description]

CloudKit Core Data同期を使用する場合、SQLiteファイルはApplication Supportに残り、CloudKitはトランスポート層として機能します。この場合、ファイルをバックアップから除外しないことが重要です — そうしないと、デバイス間の同期が壊れる可能性があります。

Application Support vs Documents Directory

Application SupportDocumentsの違いは、iOSアプリのファイル構造を適切に整理する上で最も重要なものの1つです。誤った選択をすると、ユーザーが重要なアプリデータを誤って削除したり、逆にファイルを見つけられなくなったりする可能性があります。

パラメータApplication SupportDocuments Directory
ユーザーアクセスなし(非表示)iTunes File Sharing経由
データタイプアプリサービスデータユーザードキュメント
iCloudバックアップはい(デフォルト)はい(デフォルト)
削除リスク低い(アクセス不可)中程度(ユーザーがアクセス可能)
SQLite Core DataエクスポートされたPDF

シンプルなルール:ユーザーがファイルを表示し、削除できる必要がある場合 — Documentsを使用。ファイルがアプリの動作に必要だが、ユーザーが知る必要がない場合 — Application Supportを使用。データを再作成できる場合 — Cachesを使用。

Application Supportのベストプラクティス

Application Supportを扱うには、他のサンドボックスディレクトリと区別するいくつかの特性を考慮する必要があります。これらのプラクティスに従うことで、データ損失、マイグレーションの問題、予期しないアプリの動作を回避できます。

初回起動時に必ずディレクトリを作成する

Documentsとは異なり、Application Supportは初回起動時に存在しない場合があります。withIntermediateDirectories: trueパラメータを指定してcreateDirectory(at:withIntermediateDirectories:)を使用し、サブディレクトリのチェーン全体が作成されることを保証します。

Bundle Identifierでサブディレクトリを使用する

Application Support内にBundle Identifierのサブディレクトリを作成します。これにより、アプリのデータが他のアプリのデータから分離され(サンドボックスがすでに分離を提供していますが)、プロバイダー変更時のマイグレーションが簡素化されます。

swift
import Foundation

enum AppSupport {
    static func ensureDirectory() throws -> URL {
        let fm = FileManager.default
        let baseURL = try fm.url(
            for: .applicationSupportDirectory,
            in: .userDomainMask,
            appropriateFor: nil,
            create: true
        )
        let appDir = baseURL
            .appendingPathComponent(Bundle.main.bundleIdentifier ?? "default")
        try fm.createDirectory(at: appDir, withIntermediateDirectories: true)
        return appDir
    }
}

これらのプラクティスに従うことで、アプリのサービスデータが適切に整理され、ユーザーによる誤った削除から保護され、バックアップから正しく復元されることが保証されます。

よくある質問

Application Support Directoryを手動で作成する必要がありますか?

はい、Application Supportはアプリインストール時に自動的に作成されません。システムが初回起動時に作成するDocumentsやCachesとは異なり、Application Supportは開発者がFileManager.createDirectory(at:withIntermediateDirectories:)を使用して作成する必要があります。これは通常、application(_:didFinishLaunchingWithOptions:)メソッドで行われます。

ユーザーは誤ってApplication Supportからデータを削除できますか?

いいえ、標準のiOSインターフェース(Files、iTunes)を介してユーザーはApplication Supportにアクセスできません。ただし、アプリ自体が削除されると、Application Supportを含むサンドボックス全体が完全に削除されます。iCloudバックアップは、復元または手動削除まで保持されます。

Application Supportはダウンロードした動画の保存に適していますか?

ユーザー向けのダウンロード動画には、ユーザーがFilesを介してファイルを管理できるように、Documents Directoryを使用することをお勧めします。動画がアプリの内部キャッシュの一部(オフライントレーニングコンテンツなど)である場合は、大きなファイルに対してisExcludedFromBackupフラグを設定してApplication Supportを使用できます。

アプリ更新時にApplication Supportからデータを移行するには?

Application Support内にサブディレクトリのバージョニングを追加します。更新時に現在のデータバージョンを確認し、必要に応じて新しいサブディレクトリを作成し、古いものはロールバック用に保持します。すべてのユーザーが新しいデータバージョンに正常に移行したことを確認してから、古いディレクトリを削除します。

Application Supportのサイズはアプリの起動速度に影響しますか?

間接的に — はい。Application Supportに数万の小さなファイルがある場合、FileManager.enumeratorが初期化を遅くする可能性があります。Application Support内のファイル数を制限(1000以下)し、構造化データには多数の個別ファイルではなくデータベース(Core Data、Realm)を使用することをお勧めします。

まとめ

  • Application Support — ユーザーが直接アクセスすることを想定していないアプリサービスデータ用のディレクトリ。
  • ディレクトリへのパスはFileManager.urls(for: .applicationSupportDirectory)またはNSApplicationSupportDirectoryを指定したNSSearchPathForDirectoriesInDomains。
  • ディレクトリは最初のアプリ起動時に手動で作成する必要があります。
  • Core DataはデフォルトでSQLiteデータベースをApplication Supportに配置します。
  • ユーザーはFilesやiTunesを介してApplication Supportにアクセスできません
  • Application SupportのファイルはisExcludedFromBackupが設定されていない限りiCloudにバックアップされます。
  • データ分離と簡単なマイグレーションのためにBundle Identifierのサブディレクトリを作成します。

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください