Profesionální ladění a diagnostika mobilních aplikací je klíčovou dovedností pro mobilní vývoj, umožňující nacházet a opravovat chyby v kódu. Podle JetBrains Developer Ecosystem (2024) tráví vývojáři až 30 % svého pracovního času laděním kódu. IT Sectr vyvinul vlastní diagnostické postupy, které zkracují dobu hledání chyb o 40 % díky správnému používání nástrojů pro ladění.
Hlavní body
Mobilní aplikace se sestavují ve dvou hlavních konfiguracích: Debug a Release. Sestavení Debug obsahuje ladicí symboly, neoptimalizuje kód a používá dočasný podpis — to umožňuje nastavovat breakpointy, kontrolovat proměnné a spouštět kód krok za krokem.
Sestavení Release pro mobilní vývoj je finální verzí pro App Store a Google Play. Release optimalizuje kód, odstraňuje nepotřebné symboly a protokoly a podepisuje aplikaci produkčním certifikátem. Ladění na Release je nemožné — pokud se chyba reprodukuje pouze na Release, jsou potřeba Crashlytics nebo jiné nástroje pro hlášení pádů.
Správná strategie pro mobilní aplikace: Debug pro vývoj, Release pro testování před publikováním. IT Sectr doporučuje spouštět sestavení Release na testovacích zařízeních 2–3 dny před vydáním, aby se identifikovaly problémy, které se neprojevují v režimu Debug (např. obfuskace kódu nebo chyby ProGuard/R8).
Debuggable=false je povinné nastavení pro Release v AndroidManifest. iOS Debug a Release se liší schématem sestavení v Xcode — Debug zahrnuje Debug executable, Release ne. iOS má také konfiguraci TestFlight (s hlášením pádů) a App Store.
Android Studio poskytuje kompletní sadu nástrojů pro ladění a diagnostiku mobilních aplikací na platformě Android. Logcat je konzola systémových protokolů Android, hlavní nástroj pro prohlížení protokolů, filtrovatelný podle úrovně (Verbose, Debug, Info, Warn, Error), procesu a značky.
Logcat zobrazuje protokoly všech procesů na zařízení nebo emulátoru. Každý protokol má úroveň priority, značku a zprávu — používejte Log.d(TAG, message) pro ladicí zprávy, Log.e pro chyby. Filtrování podle značky je nejlepší způsob, jak najít své protokoly mezi tisíci systémovými zprávami.
Příklad výstupu protokolu v mobilním vývoji na Androidu:
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate started");
try {
initComponents();
Log.i(TAG, "Components initialized successfully");
} catch (Exception e) {
Log.e(TAG, "Failed to init components", e);
}
}
Layout Inspector — vizuální ladicí nástroj UI pro Android, zobrazuje hierarchii View, atributy každého prvku a jeho pozici na obrazovce. Umožňuje kontrolovat parametry rozvržení, padding, margin, viditelnost a velikost textu na běžící aplikaci.
Database Inspector — prohlížení a úprava SQLite databází přímo v Android Studio, zobrazuje obsah všech tabulek, umožňuje provádět SQL dotazy a upravovat data v reálném čase — nepostradatelný nástroj pro ladění dotazů Room a ContentProvider.
Network Inspector — sleduje všechny HTTP požadavky aplikace, zobrazuje URL, hlavičky, tělo požadavku a odpovědi, čas provedení a stavový kód. Pomáhá ladit REST API, ověřovat správnost serializace a detekovat pomalé požadavky.
Komplexní ladění a diagnostika mobilních aplikací na Androidu vyžaduje znalost všech uvedených nástrojů. Android Studio je kombinuje v jediném IDE pro vyšší efektivitu.
Xcode poskytuje podobnou sadu nástrojů pro ladění a diagnostiku mobilních aplikací na iOS. Console je ekvivalent Logcatu pro iOS, zobrazuje systémové a aplikační protokoly seskupené podle kategorie a úrovně (OSLogType).
Memory Graph Debugger je vizuální nástroj pro detekci retain cycles a úniků paměti, zobrazuje graf všech objektů v paměti s jejich referencemi. Červené uzly označují úniky — objekty, které měly být uvolněny, ale stále jsou v paměti.
Použití Memory Graph: spusťte aplikaci, klikněte na tlačítko Debug Memory Graph v Xcode, vyberte objekt a prozkoumejte jeho příchozí reference. Retain cycle vypadá jako kruhová závislost: objekt A drží objekt B, objekt B drží objekt A. Řešením je použití slabých (weak) nebo nevlastněných (unowned) referencí v uzávěrech.
View Hierarchy Debugger je ekvivalent Layout Inspectoru pro iOS, zobrazuje 3D vizualizaci všech UIView na obrazovce s jejich hierarchií, omezeními a atributy. Umožňuje vybrat libovolný prvek a zobrazit jeho pozici, barvu, velikost a omezení rozvržení.
Heap Dump je snímek celé paměti aplikace, jehož analýza pomáhá najít objekty, které nejsou uvolňovány, a odhadnout celkové využití paměti každé třídy. V Xcode je Heap Dump k dispozici přes Memory Report v Debug Navigatoru.
LLDB je nízkoúrovňový ladicí nástroj pro aplikace v C, Objective-C a Swift, podporující breakpointy, watchpointy, výpis assembleru a dynamickou změnu proměnných. Příkaz po (print object) v LLDB vypíše popis libovolného objektu v paměti.
Watchpoint je bod přerušení, který se aktivuje při změně hodnoty proměnné, užitečný pro sledování toho, kdo a kdy mění hodnotu pole objektu. Na rozdíl od breakpointu, který se aktivuje na konkrétním řádku, se watchpoint aktivuje při jakékoli změně paměti.
Profesionální ladění a diagnostika na iOS vyžaduje zkušenosti s Xcode a pochopení správy paměti. Apple poskytuje úplnou dokumentaci pro každý ladicí nástroj.
Proxy nástroje jsou nezbytnou součástí diagnostiky síťových problémů mobilních aplikací. Charles Proxy je nejoblíbenější HTTP proxy pro mobilní vývoj, umožňující zachytávat, prohlížet a upravovat požadavky mezi aplikací a serverem.
Charles Proxy funguje jako prostředník: nakonfigurujete zařízení k používání Charles jako proxy (obvykle IP počítače, port 8888). Charles zobrazuje všechny HTTP a HTTPS požadavky s možností prohlížení hlaviček, těla, cookies a času provedení. SSL Proxying umožňuje dešifrování HTTPS provozu pro analýzu.
Možnosti Charles: Breakpoints (pozastavení požadavku pro úpravu), Rewrite (automatická úprava požadavků), Map Local (nahrazení odpovědi lokálním souborem). Map Local je nepostradatelný pro testování bez reálného API — vracíte předem připravený JSON místo odpovědi serveru.
Proxyman je moderní alternativa k Charles pro macOS s čistším rozhraním, lepší podporou M1 a M2 a ochranou soukromí. Podporuje stejné funkce: zachytávání, SSL proxy, úpravu požadavků a skripty pro automatickou úpravu provozu.
Wireshark je profesionální analyzátor provozu pro hloubkovou diagnostiku sítě, analyzující všechny vrstvy OSI: TCP, DNS, TLS handshake, ICMP. Používá se pro diagnostiku pomalých připojení, problémů DNS a nízkoúrovňových síťových chyb.
Stetho je knihovna od Facebooku pro ladění Android aplikací přes prohlížeč Chrome, umožňující prohlížení databáze, síťových požadavků, View Hierarchy a Shared Preferences přes Chrome DevTools. Flipper je nástupce Stetha s podporou iOS a pluginovou architekturou.
API klienti se používají pro ladění a diagnostiku backendu mobilních aplikací bez spouštění samotné aplikace. Postman je nejoblíbenější API klient s kolekcemi, testy a automatizací, umožňující odesílat GET, POST, PUT, DELETE požadavky a spravovat hlavičky, cookies a proměnné prostředí.
Insomnia je lehká open-source alternativa k Postman s rychlejším rozhraním, vestavěnou podporou GraphQL a lepší organizací kolekcí. Podporuje pluginy: motivy, export, generování kódu v různých jazycích.
Httpie je HTTP klient pro příkazový řádek s čitelným výstupem, zobrazující barevnou JSON odpověď, hlavičky a stav přímo v terminálu. Vhodný pro rychlé kontroly API bez otevírání GUI aplikace.
Příklad použití Httpie:
http POST https://api.example.com/v1/users \
"Authorization: Bearer token123" \
name="John" email="john@example.com"
IT Sectr doporučuje kombinaci: Postman pro analýzu a dokumentaci API + Httpie pro rychlé kontroly. Importujte kolekci Postman ze specifikace Swagger nebo OpenAPI — to zaručuje, že testované endpointy odpovídají serverové dokumentaci.
| Nástroj | Platforma | Typ ladění | Zdarma | Nejlepší použití |
|---|---|---|---|---|
| Logcat | Android | Protokolování | + | Prohlížení protokolů aplikace a systému |
| Layout Inspector | Android | UI/View | + | Kontrola hierarchie View a atributů |
| Memory Graph | iOS | Paměť | + | Diagnostika úniků paměti |
| View Hierarchy | iOS | UI/View | + | 3D vizualizace UIView |
| Charles Proxy | iOS/Android | Síť | 30denní zkušební | Zachytávání HTTP/HTTPS provozu |
| Proxyman | iOS/Android | Síť | + (omezený) | Moderní HTTP proxy pro macOS |
| Wireshark | Všechny platformy | Síť (hluboká) | + | Analýza všech vrstev OSI |
| Postman | Všechny platformy | API | + | Testování REST/GraphQL API |
| Insomnia | Všechny platformy | API | + | Alternativa k Postman s GraphQL |
| LLDB | iOS/macOS | Nízká úroveň | + | Ladění krok za krokem, assembler |
Často kladené otázky
Sestavení Debug obsahuje ladicí symboly, neoptimalizuje kód a používá dočasný podpis. Sestavení Release optimalizuje kód, odstraňuje protokoly, obfuskuje a podepisuje produkčním certifikátem. Debug se instaluje přes USB nebo emulátor, Release — přes App Store nebo Google Play.
Použijte Memory Profiler v Android Studio — zobrazuje přidělené a uvolněné objekty a události GC. Proveďte Heap Dump a analyzujte objekty, které nejsou uvolňovány. Hledejte instance Activity a Fragment, které zůstávají v paměti po finish(). Použijte LeakCanary — knihovna automaticky detekuje úniky.
Na počítači: povolte SSL Proxying v Charles (Proxy → SSL Proxying Settings). Na zařízení: nainstalujte CA certifikát Charles (chls.pro/ssl) a důvěřujte mu v nastavení. Na iOS 13+ povolte důvěru certifikátu v General → About → Certificate Trust Settings. Na Androidu 7+ je vyžadována konfigurace network_security_config.xml.
Breakpoint zastaví provádění na konkrétním řádku kódu. Watchpoint zastaví provádění při změně hodnoty proměnné. Breakpoint se aktivuje pokaždé při dosažení řádku, watchpoint se aktivuje při jakékoli změně sledované paměti. Watchpoint je užitečný pro hledání neočekávaných změn polí.
Použijte Apollo DevTools (rozšíření prohlížeče) nebo Insomnia s podporou GraphQL. Charles a Proxyman zachytávají GraphQL požadavky jako běžné HTTP POST — můžete prohlížet dotazy, proměnné a odpovědi. Pro podrobné ladění — Apollo Client Developer Tools.
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í.