Caches Directory: що це, управління кешем та очищення даних

Автор: IT Sectr Опубліковано: 2026-07-10 Час читання: 10 хв

Caches Directory — це директорія в пісочниці iOS-застосунку, призначена для зберігання тимчасових даних, які можна відновити або перезавантажити з мережі. За даними Apple File System Basics (2024), система може видаляти файли з Caches Directory в будь-який момент для звільнення місця на диску. Застосунок повинен коректно обробляти відсутність цих файлів і за необхідності відновлювати їх. На відміну від Documents Directory, дані з Caches не включаються в резервне копіювання iCloud та iTunes, що знижує навантаження на хмарне сховище користувача.

Головне

  • Caches Directory — тимчасове сховище для даних, які можна відновити з мережі або перестворити.
  • Система iOS може в будь-який момент видалити файли з Caches при нестачі місця на пристрої.
  • Дані з Caches не включаються в резервне копіювання iCloud та iTunes.
  • Шлях до директорії отримується через NSCachesDirectory або FileManager.urls(for: .cachesDirectory).
  • Основна відмінність від Documents: Caches не призначений для користувацьких даних, втрата яких критична.

Що таке Caches Directory в iOS?

Caches Directory — це директорія всередині пісочниці iOS-застосунку, оптимізована для зберігання даних, які можна відновити за потреби. На відміну від Documents Directory, Caches не призначений для користувацьких даних — це тимчасове сховище для прискорення роботи застосунку.

iOS використовує Caches Directory для розміщення кешованих мережевих відповідей, попередньо завантажених зображень, серіалізованих об’єктів та даних, які застосунок може відновити. Розробник не повинен покладатися на довгострокове зберігання даних у цій директорії.

За даними Apple WWDC 2020, близько 40% iOS-застосунків використовують Caches Directory для зберігання кешованих зображень та мережевих даних, при цьому 25% розробників неправильно розміщують у Caches дані, які повинні знаходитися в Documents або Application Support, через нерозуміння відмінностей між цими директоріями.

Критична властивість Caches: застосунок повинен коректно обробляти ситуацію, коли файл з кешу було видалено системою. Якщо після видалення кешу функціональність застосунку порушується, значить дані зберігаються в неправильній директорії.

Як отримати шлях до Caches Directory

У Swift шлях до Caches Directory отримується стандартним методом FileManager із зазначенням .cachesDirectory. Це проста дія, яка використовується практично в кожному iOS-застосунку, що працює з мережевими даними.

swift
import Foundation

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

// Save cached JSON
let cacheFile = cachesURL.appendingPathComponent("feed_cache.json")
let jsonData = try JSONSerialization.data(
    withJSONObject: response,
    options: [.prettyPrinted]
)
try jsonData.write(to: cacheFile)

Objective-C використовує NSSearchPathForDirectoriesInDomains з NSCachesDirectory. Незважаючи на те, що Apple рекомендує Swift API, Objective-C-код з Caches Directory залишається робочим та підтримується.

objective-c
@import Foundation;

NSArray *paths = NSSearchPathForDirectoriesInDomains(
    NSCachesDirectory,
    NSUserDomainMask,
    YES
);
NSString *cachesPath = paths.firstObject;
NSString *cacheFile = [cachesPath stringByAppendingPathComponent:@"feed_cache.plist"];

Swift-проекти повинні віддавати перевагу URL-based API: воно типобезпечне та краще інтегрується з сучасними фреймворками, такими як SwiftUI та Combine.

Які дані зберігати в Caches

Caches Directory оптимальна для кількох категорій даних, які застосунок використовує для прискорення роботи, але не є єдиним джерелом істини. Правильний вибір даних для кешування безпосередньо впливає на UX та продуктивність застосунку.

Кешовані мережеві відповіді

JSON-відповіді від API, дані новинних стрічок, списки об’єктів. Все, що застосунок може повторно завантажити з сервера. Використовуй URLCache для автоматичного кешування HTTP-відповідей або зберігай вручну серіалізовані об’єкти.

Зображення та медіафайли

Зображення, завантажені з мережі — найчастіший випадок використання Caches Directory. Бібліотеки на кшталт SDWebImage та Kingfisher за замовчуванням зберігають кешовані зображення саме в Caches.

Тип данихПідходить для CachesТермін зберігання
JSON API-відповідіТакДо очищення системою
Зображення з мережіТакДо очищення системою
Логи налагодженняУмовноКраще в tmp
Збереження ігорНіТільки Documents
Конфігурації застосункуНіApplication Support

Якщо дані не можуть бути відновлені — їм не місце в Caches. Це найпростіший критерій: уяви, що завтра система видалить всі файли з Caches. Якщо застосунок продовжить коректно працювати — дані зберігаються правильно.

Як система керує очищенням кешу

iOS автоматично керує очищенням Caches Directory, але точні тригери та алгоритми не задокументовані Apple. Відомо, що система може видаляти файли з Caches при нестачі місця на диску, а також при роботі функції Offload Unused Apps.

Процес очищення — прозорий для застосунку: система видаляє файли без повідомлення. Застосунок повинен перевіряти наявність файлу перед читанням та створювати його заново за відсутності. Нерозраховування на довгострокове зберігання — ключова вимога при роботі з Caches.

