Application Support: lưu trữ cấu hình và Core Data

Tác giả: IT Sectr Đã đăng: 2026-07-10 Thời gian đọc: 10 phút

Application Support là một thư mục trong sandbox của ứng dụng iOS được thiết kế để lưu trữ dữ liệu phụ trợ cần thiết cho hoạt động của ứng dụng, nhưng không được người dùng tạo trực tiếp. Theo Apple File System Basics (2024), thư mục này là tối ưu cho các tệp cấu hình, cơ sở dữ liệu SQLite của Core Data, tài liệu được lưu trong bộ nhớ đệm và các dữ liệu khác mà ứng dụng tự tạo ra. Không giống như Thư mục Documents, Application Support không xuất hiện trong iTunes File Sharing và người dùng không có quyền truy cập trực tiếp vào nó, điều này bảo vệ dữ liệu dịch vụ khỏi bị xóa vô tình.

Điểm chính

  • Application Support — một thư mục cho dữ liệu mà ứng dụng tạo ra cho công việc riêng của nó, không dành cho người dùng.
  • Các tệp từ Application Support tự động được sao lưu vào iCloud và iTunes trừ khi cờ loại trừ được đặt.
  • Đường dẫn đến thư mục là NSApplicationSupportDirectory hoặc FileManager.urls(for: .applicationSupportDirectory).
  • Core Data theo mặc định đặt các cơ sở dữ liệu SQLite trong Application Support.
  • Người dùng không có quyền truy cập trực tiếp vào Application Support qua Files hoặc iTunes.

Application Support trong iOS là gì?

Application Support là một thư mục trong sandbox của ứng dụng iOS được thiết kế để lưu trữ dữ liệu mà ứng dụng tạo và sử dụng cho công việc của nó, nhưng không phải là tài liệu người dùng. Đây là vị trí chính cho các cấu hình, cơ sở dữ liệu, siêu dữ liệu được lưu trong bộ nhớ đệm và các tệp phụ trợ khác.

iOS chỉ định Application Support như một lớp trung gian giữa Documents (dữ liệu người dùng) và Caches (dữ liệu tạm thời). Các tệp trong Application Support có thể tương đối cố định, nhưng người dùng không nên có quyền truy cập trực tiếp vào chúng — điều này phân biệt nó với Thư mục Documents.

Theo Tài liệu dành cho nhà phát triển Apple (2024), Application Support là vị trí được khuyến nghị để lưu trữ cơ sở dữ liệu SQLite của Core Data, tệp Realm, cấu hình ở định dạng JSON/plist, tài liệu tham khảo đã tải xuống và các dữ liệu khác mà ứng dụng sử dụng nhưng người dùng không tạo ra một cách rõ ràng.

Quan trọng: theo mặc định, Application Support được bao gồm trong bản sao lưu iCloud và iTunes. Nếu ứng dụng lưu trữ lượng lớn dữ liệu trong thư mục này có thể được tạo lại (ví dụ: hướng dẫn đã tải xuống), bạn phải đặt cờ isExcludedFromBackup cho các tệp liên quan.

Cách lấy đường dẫn đến Application Support

Trong Swift, đường dẫn đến Thư mục Application Support được lấy qua FileManager.urls(for: .applicationSupportDirectory). Apple khuyến nghị tạo một thư mục con với tên ứng dụng bên trong Application Support để cách ly dữ liệu.

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 sử dụng NSSearchPathForDirectoriesInDomains với NSApplicationSupportDirectory. Giống như Swift, nên tạo một thư mục con với tên ứng dụng.

objective-c
@import Foundation;

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

Khi khởi chạy lần đầu, thư mục Application Support có thể chưa tồn tại — nó phải được tạo bằng createDirectory(at:withIntermediateDirectories:). Điều này phân biệt nó với Thư mục Documents, được hệ thống tạo tự động.

Dữ liệu nào nên lưu trữ trong Application Support

Application Support phù hợp với nhiều loại dữ liệu mà ứng dụng sử dụng cho công việc của nó. Chọn đúng dữ liệu cho thư mục này cải thiện tổ chức hệ thống tệp và đơn giản hóa việc sao lưu.

Cơ sở dữ liệu Core Data và Realm

Các tệp SQLite của Core Data được tạo trong Application Support theo mặc định. Realm cũng khuyến nghị đặt cơ sở dữ liệu trong thư mục này. Điều này cách ly tài liệu người dùng khỏi cơ sở dữ liệu nội bộ của ứng dụng.

Tệp cấu hình

Các tệp JSON, plist, XML với cài đặt ứng dụng, Feature Flags, siêu dữ liệu người dùng được lưu trong bộ nhớ đệm (nhưng không phải mã thông báo xác thực — hãy sử dụng Keychain cho chúng).

Loại dữ liệuApplication SupportThay thế
SQLite Core DataCó (mặc định)
Cấu hình .plist / .jsonUserDefaults (cho đơn giản)
Tài liệu tham khảo đã tải xuốngDocuments (nếu cho người dùng)
Nhật ký ứng dụngCó điều kiệnCaches (cho nhật ký)
Mã thông báo xác thựcKhôngKeychain

Tiêu chí lựa chọn: nếu dữ liệu được tạo và sử dụng bởi ứng dụng, không phải người dùng, và nên tồn tại giữa các lần khởi chạy — vị trí của nó là trong Application Support.

Core Data và Application Support

Core Data là một trong những người tiêu thụ chính của Application Support. Khi tạo NSPersistentContainer, Core Data tự động đặt các tệp SQLite trong Library/Application Support với tên duy nhất dựa trên tên mô hình.

Hiểu nơi Core Data lưu trữ tệp là rất quan trọng cho di chuyển (migrations), sao lưu và gỡ lỗi. Các tệp chính: .sqlite (dữ liệu), .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]

Khi sử dụng đồng bộ Core Data với CloudKit, tệp SQLite vẫn nằm trong Application Support và CloudKit hoạt động như một lớp vận chuyển. Trong trường hợp này, điều quan trọng là không loại trừ tệp khỏi bản sao lưu — nếu không, đồng bộ hóa giữa các thiết bị có thể bị gián đoạn.

Application Support so với Thư mục Documents

Sự khác biệt giữa Application SupportDocuments là một trong những điểm quan trọng nhất để tổ chức đúng cấu trúc tệp của ứng dụng iOS. Lựa chọn sai có thể dẫn đến việc người dùng vô tình xóa dữ liệu quan trọng của ứng dụng hoặc ngược lại, không thể tìm thấy tệp của họ.

Tham sốApplication SupportThư mục Documents
Quyền truy cập người dùngKhông (ẩn)Qua iTunes File Sharing
Loại dữ liệuDữ liệu dịch vụ ứng dụngTài liệu người dùng
Sao lưu iCloudCó (mặc định)Có (mặc định)
Rủi ro xóaThấp (không có quyền truy cập)Trung bình (người dùng có thể truy cập)
Ví dụSQLite Core DataPDF đã xuất

Quy tắc đơn giản: nếu người dùng nên nhìn thấy tệp và có thể xóa nó — sử dụng Documents. Nếu tệp cần thiết cho ứng dụng hoạt động nhưng người dùng không cần biết về nó — sử dụng Application Support. Nếu dữ liệu có thể được tạo lại — sử dụng Caches.

Các phương pháp hay nhất khi làm việc với Application Support

Làm việc với Application Support đòi hỏi phải xem xét một số đặc điểm phân biệt nó với các thư mục sandbox khác. Tuân theo các phương pháp này giúp tránh mất dữ liệu, sự cố di chuyển và hành vi ứng dụng không mong muốn.

Luôn tạo thư mục khi khởi chạy lần đầu

Không giống như Documents, Application Support có thể không tồn tại khi khởi chạy lần đầu. Sử dụng createDirectory(at:withIntermediateDirectories:) với tham số withIntermediateDirectories: true để đảm bảo tạo toàn bộ chuỗi thư mục con.

Sử dụng thư mục con với Bundle Identifier

Tạo một thư mục con với Bundle Identifier bên trong Application Support. Điều này cách ly dữ liệu ứng dụng của bạn khỏi các ứng dụng khác (mặc dù sandbox đã cung cấp sự cách ly) và đơn giản hóa việc di chuyển khi thay đổi nhà cung cấp.

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
    }
}

Tuân theo các phương pháp này đảm bảo rằng dữ liệu dịch vụ của ứng dụng được tổ chức đúng cách, được bảo vệ khỏi sự xóa vô tình của người dùng và được khôi phục chính xác từ các bản sao lưu.

Câu hỏi thường gặp

Tôi có cần tạo Thư mục Application Support theo cách thủ công không?

Có, Application Support không được tạo tự động khi cài đặt ứng dụng. Không giống như Documents và Caches, được hệ thống tạo khi khởi chạy lần đầu, Application Support phải được nhà phát triển tạo bằng FileManager.createDirectory(at:withIntermediateDirectories:). Việc này thường được thực hiện trong phương thức application(_:didFinishLaunchingWithOptions:).

Người dùng có thể vô tình xóa dữ liệu khỏi Application Support không?

Không, thông qua giao diện iOS tiêu chuẩn (Files, iTunes), người dùng không có quyền truy cập vào Application Support. Tuy nhiên, khi bản thân ứng dụng bị xóa, toàn bộ sandbox, bao gồm Application Support, sẽ bị xóa hoàn toàn. Bản sao lưu iCloud vẫn tồn tại cho đến khi khôi phục hoặc xóa thủ công.

Application Support có phù hợp để lưu trữ video đã tải xuống không?

Đối với video đã tải xuống dành cho người dùng, tốt hơn nên sử dụng Thư mục Documents để người dùng có thể quản lý các tệp này qua Files. Nếu video là một phần của bộ nhớ đệm nội bộ của ứng dụng (ví dụ: nội dung đào tạo ngoại tuyến), có thể sử dụng Application Support với cờ isExcludedFromBackup cho các tệp lớn.

Làm thế nào để di chuyển dữ liệu từ Application Support khi cập nhật ứng dụng?

Thêm phiên bản (versioning) cho các thư mục con bên trong Application Support. Khi cập nhật, hãy kiểm tra phiên bản dữ liệu hiện tại và tạo thư mục con mới nếu cần, giữ lại thư mục cũ để khôi phục. Chỉ xóa thư mục cũ sau khi xác nhận rằng tất cả người dùng đã di chuyển thành công sang phiên bản dữ liệu mới.

Kích thước của Application Support có ảnh hưởng đến tốc độ khởi chạy ứng dụng không?

Gián tiếp — có. Nếu Application Support chứa hàng chục nghìn tệp nhỏ, FileManager.enumerator có thể làm chậm quá trình khởi tạo. Nên giới hạn số lượng tệp trong Application Support (không quá 1000) và sử dụng cơ sở dữ liệu (Core Data, Realm) thay vì nhiều tệp riêng lẻ cho dữ liệu có cấu trúc.

Tổng kết

  • Application Support — một thư mục cho dữ liệu dịch vụ ứng dụng không dành cho quyền truy cập trực tiếp của người dùng.
  • Đường dẫn đến thư mục là FileManager.urls(for: .applicationSupportDirectory) hoặc NSSearchPathForDirectoriesInDomains với NSApplicationSupportDirectory.
  • Thư mục phải được tạo thủ công khi khởi chạy ứng dụng lần đầu.
  • Core Data theo mặc định đặt cơ sở dữ liệu SQLite trong Application Support.
  • Người dùng không có quyền truy cập vào Application Support qua Files hoặc iTunes.
  • Các tệp từ Application Support được sao lưu vào iCloud trừ khi isExcludedFromBackup được đặt.
  • Tạo thư mục con với Bundle Identifier để cách ly dữ liệu và đơn giản hóa việc di chuyển.

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm