Temporary Directory (tmp) — egy könyvtár az iOS alkalmazás homokozójában, amely nagyon rövid idejű adatok tárolására szolgál, amelyek csak az aktuális alkalmazásmunkamenetben szükségesek. Az Apple File System Programming Guide (2024) szerint a rendszer minden alkalmazás befejezésekor vagy az eszköz újraindításakor kiürítheti a tmp-t. A Caches Directory-val ellentétben a tmp ideiglenes fájljai nem az indítások közötti tárolásra szolgálnak — a fejlesztőnek explicit módon el kell távolítania azokat használat után, hogy ne foglaljanak helyet a lemezen.
Főbb pontok
Temporary Directory (más néven tmp) — egy könyvtár az iOS alkalmazás homokozójában, amely az aktuális munkamenetre korlátozott élettartamú adatok tárolására szolgál. Ez a legrövidebb idejű tároló az összes homokozó könyvtár közül.
Az iOS a tmp-t köztes fájltárolást igénylő műveletekhez biztosítja: fájl letöltése a Documents-ba helyezés előtt, ideiglenes másolat készítése exportálás előtt, adatfolyamok pufferelése. A művelet befejezése után az ideiglenes fájlokat el kell távolítani.
Az Apple Developer Documentation (2024) szerint a tmp könyvtár egyedi, mert elérési útja változhat az alkalmazás indításai között. Az iOS minden indításkor új útvonalat generál a tmp-hez — ez garantálja, hogy az előző munkamenet adatai véletlenül se olvashatók ki. A fejlesztő soha ne mentse el a tmp elérési útját az indítások között.
Fontos: a Caches Directory-val ellentétben, ahol az adatok több indítást is túlélhetnek, a tmp nem garantálja az adatok tárolását a munkamenetek között hosszú távon. Ez a legmegbízhatóbb mód a tényleg ideiglenes adatok tárolására.
Swift-ben a tmp elérési útjának megszerzéséhez az NSTemporaryDirectory() globális függvényt vagy a FileManager.temporaryDirectory-t használjuk. Ez a legegyszerűbb API az összes homokozó könyvtár közül.
import Foundation
// 1. lehetőség: NSTemporaryDirectory()
let tempDir = NSTemporaryDirectory()
let tempFile = (tempDir as NSString)
.appendingPathComponent("export_temp.pdf")
// 2. lehetőség: FileManager.temporaryDirectory (URL)
let tempURL = FileManager.default.temporaryDirectory
let exportURL = tempURL.appendingPathComponent("export_temp.pdf")
Az Objective-C ugyanazt a globális függvényt használja: NSTemporaryDirectory(). Az eredmény — egy karakterlánc az alkalmazás ideiglenes könyvtárának teljes elérési útjával.
@import Foundation;
NSString *tempDir = NSTemporaryDirectory();
NSString *tempFile = [tempDir stringByAppendingPathComponent:@"temp_data.bin"];
A legfontosabb különbség a többi könyvtárhoz képest: az NSTemporaryDirectory() nem igényli a tartomány vagy maszk megadását — ez egy globális függvény. Az út azonban változhat a következő indításkor, ezért soha ne mentse el a UserDefaults vagy más állandó tárolóba.
Temporary Directory szigorúan meghatározott forgatókönyvekhez készült. A fejlesztők gyakran összekeverik a tmp-t a Caches-szel, és olyan adatokat helyeznek el a tmp-ben, amelyeknek több mint egy munkamenetet kellene élniük. Nézzük meg a helyes használati eseteket.
Fájlok amelyek az adatexportálás során jönnek létre: a jelentés ideiglenes másolata e-mail küldés előtt, tömörített archívum letöltés előtt, formátumkonverzió köztes fájlja. Az exportálás befejezése után a fájlt el kell távolítani.
Ideiglenes pufferek audio, video vagy adatfolyamok valós idejű feldolgozásához. Például hangfelvétel az állandó tárolóba mentés előtt, vagy video adatfolyam pufferelése streaming közben.
| Forgatókönyv | Könyvtár | Indoklás |
|---|---|---|
| Exportálás PDF küldés előtt | tmp | Fájl nem szükséges küldés után |
| Gyorsítótár képek | Caches | Hasznos munkamenetek között |
| Letöltés fájl áthelyezés előtt | tmp | Köztes tárolás |
| Naplók munkamenet | tmp | Csak a munkamenetben aktuális |
| Szerkesztés dokumentum | tmp | Változat mentés előtt |
Ha az adatok csak itt és most szükségesek — használja a tmp-t. Ha a következő munkamenetben is hasznosak lehetnek — használja a Caches-t. Ha az adatvesztés elfogadhatatlan — használja a Documents-t.
Az iOS másképpen kezeli a tmp életciklusát, mint a homokozó többi könyvtárát. Ennek az életciklusnak a megértése kritikus fontosságú a fájltárolás helyes megtervezéséhez az alkalmazásban.
Minden egyes indításkor az iOS új elérési útvonalat rendelhet a tmp-hez. Az előző útvonal elérhetetlenné válik, bár a fizikai fájlok az eszköz újraindításáig a lemezen maradhatnak. Pontosan emiatt az Apple határozottan javasolja, hogy ne mentse a tmp elérési útvonalát a munkamenetek között.
Az Apple Tech Note TN2150 (2024) szerint a rendszer a következő esetekben ürítheti ki a tmp-t: az eszköz újraindításakor, a lemezterüelem elérésekor, az alkalmazás kiürítésekor (Offload). A Caches-szel ellentétben a tmp nem alkalmas adatok tárolására több indításon keresztül sem — ez a homokozó legkevésbé megbízható tárolója.
A fejlesztő köteles explicit módon eltávolítani az ideiglenes fájlokat a művelet befejezése után a FileManager.removeItem(at:) segítségével. Az el nem távolított fájlok a tmp-ben felhalmozódnak és helyet foglalnak a lemezen — az iOS nem garantálja automatikus törlésüket a közeljövőben.
A tmp és a Caches összehasonlítása segít a fejlesztőknek a helyes döntés meghozatalában a tároló könyvtár kiválasztásakor. A választásban elkövetett hiba vagy az adatok idő előtti elvesztéséhez, vagy indokolatlan helypazarláshoz vezethet.
| Paraméter | Temporary Directory | Caches Directory |
|---|---|---|
| Élettartam | Csak aktuális munkamenet | Munkamenetek között (garancia nélkül) |
| Útváltozás | Minden indításkor változhat | Stabil útvonal |
| Automatikus törlés | Újraindításkor, kiürítéskor | Helyhiány esetén |
| Eltávolítás fejlesztő által | Kötelező művelet után | Javasolt limit túllépésekor |
| Használat | Köztes műveletek | Állandó gyorsítótár |
Gyakorlati szabály: válassza a tmp-t azon adatokhoz, amelyek a létrehozás után néhány másodpercen vagy percen belül törlődnek. Válassza a Caches-t azon adatokhoz, amelyeket érdemes néhány órán vagy napon át megtartani a munkamenetek között, de újra létrehozhatók.
A Temporary Directory-val való munka fegyelmet igényel: mivel a tmp-ben lévő adatok rövid életűek, és felhalmozódásuk indokolatlan helypazarláshoz vezethet, a fejlesztőnek be kell tartania néhány alapvető gyakorlatot.
A FileManager.removeItem(at:) hívást azonnal meg kell tenni az ideiglenes fájllal végzett művelet befejezése után. Használja a defer-t Swift-ben a garatált eltávolításhoz, még hiba esetén is.
import Foundation
let tempURL = FileManager.default
.temporaryDirectory
.appendingPathComponent("upload_temp.dat")
defer {
try? FileManager.default.removeItem(at: tempURL)
}
// Munka ideiglenes fájllal
try "temporary data".write(to: tempURL, atomically: true)
// ... fájlművelet ...
// a defer a hatáskörből való kilépéskor fut le
Ha az adatokra a létrehozás után egy órával is szükség lehet — mentse azokat a Caches-be vagy Application Support-ba. A tmp percnyi műveletekre való, nem tárolásra.
E szabályok betartása garantálja, hogy az ideiglenes fájlok nem halmozódnak fel, a lemezterüelet hatékonyan használják, és az alkalmazás megfelelően kezeli az iOS fájlrendszer bármely tisztítási forgatókönyvét.
Gyakran Ismételt Kérdések
Általában az útvonal nem változik egy munkameneten belül, de az iOS nem ad garanciát. Ritka esetekben a rendszer megváltoztathatja a tmp-t, amikor az alkalmazás a háttérből aktív állapotba kerül. Ezért az Apple azt javasolja, hogy minden híváskor az NSTemporaryDirectory()-n keresztül kérje le a tmp elérési útvonalát, ahelyett, hogy változóban tárolná.
Fájlok fognak felhalmozódni és helyet foglalni a lemezen. Az iOS kiürítheti a tmp-t az eszköz újraindításakor, de addig az alkalmazás feleslegesen foglalja a lemezterüelet. Jelentős felhalmozódás esetén a felhasználó láthatja a tárhely beállításokban, hogy az alkalmazás sok helyet foglal.
Igen, használhatja a DataProtectionType-t NSFileProtectionComplete-tel az érzékeny adatokat tartalmazó ideiglenes fájlokhoz. Ne feledje azonban: ha a fájl csak az aktuális munkamenetben kerül beolvasásra, majd törlődik — a titkosítás felesleges lehet. Ítélje meg a titkosítás szükségességét az adatok típusa alapján.
Használja a ProcessInfo.processInfo.globallyUniqueString-t egyedi azonosító generálásához vagy az UUID().uuidString-t. A FileManager rendelkezik az urlForCreatingTemporaryFile metódussal is, amely automatikusan egyedi nevet generál a tmp-ben. Ez garantálja az ütközések hiányát párhuzamos íráskor.
Közvetve — igen. Az Apple figyelmet fordít az alkalmazás által a lemezen tárolt adatok összméretére. Ha a tmp gigabájtnyi el nem távolított fájlt tartalmaz, az értékelő elutasíthatja az alkalmazást. Az ajánlott korlát a tmp számára — legfeljebb 100 MB bármely pillanatban. Rendszeresen tisztítsa a tmp-t és ellenőrizze a méretét a FileManager segítségével.
Összefoglaló
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is