За даними статті Apple «File System Basics» (2024), застосунок не повинен розраховувати на те, що файли в Caches Directory будуть доступні між сесіями. Розробникам рекомендується реалізувати fallback-механізм: при відсутності кешованого файлу — завантажити дані з мережі та зберегти в Caches знову.

Окремий сценарій — вивантаження застосунку (Offload). При активації цієї функції iOS видаляє застосунок, але зберігає його Documents Directory. Caches Directory при цьому видаляється. Користувач, який відновив застосунок, не отримає кешовані дані — застосунок повинен завантажити їх заново.

Caches Directory vs Temporary Directory

Різниця між Caches та Temporary (tmp) директоріями часто викликає плутанину у розробників. Обидві директорії зберігають тимчасові дані, але з різними гарантіями часу життя та призначенням.

ХарактеристикаCaches DirectoryTemporary Directory
Час життяВід сесії до сесії (не гарантовано)Тільки в межах сесії
Очищення системоюПри нестачі місцяПри завершенні сесії або перезавантаженні
ПризначенняКеш для прискорення роботиДуже тимчасові дані
ПрикладКешовані зображенняТимчасовий файл перед експортом
БекапНіНі

Обирай Caches, якщо дані корисно зберігати між запусками застосунку, але їх можна відновити. Використовуй tmp, якщо дані потрібні лише в рамках поточної сесії та не мають цінності після завершення застосунку.

Кращі практики роботи з Caches

Робота з Caches Directory вимагає дотримання кількох правил, які допомагають уникнути втрати даних, неочікуваної поведінки застосунку та проблем з продуктивністю.

Завжди перевіряй наявність файлу перед читанням

FileManager.fileExists(atPath:) повинен викликатися перед кожним читанням з Caches. Якщо файл відсутній — завантаж дані з першоджерела та збережи в кеш. Ніколи не припускай, що файл з Caches існує.

Обмежуй розмір кешу

Встановлюй максимальний розмір Caches Directory в застосунку. Наприклад, ліміт у 50 МБ для зображень та 10 МБ для JSON-відповідей. При перевищенні ліміту видаляй найстаріші файли за датою модифікації.

swift
import Foundation

func trimCache(to maxSizeBytes: Int) {
    let cachesURL = FileManager.default
        .urls(for: .cachesDirectory, in: .userDomainMask)
        .first!

    guard let enumerator = FileManager.default
        .enumerator(
            at: cachesURL,
            includingPropertiesForKeys: [.fileSizeKey, .contentModificationDateKey]
        )
    else { return }

    // Enumerate and remove old files
    // when exceeding size limit
}

Дотримання цих практик гарантує, що застосунок коректно працює при будь-яких діях системи щодо очищення кешу, а користувач не стикається з неочікуваною втратою даних.

Часті запитання

Чи повідомляє система застосунок перед очищенням Caches Directory?

Ні, iOS не надсилає повідомлень перед видаленням файлів з Caches. Процес очищення повністю прозорий для застосунку. Єдиний спосіб дізнатися про видалення — при спробі читання файлу FileManager поверне nil або викине помилку, і застосунок повинен обробити цю ситуацію.

Чи може користувач вручну очистити Caches Directory?

Прямого доступу до Caches Directory через Files або iTunes у користувача немає. Однак користувач може очистити кеш всіх застосунків через Налаштування > Основні > Сховище, вибравши конкретний застосунок та натиснувши «Вивантажити застосунок». Також iOS може автоматично очищати кеш при нестачі місця.

Чим відрізняється URLCache від ручного збереження в Caches Directory?

URLCache — це вбудований механізм кешування HTTP-запитів від Foundation. Він автоматично зберігає та завантажує кешовані відповіді, використовуючи Caches Directory всередині. Ручне збереження дає більше контролю: можна вибирати формат, шифрувати дані та керувати часом життя кожного файлу індивідуально.

Що станеться з Caches Directory при оновленні застосунку?

При оновленні застосунку через App Store Caches Directory зберігається. Однак вміст може бути видалений системою, якщо нове оновлення потребує більше місця для встановлення. Розробнику не слід покладатися на збереженість Caches після оновлення — це додаткова причина для реалізації fallback-механізму.

Як вимкнути автоматичне кешування для NSURLSession?

Встанови URLCache в nil для конкретної сесії NSURLSession або використовуй політику кешування .reloadIgnoringLocalCacheData. Також можна створити конфігурацію URLSessionConfiguration з порожнім кешем: sessionConfiguration.urlCache = nil. Це корисно для даних, які завжди повинні бути актуальними.

Підсумки

  • Caches Directory — тимчасове сховище для даних, які можна відновити з мережі або перестворити.
  • Система iOS може в будь-який момент видалити файли з Caches без повідомлення застосунку.
  • Дані з Caches не включаються в iCloud та iTunes резервні копії, що економить місце.
  • Шлях до директорії — FileManager.urls(for: .cachesDirectory) у Swift або NSSearchPathForDirectoriesInDomains в Objective-C.
  • У Caches зберігають кешовані зображення, JSON-відповіді API та інші відновлювані дані.
  • На відміну від tmp, Caches може зберігати дані між запусками, але без гарантій.
  • Завжди перевіряй наявність файлу перед читанням з Caches та реалізуй fallback-завантаження.

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також