Souborový systém a dokumenty v mobilním vývoji: co to je, jaké principy a jak to funguje

Autor: IT Sectr Publikováno: 2026-07-19 Doba čtení: 12 min

Práce se souborovým systémem je základem každé mobilní aplikace. Každá platforma nabízí svůj vlastní model přístupu: Sandbox na iOS izoluje aplikace v oddělených kontejnerech, zatímco Scoped Storage na Androidu omezuje přímý přístup ke sdílenému úložišti. Podle Google Developer Documentation (2026) si zavedení Scoped Storage s Androidem 10 vyžádalo úplnou revizi architektury ukládání dat. V tomto průvodci se budeme věnovat FileManager, MediaStore API, Storage Access Framework a DocumentProvider pro obě platformy.

Klíčové body

  • Sandbox — izolované prostředí iOS, kde každá aplikace pracuje pouze ve svém vlastním adresáři bez přístupu k datům jiných aplikací.
  • Scoped Storage — model Android 10+, který omezuje přímý přístup k externímu úložišti prostřednictvím MediaStore API a SAF.
  • FileManager — primární třída iOS pro operace se soubory: vytváření, čtení, kopírování, přesouvání a mazání.
  • Storage Access Framework — systémový mechanismus Android pro výběr dokumentů pomocí Intent ACTION_OPEN_DOCUMENT.
  • DocumentProvider — komponenta Android pro publikování souborů aplikace do sdíleného souborového systému prostřednictvím SAF.

Co je souborový systém v mobilních aplikacích?

Souborový systém v mobilních aplikacích je soubor API, bezpečnostních pravidel a omezení, které definují ukládání a přístup k datům na zařízeních iOS a Android. Na rozdíl od desktopových operačních systémů mobilní platformy izolují každou aplikaci, aby chránily data uživatele před neoprávněným čtením jinými programy.

Architektonické rozdíly mezi iOS a Android

iOS používá model Sandbox, kde každá aplikace existuje ve vlastním kontejneru s přísně omezenými oprávněními. Před verzí 10 Android poskytoval plný přístup k externímu úložišti, ale se zavedením Scoped Storage se přístup přiblížil iOS. Klíčový rozdíl je v tom, že iOS zcela izoluje souborový systém, zatímco Android nabízí několik úrovní přístupu: soukromý adresář, veřejné MediaStore a dočasný přístup prostřednictvím SAF.

Hlavní typy úložišť

Mobilní aplikace používají tři typy ukládání dat. Soukromé úložiště — adresář přístupný pouze aplikaci pro interní soubory a mezipaměť. Sdílené úložiště — multimediální soubory přes MediaStore (Android) nebo Files App (iOS). Cloudové úložiště — iCloud Drive a Google Drive pro synchronizaci mezi zařízeními. Každý typ má svá vlastní omezení týkající se velikosti, životnosti souborů a podmínek přístupu.

Typ úložištěiOSAndroid
SoukroméDocuments, Library, CachesgetFilesDir(), getCacheDir()
Sdílená médiaPHPhotoLibrary přes výběrMediaStore API (ContentResolver)
Sdílené dokumentyFiles App přes UIDocumentPickerStorage Access Framework (SAF)
CloudiCloud Drive (UIDocument)Google Drive API
MezipaměťAdresář Caches, čištěný systémemgetCacheDir(), getExternalCacheDir()

Souborový systém v mobilním vývoji: Sandbox na iOS

Sandbox je bezpečnostní architektura iOS, která izoluje každou aplikaci. Aplikace může číst a zapisovat pouze v rámci svého vlastního sandboxu. Pro přístup ke kontaktům, fotografiím nebo souborům jiných aplikací je nutné použít systémové výběry: UIImagePickerController nebo UIDocumentPickerViewController. Přístup k Files App se konfiguruje pomocí příznaku UIFileSharingEnabled v Info.plist. Souborový systém v mobilním vývoji na iOS vyžaduje pochopení struktury adresářů a výběr správného umístění pro každý typ dat.

Struktura adresářů sandboxu

Sandbox iOS se skládá z několika standardních adresářů. Documents — pro uživatelské soubory, zahrnuto v iCloud Backup. Caches — pro dočasná data, která může systém odstranit při nedostatku místa. Temporary — pro soubory aktuální relace, vymazáno při restartu. Application Support — pro interní data aplikace skrytá před uživatelem. Výběr špatného adresáře vede k problémům: ukládání mezipaměti do Documents plýtvá místem v iCloud a porušuje pokyny Apple pro souborový systém.

swift
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 = "Содержимое файла"

// Atomický zápis s šifrováním
try text.write(
    to: fileURL,
    atomically: true,
    encoding: .utf8
)

FileManager — primární API pro operace se soubory

Třída FileManager poskytuje kompletní sadu metod pro správu souborů na iOS. FileManager.default je thread-safe singleton vhodný pro většinu operací. Metody jako fileExists(atPath:), createDirectory(at:withIntermediateDirectories:attributes:), copyItem(at:to:) a removeItem(at:) pokrývají základní scénáře. Operace se soubory většími než 1 MB by měly být prováděny v vlákně na pozadí přes DispatchQueue.global(). Pro streamování velkých objemů použijte FileHandle místo načítání celého souboru do paměti.

swift
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)
}

Souborový systém v mobilních aplikacích: Scoped Storage na Androidu

S vydáním Androidu 10 Google představil Scoped Storage — model omezeného přístupu k souborovému systému. Aplikace může volně číst a zapisovat pouze ve svých soukromých adresářích. Pro multimediální soubory (fotografie, videa, zvuk) se používá MediaStore API přes ContentResolver. Pro libovolné dokumenty se používá Storage Access Framework přes Intent ACTION_OPEN_DOCUMENT. Na Androidu 11+ je přímý přístup ke kořenu externího úložiště zcela zakázán a všichni vývojáři musí používat nová API.

MediaStore API pro práci s multimediálními soubory

MediaStore je systémový ContentProvider pro přístup k multimediálním souborům na zařízení. Prostřednictvím ContentResolver aplikace požaduje Uri souborů místo přímých cest. MediaStore.Files — pro všechny typy souborů, Images — pro obrázky, Video — pro videa, Audio — pro zvukové nahrávky. Zápis do sdílených adresářů se provádí pomocí insert() s DISPLAY_NAME, MIME_TYPE a RELATIVE_PATH. Po vložení aplikace obdrží Uri, přes které se zapisují bajty. Typy MIME hrají klíčovou roli — nesprávný typ způsobí chybu při otevírání souboru.

kotlin
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)
    }
}

Storage Access Framework pro výběr souborů

SAF poskytuje jednotné rozhraní pro výběr a vytváření souborů bez oprávnění za běhu. Intent ACTION_OPEN_DOCUMENT otevře systémového správce souborů na Androidu. Po výběru aplikace obdrží content:// Uri s dočasným přístupem přes FLAG_GRANT_READ_URI_PERMISSION. ACTION_CREATE_DOCUMENT umožňuje ukládat soubory na libovolné externí úložiště zvolené uživatelem. SAF funguje na Androidu 5+ a poskytuje přístup k souborům od cloudových poskytovatelů připojených přes DocumentsProvider.

kotlin
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)

Výběr dokumentů v mobilních aplikacích: systémové výběry

Obě platformy poskytují vestavěné mechanismy pro výběr souborů uživateli. Dokumenty v mobilních aplikacích jsou předávány prostřednictvím systémových výběrů, které poskytují dočasný přístup k souboru bez trvalých oprávnění. Na iOS je to UIDocumentPickerViewController, na Androidu ACTION_OPEN_DOCUMENT. Dokumenty v mobilních aplikacích lze vybírat z místního úložiště i cloudových služeb. Uživatel explicitně určí soubor a aplikace obdrží Uri nebo URL s omezenou dobou platnosti.

UIDocumentPickerViewController na iOS

UIDocumentPickerViewController otevře Files App a umožní výběr jednoho nebo více dokumentů. Režimy: import (zkopírování do sandboxu) a otevření (přístup přes URL s bezpečnostním rozsahem). Pro filtrování souborů se předává pole typů UTType — například .pdf a .plainText. Po obdržení URL musí aplikace zavolat startAccessingSecurityScopedResource() před čtením a stopAccessingSecurityScopedResource() po dokončení. Nezavolání stopAccessing vede k úniku systémových zdrojů. Dokumenty v mobilních aplikacích na iOS vyžadují povinné uvolnění dočasných oprávnění po dokončení práce se souborem.

swift
let picker = UIDocumentPickerViewController(
    forOpeningContentTypes: [.pdf, .plainText]
)
picker.allowsMultipleSelection = true
picker.delegate = self
present(picker, animated: true)

// Uvolnění přístupu v delegátovi
func documentPicker(
    _ controller: UIDocumentPickerViewController,
    didPickDocumentsAt urls: [URL]
) {
    guard let url = urls.first else { return }
    url.startAccessingSecurityScopedResource()
    defer { url.stopAccessingSecurityScopedResource() }
}

FileProvider a DocumentProvider na Androidu

FileProvider je podtřída ContentProvider pro bezpečné sdílení souborů mezi aplikacemi. Generuje dočasná content:// Uri na základě souborů z určených XML adresářů. Jiné aplikace získají přístup prostřednictvím Intent s FLAG_GRANT_READ_URI_PERMISSION. DocumentProvider na rozdíl od FileProvider publikuje soubory v SAF a umožňuje jiným aplikacím procházet obsah vaší aplikace jako součást souborového systému. Pro implementaci DocumentsProvider musíte přepsat queryRoots(), queryChildDocuments() a openDocument() a poté jej zaregistrovat v AndroidManifest.xml

iCloud Drive a cloudová synchronizace souborů

Cloudová synchronizace poskytuje uživatelům přístup k dokumentům na všech jejich zařízeních. Souborový systém v mobilních aplikacích je rozšířen o cloudovou vrstvu: UIDocument na iOS automaticky sleduje změny a synchronizuje je přes iCloud. Na Androidu je podobná funkčnost postavena přes Google Drive API nebo DocumentsProvider s cloudovými kořeny. Porozumění souborovému systému v mobilním vývoji je zásadní pro vybudování spolehlivé synchronizace mezi zařízeními.

UIDocument — Synchronizace na iOS

UIDocument je abstraktní třída pro práci s dokumenty iCloud. Automaticky ukládá změny, čte data a informuje delegáta o aktualizacích. V případě konfliktu zápisu poskytuje NSFileVersion seznam dostupných verzí — vývojář může vybrat nejnovější nebo zobrazit uživateli možnosti řešení konfliktu. Konfigurace Ubiquity Container v Capabilities projektu je povinná pro iCloud Drive. NSFileCoordinator a NSFilePresenter zabraňují datovým závodům během současného přístupu z více vláken nebo zařízení.

Zálohování a obnovení dat

iOS automaticky zahrnuje adresář Documents do iCloud Backup. Android funguje s Auto Backup for Apps — systém ukládá data z getFilesDir(), SharedPreferences a databází SQLite do Google Drive. Mezipaměť a externí soubory nejsou součástí záloh. Obě platformy umožňují konfigurovat výjimky: na iOS přes NSURLIsExcludedFromBackupKey, na Androidu přes XML konfiguraci pravidel zálohování. Šifrování souborů s osobními údaji je povinné — na iOS použijte NSDataWritingFileProtectionComplete, na Androidu použijte EncryptedFile z knihovny security-crypto.

ParametriOSAndroid
Výchozí zálohaDocuments a LibrarygetFilesDir(), SharedPreferences, DB
Vyloučení souborůisExcludedFromBackupKeyXML pravidla zálohování (fullBackupContent)
ŠifrováníNSDataWritingFileProtectionCompleteEncryptedFile (security-crypto)
Cloudová synchronizaceUIDocument + iCloudGoogle Drive API + SAF
Automatické obnoveníiCloud Restore po instalaciAuto Backup při přeinstalaci

Často kladené dotazy

Co je Sandbox na iOS?

Sandbox je izolované prostředí pro každou aplikaci na iOS. Aplikace nemůže přistupovat k souborům jiných aplikací bez použití systémových výběrů, jako je UIDocumentPickerViewController.

Co je Scoped Storage na Androidu?

Scoped Storage je model omezeného přístupu k souborovému systému na Androidu 10+. Aplikace čte přímo pouze své vlastní soubory, používá MediaStore API pro média a Storage Access Framework pro dokumenty.

Jak vybrat soubor na iOS?

Použijte UIDocumentPickerViewController — systémový výběr pro výběr dokumentů z Files App nebo iCloud Drive. Po výběru obdržíte URL s bezpečnostním rozsahem a dočasným přístupem.

Jak získat přístup k souborům na Androidu 11+?

Pro multimediální soubory použijte MediaStore API přes ContentResolver s uvedením typu MIME. Pro libovolné dokumenty použijte Storage Access Framework s Intent ACTION_OPEN_DOCUMENT.

Co je FileProvider na Androidu?

FileProvider je podtřída ContentProvider pro bezpečné sdílení souborů mezi aplikacemi přes dočasné content:// Uri s FLAG_GRANT_READ_URI_PERMISSION.

Shrnutí

  • Sandbox — izolovaný souborový systém iOS, kde aplikace má přístup pouze ke svým adresářům Documents, Caches a Library.
  • FileManager — primární API pro operace se soubory na iOS. Velké soubory čtěte přes FileHandle ve vlákně na pozadí.
  • Scoped Storage — model souborového systému na Androidu 10+, který nahrazuje přímý přístup k externímu úložišti MediaStore API a SAF.
  • MediaStore API — systémový ContentProvider pro práci s multimediálními soubory na Androidu. Zápis se provádí přes insert() s ContentValues.
  • Storage Access Framework — univerzální mechanismus výběru dokumentů na Androidu přes ACTION_OPEN_DOCUMENT a ACTION_CREATE_DOCUMENT.
  • UIDocumentPickerViewController — systémový výběr iOS, který otevírá Files App a iCloud Drive. Pracuje s URL s bezpečnostním rozsahem.
  • FileProvider — mechanismus pro bezpečné sdílení souborů mezi aplikacemi Android přes dočasné content:// Uri a oprávnění za běhu.

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í.

Prodiskutovat projekt