Temporary Directory (tmp) — је директоријум у пескунику iOS апликације за чување врло краткотрајних података који су потребни само у оквиру тренутне сесије апликације. Према Apple File System Programming Guide (2024), систем може очистити tmp при сваком завршетку апликације или при поновном покретању уређаја. За разлику од Caches Directory, привремене датотеке у tmp нису намењене за чување између покретања — програмер мора јасно да их обрише након употребе да не би заузимали простор на диску.
Главно
Temporary Directory (такође познат као tmp) — је директоријум унутар пескуника iOS апликације, намењен за чување података чији је век трајања ограничен на тренутну сесију. Ово је најкраће складиште међу свим директоријумима пескуника.
iOS пружа tmp за операције које захтевају посредно складиштење датотека: преузимање датотеке пре премештања у Documents, креирање привремене копије пре извоза, буферисање података у току. Након завршетка операције, привремене датотеке морају бити обрисане.
Према Apple Developer Documentation (2024), tmp директоријум је јединствен јер се његова путања може мењати између покретања апликације. iOS генерише нову путању до tmp при сваком покретању — ово гарантује да подаци из претходне сесије неће бити случајно прочитани. Програмер никада не треба да чува путању до tmp између покретања.
Важно: за разлику од Caches Directory, где подаци могу да преживе више покретања, tmp не гарантује чување података између сесија на дуги рок. Ово је најпоузданији начин за чување стварно привремених података.
У Swift-у за добијање путање до tmp користи се глобална функција NSTemporaryDirectory() или FileManager.temporaryDirectory. Ово је најједноставнији API међу свим директоријумима пескуника.
import Foundation
// Опција 1: NSTemporaryDirectory()
let tempDir = NSTemporaryDirectory()
let tempFile = (tempDir as NSString)
.appendingPathComponent("export_temp.pdf")
// Опција 2: FileManager.temporaryDirectory (URL)
let tempURL = FileManager.default.temporaryDirectory
let exportURL = tempURL.appendingPathComponent("export_temp.pdf")
Objective-C користи исту глобалну функцију NSTemporaryDirectory(). Резултат — низ са пуном путањом до привременог директоријума апликације.
@import Foundation;
NSString *tempDir = NSTemporaryDirectory();
NSString *tempFile = [tempDir stringByAppendingPathComponent:@"temp_data.bin"];
Кључна разлика од других директоријума: NSTemporaryDirectory() не захтева навођење домена или маске — то је глобална функција. Међутим, путања се може променити при следећећем покретању, па је никада не чувајте у UserDefaults или некој другој трајној меморији.
Temporary Directory је намењена за строго дефинисан скуп сценарија. Програмери често бркају tmp са Caches, смештајући у tmp податке који би требало да трају дуже од једне сесије. Размотримо исправне случајеве употребе.
Датотеке креиране у процесу извоза података: привремена копија извештаја пре слања поштом, компримована архива пре преузимања, посредна датотека конверзије формата. Након завршетка извоза, датотека мора бити обрисана.
Привремени буфери за снимање аудио, видео или података у току који се обрађују у реалном времену. На пример, снимање гласа пре чувања у трајној меморији или буферисање видео тока при стримовању.
| Сценаријо | Директоријум | Образложење |
|---|---|---|
| Извоз PDF пре слања | tmp | Датотека није потребна након слања |
| Кеш слика | Caches | Корисно између сесија |
| Преузимање датотеке пре премештања | tmp | Посредно складиште |
| Дневници сесије | tmp | Ажурни само у сесији |
| Уређивање документа | tmp | Верзија пре чувања |
Ако су подаци потребни само овде и сада — користи tmp. Ако би могли бити корисни у следећој сесији — користи Caches. Ако је губитак података неприхватљив — користи Documents.
iOS управља животним циклусом tmp друкачије него другим директоријумима пескуника. Разумевање овог циклуса је критично за правилно пројектовање складиштења датотека у апликацији.
При сваком покретању апликације, iOS може да додели нову путању за tmp. Претходна путања постаје недоступна, иако физичке датотеке могу остати на диску до поновног покретања уређаја. Управо из овог разлога Apple снажно препоручује да не чувате путању до tmp између сесија.
Према Apple Tech Note TN2150 (2024), систем може да очисти tmp у следећим случајевима: при поновном покретању уређаја, при достизању лимита простора на диску, при искрцавању апликације (Offload). За разлику од Caches, tmp није намењена за чување података чак ни у оквиру више покретања — то је најнепоузданије складиште у пескунику.
Програмер је дужан да јасно обрише привремене датотеке након завршетка операције помоћу FileManager.removeItem(at:). Необрисане датотеке у tmp се аккумулирају и заузимају простор на диску — iOS не гарантује њихово аутоматско брисање у скорој будућности.
Поређење tmp и Caches помаже програмерима да донесу исправну одлуку при избору директоријума за складиштење. Грешка у избору може довести или до превременог губитка података или до неоправданог трошења простора.
| Параметар | Temporary Directory | Caches Directory |
|---|---|---|
| Век трајања | Само тренутна сесија | Између сесија (без гаранције) |
| Промена путање | Може се мењати сваки пут | Стабилна путања |
| Аутоматско брисање | При поновном покретању, искрцавању | При недостатку простора |
| Брисање од стране програмера | Обавезно након операције | Препоручује се при прекорачењу лимита |
| Употреба | Посредне операције | Трајни кеш |
Практично правило: бирајте tmp за податке који ће бити обрисани у року неколико секунди или минута након креирања. Бирајте Caches за податке које вреди сачувати неколико сати или дана између сесија, али који се могу поново креирати.
Рад са Temporary Directory захтева дисциплину: јер су подаци у tmp краткотрајни, а њихово аккумулирање може довести до неоправданог трошења простора, програмер мора да се придржава неколико кључних пракси.
FileManager.removeItem(at:) треба да се позове одмах након завршетка операције са привременом датотеком. Користи defer у Swift-у за гарантовано брисање чак и у случају грешке.
import Foundation
let tempURL = FileManager.default
.temporaryDirectory
.appendingPathComponent("upload_temp.dat")
defer {
try? FileManager.default.removeItem(at: tempURL)
}
// Рад са привременом датотеком
try "temporary data".write(to: tempURL, atomically: true)
// ... рад са датотеком ...
// defer се извршава при изласку из обима
Ако би подаци могли бити потребни након сат дана након креирања — сачувајте их у Caches или Application Support. tmp је намењена за минутне операције, не за складиштење.
Придржавање овим правилима гарантује да се привремене датотеке не аккумулирају, да се простор на диску користи ефикасно, и да апликација исправно обрађује сваки сценаријом брисања iOS датотечног система.
Често постављана питања
Обично се путања не мења у оквиру једне сесије, али iOS не даје гаранције. У ретким случајевима, систем може променити tmp при преласку апликације из позадине у активно стање. Зато Apple препоручује да се путања до tmp добија путем NSTemporaryDirectory() при сваком позиву, уместо да је чувате у промењивој.
Датотеке ће се аккумулирати и заузимати простор на диску. iOS може да очисти tmp при поновном покретању уређаја, али до тада ће апликација беспотребно трошити простор на диску. При значајној аккумулацији, корисник може да види у поставкама меморије да апликација заузима пуно простора.
Да, можете користити DataProtectionType са NSFileProtectionComplete за привремене датотеке које садрже осетљиве податке. Али запамтите: ако ће датотека бити прочитана само у оквиру тренутне сесије и затим обрисана — шифровање може бити претерано. Процијените потребу за шифровањем на основу типа података.
Користите ProcessInfo.processInfo.globallyUniqueString за генерисање јединственог идентификатора или UUID().uuidString. FileManager такође пружа методу urlForCreatingTemporaryFile која аутоматски генерише јединствено име у tmp. Ово гарантује одсуство колизија при паралелном уписивању.
Посредно — да. Apple обраћа пажњу на укупну величину података које апликација складишти на диску. Ако tmp садржи гигабајте необрисаних датотека, рецензент може да одбије апликацију. Препоручена граница за tmp — не више од 100 MB у сваком тренутку. Редовно чистите tmp и проверавајте његову величину путем FileManager-а.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође