Application Support — је директоријум у пешчанику iOS апликације, намењен за чување помоћних података неопходних за рад апликације, али које не креира директно корисник. Према Apple File System Basics (2024), овај директоријум је оптималан за конфигурационе датотеке, SQLite базе Core Data, кеширане документе и друге податке које апликација самостално генерише. За разлику од Documents Directory, Application Support се не приказује у iTunes File Sharing и корисник нема директан приступ њему, што штити службене податке од случајног брисања.
Главно
Application Support — је директоријум у пешчанику iOS апликације, намењен за чување података које апликација креира и користи за свој рад, али који нису кориснички документи. Ово је главно место за конфигурације, базе података, кеширане метаподатке и друге помоћне датотеке.
iOS издваја Application Support као посредни ниво између Documents (кориснички подаци) и Caches (привремени подаци). Датотеке у Application Support-у могу бити релативно трајне, али корисник не би требало да има директан приступ њима — то га разликује од Documents Directory.
Према Apple Developer Documentation (2024), Application Support је препоручено место за чување SQLite база Core Data, Realm датотека, конфигурација у JSON/plist формату, преузетих референтних материјала и других података које апликација користи, али које корисник није експлицитно креирао.
Важно: подразумевано, Application Support је укључен у резервну копију iCloud и iTunes. Ако апликација чува велике количине података који се могу обновити у овом директоријуму (нпр. преузета упутства), потребно је поставити флаг isExcludedFromBackup за одговарајуће датотеке.
У Swift-у путања до Application Support Directory-ја се добија преко FileManager.urls(for: .applicationSupportDirectory). Apple препоручује креирање поддиректоријума са именом апликације унутар Application Support-а ради изолације података.
import Foundation
let fileManager = FileManager.default
guard let appSupportURL = fileManager.urls(
for: .applicationSupportDirectory,
in: .userDomainMask
).first else { return }
// Креирај поддиректоријум апликације
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-у, препоручује се креирање поддиректоријума са именом апликације.
@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 је погодан за широк спектар података које апликација користи за свој рад. Правилан избор података за овај директоријум побољшава организацију датотечног система и поједностављује резервно копирање.
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-а. При креирању NSPersistentContainer-а, Core Data аутоматски смешта SQLite датотеке у Library/Application Support са јединственим именом заснованим на називу модела.
Разумевање где Core Data чува датотеке је критично за миграције, резервно копирање и отклањање грешака. Главне датотеке: .sqlite (подаци), .sqlite-wal (Write-Ahead Log), .sqlite-shm (Shared Memory).
import CoreData
// Креирај Core Data контејнер
let container = NSPersistentContainer(name: "MyAppModel")
// Прилагођени URL директоријум продавнице
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-а и Documents-а — једна од најважнијих за правилну организацију датотечне структуре iOS апликације. Погрешан избор може довести до тога да корисник случајно обрише важне податке апликације или, обрнуто, не може да пронађе своје датотеке.
| Параметар | Application Support | Documents Directory |
|---|---|---|
| Приступ корисника | Не (скривен) | Преко iTunes File Sharing |
| Тип података | Службени подаци апликације | Кориснички документи |
| Резервна копија iCloud | Да (подразумевано) | Да (подразумевано) |
| Ризик од брисања | Низак (без приступа) | Средњи (доступан кориснику) |
| Пример | SQLite Core Data | Извезени PDF |
Једноставно правило: ако корисник треба да види датотеку и да је може обрисати — користи Documents. Ако је датотека потребна апликацији за рад, али корисник не треба да зна за њу — користи Application Support. Ако се подаци могу обновити — користи Caches.
Рад са Application Support-ом захтева узимање у обзир неколико карактеристика које га разликују од других директоријума у пешчанику. Придржавање ових пракси помаже у избегавању губитка података, проблема са миграцијом и неочекиваног понашања апликације.
За разлику од Documents-а, Application Support можда не постоји при првом покретању. Користи createDirectory(at:withIntermediateDirectories:) са параметром withIntermediateDirectories: true да би се гарантовало креирање целог ланца поддиректоријума.
Креирај поддиректоријум са Bundle Identifier-ом унутар Application Support-а. Ово изолује податке твоје апликације од података других апликација (иако пешчаник већ обезбеђује изолацију) и поједностављује миграцију при промени добављача.
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 се не креира аутоматски при инсталацији апликације. За разлику од Documents и Caches, које систем креира при првом покретању, Application Support мора да креира програмер помоћу FileManager.createDirectory(at:withIntermediateDirectories:). Ово се обично ради у методи application(_:didFinishLaunchingWithOptions:).
Не, преко стандардног интерфејса iOS (Files, iTunes) корисник нема приступ Application Support-у. Међутим, при брисању саме апликације, цео пешчаник, укључујући Application Support, се потпуно брише. Резервна копија у iCloud-у се чува до тренутка обнављања или ручног брисања.
За преузете видее намењене кориснику, боље је користити Documents Directory — да би корисник могао да управља овим датотекама преко Files-а. Ако је видео део интерног кеша апликације (нпр. офлајн садржај за учење), може се користити Application Support са флагом isExcludedFromBackup за велике датотеке.
Додај верзионисање поддиректоријума унутар Application Support-а. При ажурирању провери тренутну верзију података и по потреби креирај нови поддиректоријум, а стари сачувај за rollback. Обриши стари директоријум тек након потврде да су сви корисници успешно мигрирали на нову верзију података.
Индиректно — да. Ако Application Support садржи десетине хиљада малих датотека, FileManager.enumerator може успорити иницијализацију. Препоручује се ограничавање броја датотека у Application Support-у (не више од 1000) и коришћење база података (Core Data, Realm) уместо више појединачних датотека за структуриране податке.
Закључци
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође