Native App — aplikace napsaná v jazycích a s použitím SDK určených pro konkrétní platformu: Swift/Objective-C pro iOS a Kotlin/Java pro Android. Na rozdíl od multiplatformních řešení (Flutter, React Native) pracuje nativní aplikace přímo s operačním systémem bez mezivrstev a získává plný přístup k API zařízení — kameře, Bluetooth, NFC, senzorům, grafickému procesoru. To zajišťuje maximální výkon (60 fps v animacích), minimální dobu spuštění (0.2–0.5 sekundy) a možnost používat nejnovější platformní funkce v den jejich vydání. Podle údajů Statista (2026) očekává 67% uživatelů okamžitou odezvu od aplikace — nativní vývoj zůstává jediným způsobem, jak zaručit takový zážitek u složitých projektů.
Hlavní body
Native App — je mobilní aplikace vyvinutá speciálně pro jednu platformu s použitím jejího nativního programovacího jazyka a nástrojů. Pro iOS je to Swift nebo Objective-C spolu s Xcode, pro Android — Kotlin nebo Java s Android Studio. Kód je kompilován přímo do strojového kódu platformy (přes LLVM pro iOS, ART pro Android), což zajišťuje maximální rychlost provádění.
Architektura nativní aplikace zahrnuje tři vrstvy. Presentation Layer — UI komponenty (UIKit/SwiftUI na iOS, Jetpack Compose/Android Views na Android). Domain Layer — obchodní logika s use cases a repository interfaces. Data Layer — zdroje dat: síť (URLSession/Alamofire na iOS, Retrofit/OkHttp na Android), databáze (CoreData/SwiftData, Room), souborový systém. Každá vrstva používá nativní SDK — například iOS aplikace může volat CoreLocation pro geolokaci, CoreBluetooth pro BLE, AVFoundation pro kameru, Metal pro 3D grafiku. Android nabízí analogy: FusedLocationProvider pro geo, BluetoothAdapter pro BLE, CameraX pro kameru, OpenGL ES/Vulkan pro grafiku.
Životní cyklus native app se na platformách liší. iOS používá striktní model s AppDelegate a SceneDelegate: aplikace prochází stavy notRunning → foregroundInactive → foregroundActive → background → suspended. Android používá flexibilnější model s Activity a Fragment: onCreate → onStart → onResume → onPause → onStop → onDestroy, plus procesy mohou být ukončeny systémem při nedostatku paměti. Vývojář musí správně zpracovávat ukládání stavu (iOS: state restoration, Android: onSaveInstanceState) pro nepřetržitý uživatelský zážitek.
Vývoj pro iOS probíhá výhradně na macOS v prostředí Xcode — integrovaném vývojovém prostředí od Apple, zahrnujícím editor kódu, Interface Builder, iOS simulátor a nástroje pro profilování (Instruments). Hlavní jazyk — Swift, představený Apple v roce 2014. Swift kombinuje typovou bezpečnost s výkonem blízkým C a podporuje paradigmata OOP, funkcionálního a protokolově orientovaného programování.
Klíčové frameworky iOS:
Nástroje Xcode zahrnují: Interface Builder pro vizuální návrh UI, Asset Catalog pro správu zdrojů, Swift Package Manager pro závislosti, Test Navigator pro jednotkové a UI testy (XCTest), Organizer pro publikaci v App Store. Instruments umožňuje profilovat CPU, paměť, síť, grafiku a spotřebu energie. Pro CI/CD se používají Xcode Cloud nebo služby třetích stran (GitHub Actions, Bitrise, Fastlane).
Vývoj pro Android probíhá v Android Studio — IDE založeném na IntelliJ IDEA od Google. Hlavní jazyk — Kotlin, který se stal preferovaným v roce 2017. Kotlin je plně kompatibilní s Javou, ale nabízí stručnější syntaxi, null-bezpečnost přes elvis operátor, korutiny pro asynchronnost a extension funkce. Android Studio obsahuje Layout Editor pro vizuální návrh, Android emulátor s Google Play Services, APK Analyzer a Profiler.
Klíčové komponenty Android:
Architektonické vzory Android: Google doporučuje MVVM s Repository vrstvou. ViewModel ukládá stav (StateFlow), Repository abstrahuje zdroje dat, Use Cases zapouzdřují obchodní logiku. Navigation Component spravuje přechody mezi obrazovkami pomocí navigačního grafu. Pro testování se používají JUnit, MockK, Compose UI Test a Espresso.
Podívejme se na vytvoření jednoduché aplikace pro iOS ve SwiftUI — seznam úkolů s ukládáním dat přes SwiftData. Aplikace demonstruje klíčové vzory nativního vývoje iOS: deklarativní UI, reaktivní aktualizace, práce s daty.
import SwiftUI
import SwiftData
// 1. Datový model se SwiftData
@Model
final class TaskItem {
var title: String
var isCompleted: Bool
var createdAt: Date
init(title: String) {
self.title = title
self.isCompleted = false
self.createdAt = Date()
}
}
// 2. ViewModel s obchodní logikou
@Observable
final class TaskViewModel {
var tasks: [TaskItem] = []
func addTask(title: String, context: ModelContext) {
let task = TaskItem(title: title)
context.insert(task)
tasks.append(task)
}
func toggleTask(task: TaskItem) {
task.isCompleted.toggle()
}
}
// 3. Hlavní obrazovka aplikace
struct ContentView: View {
@Environment(\.modelContext) private var context
@State private var viewModel = TaskViewModel()
@State private var newTaskTitle = ""
@Query private var tasks: [TaskItem]
var body: some View {
NavigationStack {
List {
Section(header: Text("Nový úkol")) {
HStack {
TextField("Zadejte název", text: $newTaskTitle)
Button("Přidat") {
addTask()
}
.disabled(newTaskTitle.isEmpty)
}
}
Section(header: Text("Seznam úkolů")) {
ForEach(tasks) { task in
HStack {
Image(systemName: task.isCompleted ? "checkmark.circle.fill" : "circle")
.onTapGesture { viewModel.toggleTask(task: task) }
Text(task.title)
.strikethrough(task.isCompleted)
Spacer()
Text(task.createdAt, style: .date)
.font(.caption)
.foregroundColor(.secondary)
}
}
.onDelete { indexSet in
for index in indexSet {
context.delete(tasks[index])
}
}
}
}
.navigationTitle("Moje úkoly")
}
}
private func addTask() {
guard !newTaskTitle.isEmpty else { return }
viewModel.addTask(title: newTaskTitle, context: context)
newTaskTitle = ""
}
}
Klíčové vzory v kódu: @Model — makro SwiftData pro automatické generování trvalého úložiště; @Observable — makro Observable pro reaktivní aktualizaci UI; @Query — property wrapper pro automatické načítání dat z SwiftData. Aplikace používá architekturu MVVM s ViewModel, který spravuje obchodní logiku, a SwiftUI View pro zobrazení. SwiftData automaticky ukládá data při změně modelu — vývojář nemusí psát SQL dotazy.
Podobná aplikace pro Android v Kotlin s Jetpack Compose a Room. Ukazuje rozdíly v architektuře a přístupech mezi platformami.
// 1. Entity Room — datový model
@Entity(tableName = "tasks")
data class TaskEntity(
@PrimaryKey(autoGenerate = true) val id: Int = 0,
val title: String,
val isCompleted: Boolean = false,
val createdAt: Long = System.currentTimeMillis()
)
// 2. DAO — dotazy do databáze
@Dao
interface TaskDao {
@Query("SELECT * FROM tasks ORDER BY createdAt DESC")
fun getAllTasks(): Flow<List<TaskEntity>>
@Insert
suspend fun insertTask(task: TaskEntity)
@Delete
suspend fun deleteTask(task: TaskEntity)
}
// 3. ViewModel s obchodní logikou
class TaskViewModel(private val dao: TaskDao) : ViewModel() {
val tasks: StateFlow<List<TaskEntity>> = dao
.getAllTasks()
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptyList())
fun addTask(title: String) {
viewModelScope.launch {
dao.insertTask(TaskEntity(title = title))
}
}
fun toggleTask(task: TaskEntity) {
viewModelScope.launch {
dao.insertTask(task.copy(isCompleted = !task.isCompleted))
}
}
}
// 4. Compose UI
@Composable
fun TaskScreen(viewModel: TaskViewModel = viewModel()) {
val tasks by viewModel.tasks.collectAsState()
var newTitle by remember { mutableStateOf("") }
Column(modifier = Modifier.padding(16.dp)) {
Text("Moje úkoly", style = MaterialTheme.typography.headlineMedium)
Row(
modifier = Modifier.fillMaxWidth().padding(vertical = 8.dp)
) {
OutlinedTextField(
value = newTitle,
onValueChange = { newTitle = it },
label = { Text("Nový úkol") },
modifier = Modifier.weight(1f)
)
Button(
onClick = { viewModel.addTask(newTitle); newTitle = "" },
enabled = newTitle.isNotBlank()
) {
Text("Přidat")
}
}
LazyColumn {
items(tasks, key = { it.id }) { task ->
Row(
modifier = Modifier
.fillMaxWidth()
.clickable { viewModel.toggleTask(task) }
.padding(vertical = 4.dp),
verticalAlignment = Alignment.CenterVertically
) {
Checkbox(checked = task.isCompleted, onCheckedChange = { viewModel.toggleTask(task) })
Text(
text = task.title,
textDecoration = if (task.isCompleted) TextDecoration.LineThrough else TextDecoration.None
)
}
}
}
}
}
Klíčové rozdíly od iOS: Room používá anotace @Entity, @Dao a @Query pro práci s SQLite; ViewModel spravuje životní cyklus přes viewModelScope s korutinami; StateFlow zajišťuje reaktivní aktualizaci Compose UI přes collectAsState. Na Androidu jsou data přenášena přes Flow — obdoba Combine Publisher, ale se zrušením při změně obrazovky přes viewModelScope.
Výhody native app oproti multiplatformním řešením zahrnují několik klíčových aspektů. Výkon: přímý přístup k GPU přes Metal (iOS) a Vulkan (Android) poskytuje 60 fps ve složitých animacích. Přístup k API: nové funkce iOS a Android jsou dostupné v den vydání, bez čekání na podporu v frameworku. Uživatelský zážitek: nativní UI komponenty (NavigationStack, TabView, Sheet na iOS; Scaffold, NavigationBar, BottomSheet na Android) zajišťují známé chování. Spotřeba energie: nativní kód spotřebovává o 15–25% méně baterie u úloh na pozadí.
Nevýhody native app: náklady na vývoj 1.5–2krát vyšší kvůli potřebě dvou samostatných týmů. Doba uvedení na trh se prodlužuje: dva paralelní vývoje vyžadují koordinaci a zdvojnásobují objem testování. Podpora: aktualizace musí být vydávány pro obě platformy současně, což komplikuje CI/CD. Pro jednoduché aplikace (katalogy, feedy, formuláře) mohou být multiplatformní řešení ekonomičtější a rychlejší.
| Kritérium | Native App | Cross-Platform |
|---|---|---|
| Výkon | Maximální (60 fps) | Střední (55–60 fps) |
| Přístup k API | Plný, v den vydání | Přes pluginy, se zpožděním |
| Cena (2 platformy) | 2 týmy × 100% | 1 tým × 60–70% |
| Doba vývoje | 4–6 měsíců | 2–4 měsíce |
| UI/UX | Nativní, HIG/Material Design | Jednotný design, kompromisy |
| Testování | XCTest + Espresso | Flutter Test + Detox |
| CI/CD | Xcode Cloud + Fastlane | Codemagic + Fastlane |
| Složitost podpory | Dvě kódové báze | Jedna kódová báze |
Kdy zvolit native app: hry a aplikace s intenzivní grafikou (Metal, Vulkan, ARKit, ARCore); aplikace s hlubokou integrací do OS (Bluetooth LE, NFC, CoreBluetooth, HealthKit, Google Fit); finanční, lékařské a podnikové aplikace s požadavky na bezpečnost a certifikaci; projekty, kde je každá milisekunda zpoždění kritická (obchodování, streamování, videohovory). Pro MVP, startupy a jednoduché aplikace může být multiplatformní vývoj racionálnější volbou.
Často kladené otázky
Native App se píše v jazycích platformy (Swift/Kotlin) a používá nativní SDK, což poskytuje maximální výkon a přístup ke všem API zařízení. Multiplatformní aplikace (Flutter, React Native) používá sdílený kód s kompromisy ve výkonu a přístupu k platformním funkcím.
Pro iOS — Swift a Objective-C, pro Android — Kotlin a Java. Swift se stal hlavním jazykem pro iOS od roku 2014, Kotlin — pro Android od roku 2017. Objective-C a Java se používají převážně v legacy projektech podporujících staré verze.
Cena závisí na složitosti: jednoduchá aplikace — od $20000 do $50000, střední složitost — od $50000 do $120000, složitá — od $120000. Nativní vývoj je o 30–50% dražší než multiplatformní, ale poskytuje lepší výkon.
Native App se volí pro projekty s vysokými nároky na výkon (hry, AR/VR), hlubokým využitím platformních API (kamera, Bluetooth, NFC), složitou animací 60 fps, a také pro finanční a lékařské aplikace s požadavky na bezpečnost.
Pro iOS se používá Xcode (pouze na macOS) s iOS simulátorem a nástroji pro ladění Instruments. Pro Android — Android Studio (na Windows, macOS, Linux) s Android emulátorem, profilerem a Layout Inspector.
Shrnutí
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í.
Přečtěte si také