Application Support: การจัดเก็บการกำหนดค่าและ Core Data

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-07-10 เวลาอ่าน: 10 นาที

Application Support คือไดเรกทอรีใน sandbox ของแอป iOS ที่ออกแบบมาเพื่อจัดเก็บข้อมูลเสริมที่จำเป็นสำหรับการทำงานของแอป แต่ไม่ได้ถูกสร้างขึ้นโดยผู้ใช้โดยตรง ตาม Apple File System Basics (2024) ไดเรกทอรีนี้เหมาะที่สุดสำหรับไฟล์กำหนดค่า ฐานข้อมูล SQLite ของ Core Data เอกสารที่ถูกแคช และข้อมูลอื่น ๆ ที่แอปสร้างขึ้นเอง ซึ่งแตกต่างจาก Documents Directory ตรงที่ Application Support จะไม่แสดงใน iTunes File Sharing และผู้ใช้ไม่สามารถเข้าถึงได้โดยตรง ซึ่งช่วยปกป้องข้อมูลบริการจากการถูกลบโดยไม่ตั้งใจ

ประเด็นสำคัญ

  • Application Support — ไดเรกทอรีสำหรับข้อมูลที่แอปสร้างขึ้นสำหรับการทำงานของตัวเอง ไม่ได้มีไว้สำหรับผู้ใช้
  • ไฟล์จาก Application Support จะถูกสำรองข้อมูลโดยอัตโนมัติ ไปยัง iCloud และ iTunes เว้นแต่จะตั้งค่าแฟล็กการยกเว้น
  • เส้นทางไปยังไดเรกทอรีคือ NSApplicationSupportDirectory หรือ FileManager.urls(for: .applicationSupportDirectory)
  • Core Data โดยค่าเริ่มต้นจะวางฐานข้อมูล SQLite ไว้ใน Application Support
  • ผู้ใช้ ไม่สามารถเข้าถึง Application Support โดยตรงผ่าน Files หรือ iTunes

Application Support ใน iOS คืออะไร?

Application Support คือไดเรกทอรีใน sandbox ของแอป iOS ที่ออกแบบมาเพื่อจัดเก็บข้อมูลที่แอปสร้างและใช้สำหรับการทำงานของตัวเอง แต่ไม่ใช่เอกสารผู้ใช้ นี่คือตำแหน่งหลักสำหรับการกำหนดค่า ฐานข้อมูล เมตาดาต้าที่ถูกแคช และไฟล์เสริมอื่น ๆ

iOS กำหนดให้ Application Support เป็น ชั้นกลาง ระหว่าง Documents (ข้อมูลผู้ใช้) และ Caches (ข้อมูลชั่วคราว) ไฟล์ใน Application Support สามารถถาวรได้ แต่ผู้ใช้ไม่ควรเข้าถึงได้โดยตรง — นี่คือสิ่งที่ทำให้แตกต่างจาก Documents Directory

ตาม เอกสารสำหรับนักพัฒนา Apple (2024) Application Support เป็นตำแหน่งที่แนะนำสำหรับจัดเก็บฐานข้อมูล SQLite ของ Core Data, ไฟล์ 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 ใช้ NSSearchPathForDirectoriesInDomains กับ NSApplicationSupportDirectory เช่นเดียวกับ 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

ไฟล์ SQLite ของ Core Data ถูกสร้างขึ้นใน Application Support โดยค่าเริ่มต้น Realm ก็แนะนำให้วางฐานข้อมูลในไดเรกทอรีนี้เช่นกัน ซึ่งจะแยกเอกสารผู้ใช้ออกจากฐานข้อมูลภายในของแอป

ไฟล์กำหนดค่า

ไฟล์ JSON, plist, XML พร้อมการตั้งค่าแอป, Feature Flags, เมตาดาต้าผู้ใช้ที่ถูกแคช (แต่ไม่ใช่โทเคนการตรวจสอบสิทธิ์ — ใช้ Keychain สำหรับสิ่งเหล่านั้น)

ประเภทข้อมูลApplication Supportทางเลือก
SQLite Core Dataใช่ (ค่าเริ่มต้น)
การกำหนดค่า .plist / .jsonใช่UserDefaults (สำหรับแบบง่าย)
เอกสารอ้างอิง ที่ดาวน์โหลดใช่Documents (ถ้าสำหรับผู้ใช้)
บันทึก แอปตามเงื่อนไขCaches (สำหรับบันทึก)
โทเคน การตรวจสอบสิทธิ์ไม่Keychain

เกณฑ์การเลือก: หากข้อมูลถูกสร้างและใช้งานโดย แอป ไม่ใช่ผู้ใช้ และควรคงอยู่ระหว่างการเริ่มใช้งาน — ตำแหน่งของมันอยู่ใน Application Support

Core Data และ Application Support

Core Data เป็นหนึ่งในผู้ใช้งานหลักของ Application Support เมื่อสร้าง NSPersistentContainer Core Data จะวางไฟล์ SQLite ใน Library/Application Support โดยอัตโนมัติด้วยชื่อที่ไม่ซ้ำกันตามชื่อโมเดล

การเข้าใจว่า Core Data จัดเก็บไฟล์ไว้ที่ไหนเป็นสิ่งสำคัญสำหรับ การโยกย้าย (migrations) การสำรองข้อมูล และการดีบัก ไฟล์หลัก: .sqlite (ข้อมูล), .sqlite-wal (บันทึกการเขียนล่วงหน้า), .sqlite-shm (หน่วยความจำที่ใช้ร่วมกัน)

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]

เมื่อใช้การซิงค์ Core Data กับ CloudKit ไฟล์ SQLite จะยังคงอยู่ใน Application Support และ CloudKit ทำหน้าที่เป็นชั้นการขนส่ง ในกรณีนี้ สิ่งสำคัญคือไม่ควรยกเว้นไฟล์จากการสำรองข้อมูล — มิฉะนั้นการซิงค์ระหว่างอุปกรณ์อาจหยุดชะงัก

Application Support เทียบกับ Documents Directory

ความแตกต่างระหว่าง Application Support และ Documents เป็นหนึ่งในสิ่งที่สำคัญที่สุดสำหรับการจัดโครงสร้างไฟล์แอป iOS อย่างถูกต้อง การเลือกผิดอาจทำให้ผู้ใช้ลบข้อมูลสำคัญของแอปโดยไม่ตั้งใจ หรือในทางกลับกัน ไม่สามารถหาไฟล์ของตนเองได้

พารามิเตอร์Application SupportDocuments Directory
การเข้าถึงของผู้ใช้ไม่มี (ซ่อน)ผ่าน iTunes File Sharing
ประเภทข้อมูลข้อมูลบริการของแอปเอกสารผู้ใช้
การสำรองข้อมูล iCloudใช่ (ค่าเริ่มต้น)ใช่ (ค่าเริ่มต้น)
ความเสี่ยงในการลบต่ำ (ไม่มีการเข้าถึง)ปานกลาง (ผู้ใช้เข้าถึงได้)
ตัวอย่างSQLite Core DataPDF ที่ส่งออก

กฎง่าย ๆ: หากผู้ใช้ควรเห็นไฟล์และสามารถลบได้ — ใช้ Documents หากไฟล์จำเป็นสำหรับการทำงานของแอปแต่ผู้ใช้ไม่จำเป็นต้องรู้ — ใช้ Application Support หากข้อมูลสามารถสร้างขึ้นใหม่ได้ — ใช้ Caches

แนวทางปฏิบัติที่ดีที่สุดสำหรับการทำงานกับ Application Support

การทำงานกับ Application Support จำเป็นต้องพิจารณาคุณสมบัติหลายประการที่ทำให้แตกต่างจากไดเรกทอรี sandbox อื่น ๆ การปฏิบัติตามแนวทางเหล่านี้ช่วยหลีกเลี่ยงการสูญเสียข้อมูล ปัญหาการโยกย้าย และพฤติกรรมแอปที่ไม่คาดคิด

สร้างไดเรกทอรีเสมอเมื่อเริ่มใช้งานครั้งแรก

ต่างจาก Documents ตรงที่ Application Support อาจไม่มีอยู่เมื่อเริ่มใช้งานครั้งแรก ใช้ createDirectory(at:withIntermediateDirectories:) ด้วยพารามิเตอร์ withIntermediateDirectories: true เพื่อรับประกันการสร้างสายโซ่ไดเรกทอรีย่อยทั้งหมด

ใช้ไดเรกทอรีย่อยกับ Bundle Identifier

สร้าง ไดเรกทอรีย่อยด้วย Bundle Identifier ภายใน Application Support ซึ่งจะแยกข้อมูลแอปของคุณจากแอปอื่น ๆ (แม้ว่า sandbox จะให้การแยกอยู่แล้ว) และทำให้การโยกย้ายง่ายขึ้นเมื่อเปลี่ยนผู้ให้บริการ

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 ได้ อย่างไรก็ตาม เมื่อแอปถูกลบ sandbox ทั้งหมด รวมถึง Application Support จะถูกลบออกอย่างสมบูรณ์ การสำรองข้อมูล iCloud จะคงอยู่จนกว่าจะกู้คืนหรือลบด้วยตนเอง

Application Support เหมาะสำหรับจัดเก็บวิดีโอที่ดาวน์โหลดหรือไม่?

สำหรับวิดีโอที่ดาวน์โหลดซึ่งมีไว้สำหรับ ผู้ใช้ ควรใช้ Documents Directory เพื่อให้ผู้ใช้สามารถจัดการไฟล์เหล่านี้ผ่าน Files ได้ หากวิดีโอเป็นส่วนหนึ่งของแคชภายในของแอป (เช่น เนื้อหาการฝึกอบรมแบบออฟไลน์) สามารถใช้ Application Support กับแฟล็ก isExcludedFromBackup สำหรับไฟล์ขนาดใหญ่ได้

จะโยกย้ายข้อมูลจาก Application Support เมื่ออัปเดตแอปได้อย่างไร?

เพิ่ม การกำหนดเวอร์ชัน ของไดเรกทอรีย่อยภายใน Application Support เมื่ออัปเดต ให้ตรวจสอบเวอร์ชันข้อมูลปัจจุบัน และสร้างไดเรกทอรีย่อยใหม่หากจำเป็น โดยเก็บอันเก่าสำหรับการย้อนกลับ ลบไดเรกทอรีเก่าเฉพาะเมื่อยืนยันว่าผู้ใช้ทั้งหมดโยกย้ายไปยังเวอร์ชันข้อมูลใหม่สำเร็จแล้ว

ขนาดของ Application Support ส่งผลต่อความเร็วในการเริ่มต้นแอปหรือไม่?

ทางอ้อม — ใช่ หาก Application Support มีไฟล์ขนาดเล็กนับหมื่น FileManager.enumerator อาจทำให้การเริ่มต้นช้าลง แนะนำให้จำกัดจำนวนไฟล์ใน Application Support (ไม่เกิน 1000) และใช้ฐานข้อมูล (Core Data, Realm) แทนไฟล์แต่ละไฟล์จำนวนมากสำหรับข้อมูลที่มีโครงสร้าง

สรุป

  • Application Support — ไดเรกทอรีสำหรับข้อมูลบริการของแอปที่ไม่ได้มีไว้สำหรับการเข้าถึงโดยตรงของผู้ใช้
  • เส้นทางไปยังไดเรกทอรีคือ FileManager.urls(for: .applicationSupportDirectory) หรือ NSSearchPathForDirectoriesInDomains กับ NSApplicationSupportDirectory
  • ต้อง สร้างไดเรกทอรีด้วยตนเอง เมื่อเริ่มต้นแอปครั้งแรก
  • Core Data โดยค่าเริ่มต้นจะวางฐานข้อมูล SQLite ไว้ใน Application Support
  • ผู้ใช้ ไม่สามารถเข้าถึง Application Support ผ่าน Files หรือ iTunes
  • ไฟล์จาก Application Support จะถูกสำรองข้อมูล ไปยัง iCloud เว้นแต่จะตั้งค่า isExcludedFromBackup
  • สร้าง ไดเรกทอรีย่อยด้วย Bundle Identifier เพื่อแยกข้อมูลและทำให้การโยกย้ายง่ายขึ้น

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม