A fájlrendszerrel való munka minden mobilalkalmazás alapja. Minden platform saját hozzáférési modellt kínál: az iOS Sandbox funkciója elkülöníti az alkalmazásokat külön tárolókban, míg az Android Scoped Storage korlátozza a közös tárhelyhez való közvetlen hozzáférést. A Google Developer Documentation (2026) szerint a Scoped Storage bevezetése az Android 10 rendszerrel az adattárolási architektúra teljes felülvizsgálatát tette szükségessé. Ebben az útmutatóban a FileManager, MediaStore API, Storage Access Framework és DocumentProvider funkciókat tárgyaljuk mindkét platformhoz.
Főbb pontok
A fájlrendszer a mobilalkalmazásokban API-k, biztonsági szabályok és korlátozások összessége, amelyek meghatározzák az adatok tárolását és elérését iOS és Android eszközökön. Az asztali operációs rendszerekkel ellentétben a mobilplatformok elkülönítik az egyes alkalmazásokat, hogy megvédjék a felhasználói adatokat más programok általi jogosulatlan olvasástól.
Az iOS a Sandbox modellt használja, ahol minden alkalmazás a saját tárolójában létezik szigorúan korlátozott engedélyekkel. A 10-es verzió előtt az Android teljes hozzáférést biztosított a külső tárhelyhez, de a Scoped Storage bevezetésével a megközelítés közelebb került az iOS-hez. A fő különbség, hogy az iOS teljesen elkülöníti a fájlrendszert, míg az Android több hozzáférési szintet kínál: egy privát könyvtárat, nyilvános MediaStore-t és ideiglenes hozzáférést SAF segítségével.
A mobilalkalmazások háromféle adattárolást használnak. Privát tárolás — egy csak az alkalmazás számára elérhető könyvtár belső fájlok és gyorsítótár számára. Megosztott tárolás — médiafájlok a MediaStore (Android) vagy Files App (iOS) segítségével. Felhőtárolás — iCloud Drive és Google Drive az eszközök közötti szinkronizáláshoz. Minden típusnak megvannak a saját korlátai a méret, a fájlok élettartama és a hozzáférési feltételek tekintetében.
| Tárolási típus | iOS | Android |
|---|---|---|
| Privát | Documents, Library, Caches | getFilesDir(), getCacheDir() |
| Megosztott média | PHPhotoLibrary választón keresztül | MediaStore API (ContentResolver) |
| Megosztott dokumentumok | Files App UIDocumentPicker segítségével | Storage Access Framework (SAF) |
| Felhő | iCloud Drive (UIDocument) | Google Drive API |
| Gyorsítótár | Caches könyvtár, rendszer tisztítja | getCacheDir(), getExternalCacheDir() |
Sandbox az iOS biztonsági architektúrája, amely elkülöníti az egyes alkalmazásokat. Egy alkalmazás csak a saját homokozóján belül olvashat és írhat. Névjegyek, fényképek vagy más alkalmazások fájljainak eléréséhez rendszerválasztókat kell használni: UIImagePickerController vagy UIDocumentPickerViewController. A Files App elérése az Info.plist fájlban lévő UIFileSharingEnabled jelzőn keresztül konfigurálható. A fájlrendszer az iOS mobilfejlesztésben megköveteli a könyvtárszerkezet megértését és a megfelelő hely kiválasztását minden adattípushoz.
Az iOS homokozó több szabványos könyvtárból áll. Documents — felhasználói fájlokhoz, része az iCloud Backupnak. Caches — ideiglenes adatokhoz, amelyeket a rendszer törölhet, ha kevés a tárhely. Temporary — az aktuális munkamenet fájljaihoz, újraindításkor törlődik. Application Support — a felhasználó elől elrejtett belső alkalmazásadatokhoz. A rossz könyvtár kiválasztása problémákhoz vezet: a gyorsítótár mentése a Documents könyvtárba iCloud helyet pazarol és megsérti az Apple fájlrendszerre vonatkozó irányelveit.
import Foundation
let fileManager = FileManager.default
guard let documentsURL = fileManager.urls(
for: .documentDirectory,
in: .userDomainMask
).first else { return }
let fileURL = documentsURL.appendingPathComponent("notes.txt")
let text = "Содержимое файла"
// Atomi írás titkosítással
try text.write(
to: fileURL,
atomically: true,
encoding: .utf8
)
A FileManager osztály teljes módszerkészletet biztosít a fájlok kezeléséhez iOS rendszeren. A FileManager.default egy szálbiztos szingleton, amely a legtöbb művelethez alkalmas. Az olyan metódusok, mint a fileExists(atPath:), createDirectory(at:withIntermediateDirectories:attributes:), copyItem(at:to:) és removeItem(at:) lefedik az alapszintű forgatókönyveket. Az 1 MB-nál nagyobb fájlműveleteket háttérszálon kell végrehajtani a DispatchQueue.global() segítségével. Nagy mennyiségek streameléséhez használja a FileHandle-t ahelyett, hogy a teljes fájlt a memóriába töltené.
func readDocumentsFile(named fileName: String) -> String? {
guard let docsURL = FileManager.default.urls(
for: .documentDirectory,
in: .userDomainMask
).first else { return nil }
let fileURL = docsURL.appendingPathComponent(fileName)
return try? String(contentsOf: fileURL)
}
Az Android 10 megjelenésével a Google bevezette a Scoped Storage funkciót — a fájlrendszer korlátozott hozzáférési modelljét. Egy alkalmazás csak a saját privát könyvtáraiban olvashat és írhat szabadon. Médiafájlokhoz (fényképek, videók, hang) a MediaStore API használatos a ContentResolver segítségével. Tetszőleges dokumentumokhoz a Storage Access Framework használatos az Intent ACTION_OPEN_DOCUMENT segítségével. Android 11+ rendszeren a külső tárhely gyökeréhez való közvetlen hozzáférés teljesen tilos, és minden fejlesztőnek az új API-kat kell használnia.
MediaStore egy rendszer ContentProvider a médiafájlok eléréséhez az eszközön. A ContentResolver segítségével az alkalmazás a fájlok Uri-ját kéri a közvetlen elérési utak helyett. MediaStore.Files — minden fájltípushoz, Images — képekhez, Video — videókhoz, Audio — hangfelvételekhez. A megosztott könyvtárakba írás az insert() segítségével történik DISPLAY_NAME, MIME_TYPE és RELATIVE_PATH megadásával. A beszúrás után az alkalmazás kap egy Uri-t, amelyen keresztül a bájtok íródnak. A MIME típusok kulcsszerepet játszanak — a helytelen típus hibát okoz a fájl megnyitásakor.
val contentValues = ContentValues().apply {
put(MediaStore.MediaColumns.DISPLAY_NAME, "report.pdf")
put(MediaStore.MediaColumns.MIME_TYPE, "application/pdf")
put(MediaStore.MediaColumns.RELATIVE_PATH, "Documents/Reports")
}
val uri = contentResolver.insert(
MediaStore.Files.getContentUri("external"),
contentValues
)
uri?.let {
contentResolver.openOutputStream(it)?.use { stream ->
stream.write(pdfBytes)
}
}
A SAF egységes felületet biztosít a fájlok kiválasztásához és létrehozásához futásidejű engedélyek nélkül. Intent ACTION_OPEN_DOCUMENT megnyitja a rendszer fájlkezelőjét Android rendszeren. A kiválasztás után az alkalmazás egy content:// Uri-t kap ideiglenes hozzáféréssel a FLAG_GRANT_READ_URI_PERMISSION segítségével. Az ACTION_CREATE_DOCUMENT lehetővé teszi a fájlok mentését a felhasználó által választott bármely külső tárhelyre. A SAF Android 5+ rendszeren működik, és hozzáférést biztosít a DocumentsProvider segítségével csatlakoztatott felhőszolgáltatók fájljaihoz.
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "*/*"
putExtra(Intent.EXTRA_MIME_TYPES, arrayOf(
"application/pdf",
"text/plain"
))
}
startActivityForResult(intent, REQUEST_CODE)
Mindkét platform beépített mechanizmusokat kínál a felhasználók számára a fájlok kiválasztásához. A dokumentumok a mobilalkalmazásokban rendszerválasztókon keresztül kerülnek továbbításra, amelyek ideiglenes hozzáférést biztosítanak egy fájlhoz állandó engedélyek nélkül. iOS rendszeren ez UIDocumentPickerViewController, Android rendszeren ACTION_OPEN_DOCUMENT. A mobilalkalmazásokban lévő dokumentumok kiválaszthatók mind a helyi tárhelyről, mind a felhőszolgáltatásokból. A felhasználó kifejezetten megadja a fájlt, és az alkalmazás egy Uri-t vagy URL-t kap korlátozott érvényességi idővel.
UIDocumentPickerViewController megnyitja a Files App-ot, és lehetővé teszi egy vagy több dokumentum kiválasztását. Módok: importálás (másolás a homokozóba) és megnyitás (hozzáférés biztonsági hatókörű URL segítségével). Fájlok szűréséhez UTType típusok tömbje kerül átadásra — például .pdf és .plainText. Az URL fogadása után az alkalmazásnak meg kell hívnia a startAccessingSecurityScopedResource() függvényt az olvasás előtt és a stopAccessingSecurityScopedResource() függvényt a befejezés után. A stopAccessing elmulasztása rendszererőforrás-szivárgáshoz vezet. A mobilalkalmazásokban lévő dokumentumok iOS rendszeren megkövetelik az ideiglenes engedélyek kötelező felszabadítását a fájllal végzett munka befejezése után.
let picker = UIDocumentPickerViewController(
forOpeningContentTypes: [.pdf, .plainText]
)
picker.allowsMultipleSelection = true
picker.delegate = self
present(picker, animated: true)
// Hozzáférés felszabadítása a delegáltban
func documentPicker(
_ controller: UIDocumentPickerViewController,
didPickDocumentsAt urls: [URL]
) {
guard let url = urls.first else { return }
url.startAccessingSecurityScopedResource()
defer { url.stopAccessingSecurityScopedResource() }
}
FileProvider a ContentProvider alosztálya a fájlok biztonságos megosztásához az alkalmazások között. Ideiglenes content:// Uri-ket generál a megadott XML könyvtárakból származó fájlok alapján. Más alkalmazások a FLAG_GRANT_READ_URI_PERMISSION funkcióval rendelkező Intent segítségével kapnak hozzáférést. A DocumentProvider a FileProvider-tól eltérően fájlokat tesz közzé a SAF-ban, és lehetővé teszi más alkalmazások számára, hogy az Ön alkalmazásának tartalmát a fájlrendszer részeként böngésszék. A DocumentsProvider megvalósításához felül kell bírálnia a queryRoots(), queryChildDocuments() és openDocument() függvényeket, majd regisztrálnia kell az AndroidManifest.xml fájlban.
A felhőszinkronizálás lehetővé teszi a felhasználók számára, hogy hozzáférjenek a dokumentumokhoz az összes eszközükön. A fájlrendszer a mobilalkalmazásokban egy felhőréteggel egészül ki: az iOS rendszeren lévő UIDocument automatikusan nyomon követi a változásokat és szinkronizálja azokat az iCloud segítségével. Android rendszeren hasonló funkciók építhetők a Google Drive API vagy a felhő gyökerekkel rendelkező DocumentsProvider segítségével. A fájlrendszer megértése a mobilfejlesztésben kritikus fontosságú a megbízható eszközök közötti szinkronizálás kiépítéséhez.
UIDocument egy absztrakt osztály az iCloud dokumentumokkal való munkához. Automatikusan menti a változtatásokat, olvassa az adatokat és értesíti a delegáltat a frissítésekről. Írási ütközés esetén az NSFileVersion elérhető verziók listáját kínálja — a fejlesztő kiválaszthatja a legújabbat, vagy megjelenítheti a felhasználónak az ütközésfeloldási lehetőségeket. Az Ubiquity Container konfigurálása a projekt Capabilities részében kötelező az iCloud Drive-hoz. Az NSFileCoordinator és NSFilePresenter megakadályozzák az adatversenyeket többszálú vagy eszközök közötti egyidejű hozzáférés során.
Az iOS automatikusan tartalmazza a Documents könyvtárat az iCloud Backupban. Android esetén az Auto Backup for Apps működik — a rendszer a getFilesDir(), SharedPreferences és SQLite adatbázisok adatait menti a Google Drive-ba. A gyorsítótár és a külső fájlok nem kerülnek be a biztonsági mentésbe. Mindkét platform lehetővé teszi kivételek konfigurálását: iOS rendszeren az NSURLIsExcludedFromBackupKey segítségével, Android rendszeren a biztonsági mentési szabályok XML konfigurációjával. A személyes adatokat tartalmazó fájlok titkosítása kötelező — iOS rendszeren használja a NSDataWritingFileProtectionComplete, Android rendszeren a security-crypto könyvtárból az EncryptedFile osztályt.
| Paraméter | iOS | Android |
|---|---|---|
| Alapértelmezett biztonsági mentés | Documents és Library | getFilesDir(), SharedPreferences, AB |
| Fájl kizárása | isExcludedFromBackupKey | XML biztonsági mentési szabályok (fullBackupContent) |
| Titkosítás | NSDataWritingFileProtectionComplete | EncryptedFile (security-crypto) |
| Felhő szinkronizálás | UIDocument + iCloud | Google Drive API + SAF |
| Automatikus visszaállítás | iCloud Restore telepítés után | Auto Backup újratelepítéskor |
Gyakran ismételt kérdések
Sandbox egy elkülönített környezet minden alkalmazás számára iOS rendszeren. Az alkalmazás nem férhet hozzá más alkalmazások fájljaihoz anélkül, hogy rendszerválasztókat használna, mint például UIDocumentPickerViewController.
Scoped Storage egy korlátozott fájlrendszer-hozzáférési modell Android 10+ rendszeren. Az alkalmazás közvetlenül csak a saját fájljait olvassa, média esetén MediaStore API-t, dokumentumok esetén Storage Access Framework-ot használ.
Használja a UIDocumentPickerViewController — a rendszerválasztót a dokumentumok kiválasztásához a Files App-ból vagy iCloud Drive-ból. A kiválasztás után egy biztonsági hatókörű URL-t kap ideiglenes hozzáféréssel.
Médiafájlok esetén használja a MediaStore API-t a ContentResolver segítségével a MIME típus megadásával. Tetszőleges dokumentumok esetén használja a Storage Access Framework-ot Intent ACTION_OPEN_DOCUMENT funkcióval.
FileProvider a ContentProvider alosztálya a fájlok biztonságos megosztásához az alkalmazások között ideiglenes content:// Uri segítségével FLAG_GRANT_READ_URI_PERMISSION funkcióval.
Összefoglalás
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.