Struktury plików i pakietów (iOS, Adnroid)
Android
Struktura pakietu aplikacji (APK):
myapp.apk/
├── AndroidManifest.xml # Metadane, permissiony, entrypoint
├── classes.dex # Skonwertowany kod Java/Kotlin (Dalvik EXecutable)
├── res/ # Surowe zasoby (obrazy, layouty XML)
├── assets/ # Zasoby do runtime'u (nieskompilowane)
├── lib/ # Biblioteki .so dla ABI (armeabi-v7a, arm64-v8a)
├── META-INF/ # Sygnatury APK
└── resources.arsc # Skompilowane zasoby binarne (tekst, kolory, etc.)
System plików i lokalizacje:
/system/ System operacyjny (APK framework, liby, framework.jar, itd.).
/data/ Główne dane aplikacji użytkownika.
/data/data/<package_name>/ Sandbox danej aplikacji – configs, cache, databases.
/data/app/<package_name>-<random>/ Fizyczna lokalizacja APK.
/sdcard/ lub /storage/emulated/0/ Pamięć wewnętrzna dostępna dla użytkownika.
/vendor/ Sterowniki i komponenty SoC.
/etc/ Pliki konfiguracyjne systemu (np. hosts, init.rc).
iOS
Struktura pakietu aplikacji (rozpakowane IPA):
MyApp.app/
├── Info.plist # Metadane aplikacji
├── MyApp # Binary (Mach-O)
├── Assets.car # Obrazy skompresowane
├── Base.lproj/ # Lokalizacje językowe
├── Frameworks/ # Embedded frameworks
├── PlugIns/ # Extensiony (keyboard, widgets)
└── CodeSignature/ # Sygnatury aplikacji
System plików i lokalizacje:
/System System operacyjny iOS (read-only od iOS 16), zawiera binarki systemowe, daemony itd.
/private/var/ Dane runtime systemu: logi, cache, baza SMS, systemd state.
/usr/ Binarne i zależności systemowe (read-only).
/Library/ Globalne preferencje, launchd plisty.
/Applications/ Aplikacje Apple i preinstalowane (AppStore apps idą gdzie indziej).
/var/mobile/Containers/Data/Application/<UUID>/ Sandbox danej aplikacji (Documents, Library, tmp).
/var/mobile/Containers/Bundle/Application/<UUID>/ Pakiet aplikacji (IPA rozpakowany, .app folder).
/var/containers/Shared/SystemGroup/<UUID>/ Wspólne dane współdzielone między appkami (np. Safari i Keychain).
iOS vs Android
| Cechy | iOS | Android |
|---|---|---|
| Format paczki | .ipa (zip + Payload/) | .apk (zip + dex + zasoby) |
| Język runtime | Objective-C / Swift / C | Java / Kotlin (ART/Dalvik) |
| Sandbox app | Containers/Data/ i Bundle/ | /data/data/<pkg> |
| System readonly? | Tak, od iOS 16 (/System) | Nie (na niektórych rootowanych urządzeniach możliwy remount) |
| Uprawnienia aplikacji | Strict entitlements, App Sandbox, SEP | AndroidManifest.xml + runtime permissions |
| Sygnatury | Wymagane – podpis Apple + dewelopera | Wymagane, ale mniej rygorystyczne (self-signed dopuszczalne na devie) |
| Enklawa bezpieczeństwa | Secure Enclave (SEP) | Brak dedykowanego odpowiednika (zależy od producenta, np. Knox) |