Caches Directory — je adresář v sandboxu iOS aplikace, určený pro ukládání dočasných dat, která lze obnovit nebo znovu načíst ze sítě. Podle Apple File System Basics (2024) může systém kdykoli odstranit soubory z Caches Directory, aby uvolnil místo na disku — aplikace musí správně zpracovat absenci těchto souborů a v případě potřeby je obnovit. Na rozdíl od Documents Directory data z Caches nejsou zahrnuta do záloh iCloud a iTunes, což snižuje zatížení cloudového úložiště uživatele.
Hlavní body
Caches Directory — je adresář uvnitř sandboxu iOS aplikace, optimalizovaný pro ukládání dat, která lze v případě potřeby obnovit. Na rozdíl od Documents Directory není Caches určen pro uživatelská data — je to dočasné úložiště pro urychlení činnosti aplikace.
iOS používá Caches Directory pro umístění ukládaných do mezipaměti síťových odpovědí, předem načtených obrázků, serializovaných objektů a dat, která aplikace může obnovit. Vývojář by neměl spoléhat na dlouhodobé ukládání dat v tomto adresáři.
Podle údajů Apple WWDC 2020 přibližně 40% iOS aplikací používá Caches Directory pro ukládání obrázků v mezipaměti a síťových dat, přičemž 25% vývojářů nesprávně umísťuje do Caches data, která by měla být v Documents nebo Application Support, kvůli nepochopení rozdílů mezi těmito adresáři.
Kritická vlastnost Caches: aplikace musí správně zpracovat situaci, kdy byl soubor z mezipaměti odstraněn systémem. Pokud je po odstranění mezipaměti funkčnost aplikace narušena — znamená to, že data jsou uložena ve špatném adresáři.
V Swift se cesta k Caches Directory získává standardní metodou FileManager s uvedením .cachesDirectory. Je to jednoduchá operace, používaná prakticky v každé iOS aplikaci pracující se síťovými daty.
import Foundation
let fileManager = FileManager.default
guard let cachesURL = fileManager.urls(
for: .cachesDirectory,
in: .userDomainMask
).first else { return }
// Uložit JSON do mezipaměti
let cacheFile = cachesURL.appendingPathComponent("feed_cache.json")
let jsonData = try JSONSerialization.data(
withJSONObject: response,
options: [.prettyPrinted]
)
try jsonData.write(to: cacheFile)
Objective-C používá NSSearchPathForDirectoriesInDomains s NSCachesDirectory. Přestože Apple doporučuje Swift API, kód Objective-C s Caches Directory zůstává funkční a podporovaný.
@import Foundation;
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSCachesDirectory,
NSUserDomainMask,
YES
);
NSString *cachesPath = paths.firstObject;
NSString *cacheFile = [cachesPath stringByAppendingPathComponent:@"feed_cache.plist"];
Swift projekty by měly preferovat API založené na URL: je typově bezpečné a lépe se integruje s moderními frameworky jako SwiftUI a Combine.
Caches Directory je optimální pro několik kategorií dat, která aplikace používá k urychlení činnosti, ale není jediným zdrojem pravdy. Správný výběr dat pro ukládání do mezipaměti přímo ovlivňuje UX a výkon aplikace.
Odpovědi JSON z API, data zpravodajských kanálů, seznamy objektů — vše, co aplikace může znovu načíst ze serveru. Použijte URLCache pro automatické ukládání HTTP odpovědí do mezipaměti nebo ručně ukládejte serializované objekty.
Obrázky načtené ze sítě — nejčastější případ použití Caches Directory. Knihovny jako SDWebImage a Kingfisher standardně ukládají obrázky v mezipaměti právě do Caches.
| Typ dat | Vhodné pro Caches | Doba uchování |
|---|---|---|
| JSON odpovědi API | Ano | Do vyčištění systémem |
| Obrázky ze sítě | Ano | Do vyčištění systémem |
| Logy ladění | Podmíněně | Lépe v tmp |
| Uložené pozice her | Ne | Pouze Documents |
| Konfigurace aplikace | Ne | Application Support |
Pokud data nelze obnovit — jejich místo není v Caches. Toto je nejjednodušší kritérium: představte si, že zítra systém odstraní všechny soubory z Caches. Pokud aplikace nadále funguje správně — data jsou uložena správně.
iOS automaticky spravuje čištění Caches Directory, ale přesné spouštěče a algoritmy nejsou dokumentovány Apple. Je známo, že systém může odstranit soubory z Caches při nedostatku místa na disku, stejně jako při funkci Offload Unused Apps.
Proces čištění je transparentní pro aplikaci: systém odstraňuje soubory bez upozornění. Aplikace musí před čtením zkontrolovat existenci souboru a v případě neexistence jej znovu vytvořit. Nespoléhání na dlouhodobé ukládání — je klíčový požadavek při práci s Caches.
Podle článku Apple "File System Basics" (2024) by aplikace neměla počítat s tím, že soubory v Caches Directory budou k dispozici mezi relacemi. Vývojářům se doporučuje implementovat fallback mechanismus: při neexistenci souboru v mezipaměti — načtěte data ze sítě a znovu je uložte do Caches.
Samostatný scénář — vykládání aplikace (Offload). Při aktivaci této funkce iOS odstraní aplikaci, ale zachová její Documents Directory. Caches Directory je přitom odstraněn. Uživatel, který obnovil aplikaci, nezíská data v mezipaměti — aplikace je musí znovu načíst.
Rozdíl mezi Caches a Temporary (tmp) často způsobuje zmatek mezi vývojáři. Oba adresáře ukládají dočasná data, ale s různými zárukami životnosti a účelem.
| Charakteristika | Caches Directory | Temporary Directory |
|---|---|---|
| Životnost | Od relace k relaci (není zaručena) | Pouze v rámci relace |
| Čištění systémem | Při nedostatku místa | Při ukončení relace nebo restartu |
| Účel | Mezipaměť pro zrychlení | Velmi dočasná data |
| Příklad | Obrázky v mezipaměti | Dočasný soubor před exportem |
| Záloha | Ne | Ne |
Zvolte Caches, pokud je užitečné uchovávat data mezi spuštěními aplikace, ale lze je obnovit. Použijte tmp, pokud jsou data potřebná pouze v aktuální relaci a po ukončení aplikace nemají hodnotu.
Práce s Caches Directory vyžaduje dodržování několika pravidel, která pomáhají vyhnout se ztrátě dat, neočekávanému chování aplikace a problémům s výkonem.
FileManager.fileExists(atPath:) by měl být volán před každým čtením z Caches. Pokud soubor chybí — načtěte data z původního zdroje a uložte do mezipaměti. Nikdy nepředpokládejte, že soubor z Caches existuje.
Nastavte maximální velikost Caches Directory v aplikaci. Například limit 50 MB pro obrázky a 10 MB pro odpovědi JSON. Při překročení limitu odstraňte nejstarší soubory podle data změny.
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 }
// Vypsat a odstranit staré soubory
// při překročení limitu velikosti
}
Dodržování těchto postupů zaručuje, že aplikace funguje správně při všech akcích systému pro čištění mezipaměti a uživatel se nesetkává s neočekávanou ztrátou dat.
Často kladené otázky
Ne, iOS neodesílá oznámení před odstraněním souborů z Caches. Proces čištění je pro aplikaci zcela transparentní. Jediný způsob, jak se o odstranění dozvědět — při pokusu o čtení souboru FileManager vrátí nil nebo vyvolá chybu a aplikace musí tuto situaci zpracovat.
Přímý přístup k Caches Directory přes Files nebo iTunes uživatel nemá. Uživatel však může vyčistit mezipaměť všech aplikací přes Nastavení > Obecné > Úložiště, výběrem konkrétní aplikace a stisknutím "Vykládání aplikace". iOS může také automaticky čistit mezipaměť při nedostatku místa.
URLCache — je vestavěný mechanismus ukládání HTTP požadavků do mezipaměti z Foundation. Automaticky ukládá a načítá odpovědi v mezipaměti, přičemž na pozadí používá Caches Directory. Ruční ukládání poskytuje větší kontrolu: můžete zvolit formát, šifrovat data a spravovat životnost každého souboru individuálně.
Při aktualizaci aplikace přes App Store je Caches Directory zachován. Obsah však může být systémem odstraněn, pokud nová aktualizace vyžaduje více místa pro instalaci. Vývojář by neměl spoléhat na zachování Caches po aktualizaci — to je další důvod pro implementaci fallback mechanismu.
Nastavte URLCache na nil pro konkrétní relaci NSURLSession nebo použijte zásadu ukládání do mezipaměti .reloadIgnoringLocalCacheData. Můžete také vytvořit konfiguraci URLSessionConfiguration s prázdnou mezipamětí: sessionConfiguration.urlCache = nil. To je užitečné pro data, která musí být vždy aktuální.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také