Console v Xcode: klíčové pojmy, výpis dat a ladění

Autor: IT Sectr Publikováno: 2026-05-06 Doba čtení: 8 min

Console v Xcode je nástroj pro ladění iOS vývoje, který zobrazuje výstup NSLog, print, os_log a crash logů aplikace v reálném čase. Podle Apple Unified Logging od iOS 10 Apple doporučuje používat os_log místo NSLog pro centralizovaný sběr zpráv prostřednictvím Unified Logging System. Console spojuje výstup debuggeru a systémové zprávy v jediném okně Debug Area, dostupném v kterémkoli okamžiku vývoje.

Hlavní body

  • Console Xcode — okno Debug Area pro prohlížení NSLog, os_log, print a crash logů iOS aplikace
  • Unified Logging System — moderní Apple logovací systém s kategoriemi, úrovněmi a ukládáním na disk
  • os_log — doporučené API pro logování s podporou dynamického nastavení úrovní
  • Crash logy se zobrazují automaticky v Console při pádu aplikace na zařízení nebo simulátoru
  • Breakpoint logy — výpis zpráv v Console bez zastavení provádění přes Debugger Command

Co je Console v Xcode

Console — součást Debug Area v Xcode, umístěná ve spodním panelu editoru (View → Debug Area → Activate Console, kombinace Cmd + Shift + Y). Console zobrazuje veškerý textový výstup spuštěné aplikace: zprávy z NSLog, os_log, print, runtime varování a automatické dumpy výjimek při pádu aplikace.

Console funguje jak na simulátoru, tak na fyzickém zařízení. Na simulátoru přicházejí zprávy okamžitě přes lokální pipe, na zařízení — přes USB připojení se zpožděním 1–3 snímků. Pro produkční aplikace není Console na zařízení dostupná — vývojář se spoléhá na Crashlytics nebo Unified Logging se vzdáleným sběrem přes log collect.

Na rozdíl od systémové aplikace Console.app na Macu zobrazuje okno Console v Xcode pouze logy aktuálně spuštěné aplikace (s možností filtrování). Console.app shromažďuje logy všech procesů na Macu, včetně iOS simulátorů. Pro ladění iOS aplikací však vývojáři používají vestavěnou Console Xcode kvůli integraci s debuggerem LLDB.

Logovací API: NSLog, os_log a print

Tři hlavní API jsou k dispozici iOS vývojáři pro výstup do Console: NSLog (zastaralé), os_log (doporučené) a print (pouze Swift). Každé má své vlastnosti z hlediska výkonu, formátování a kompatibility s Unified Logging System.

NSLog — klasické logování

NSLog — funkce z Foundation, dostupná v Objective-C a Swift. NSLog vypisuje zprávu s časovým razítkem, názvem procesu a PID. Nevýhody: NSLog zapisuje do systémového bufferu synchronně, blokuje aktuální vlákno po dobu zápisu. Při častých voláních (např. ve smyčce) vytváří NSLog znatelné zpoždění. Apple nedoporučuje NSLog pro nové projekty, ale zůstává kompatibilní se starým kódem a knihovnami třetích stran.

os_log — moderní standard

os_log — API z os.framework, představené v iOS 10. os_log je asynchronní: zpráva je zařazena do fronty a zapsána do bufferu bez blokování volajícího vlákna. Podle WWDC 2016 je os_log 50krát rychlejší než NSLog ve scénářích s vysokým zatížením. os_log také podporuje dynamické řízení: zprávy úrovně DEBUG jsou shromažďovány pouze v Debug sestavení, v Release jsou ignorovány bez režijních nákladů na výkon.

print() — pouze Swift výstup

print() — nejjednodušší způsob výstupu ve Swiftu. print zapisuje do stdout (standardní výstup), který Xcode přesměrovává do Console. print nepřidává metadata (čas, úroveň), ale podporuje stdout bufferování. Pro rychlé ladění je print pohodlný nástroj, ale pro trvalé logování zaostává za os_log z hlediska funkcionality a kontroly.

swift
import os.log

// NSLog — zastaralé, blokující
NSLog("Application started")

// os_log — doporučené, asynchronní
let log = OSLog(
    subsystem: "com.myapp",
    category: "lifecycle"
)
os_log("Application started", log: log)

// print — rychlý Swift výstup
print("Application started")

Unified Logging: kategorie, úrovně a subsystémy

Unified Logging System (ULS) — komplexní Apple logovací infrastruktura, představená v iOS 10 a macOS Sierra. ULS shromažďuje zprávy ze všech systémových procesů do jediného úložiště se vzdáleným přístupem přes nástroj příkazového řádku log na Macu. Vývojář používá os_log pro zápis do ULS a Console pro čtení.

Subsystémy a kategorie

Každý OSLog je identifikován párem subsystem (např. com.myapp.network) a category (např. http, websocket). Subsystém je doména aplikace (jedna aplikace může mít několik subsystémů pro různé moduly). Kategorie je komponenta uvnitř subsystému. Kombinace subsystem + category umožňuje flexibilní filtrování logů v Console a log collect.

Úrovně logování OSLog

ÚroveňOSLogTypeZobrazení v ConsoleSběr v Release
Default.defaultVždyAno
Info.infoPři zapnutém os_log UIAno
Debug.debugPouze v Debug sestaveníNe
Error.errorVždy s červeným štítkemAno
Fault.faultVždy s fialovým štítkemAno

log collect — vzdálený sběr logů

Příkaz log collect na Macu shromažďuje archivované logy z připojeného iOS zařízení do souboru .logarchive. Tento soubor lze otevřít v Console.app na Macu pro podrobnou analýzu, včetně zpráv os_log, crash logů a systémové diagnostiky. Pro povolení sběru na zařízení je třeba zapnout Developer Mode a připojit zařízení přes USB.

Práce s Console: ladění krok za krokem a analýza crash logů

Praktická práce s Console zahrnuje tři hlavní scénáře: aktivní logování během vývoje, analýzu crash logů po pádu a vzdálenou diagnostiku přes .logarchive. Pro každý scénář existuje optimální sada nástrojů a nastavení.

Nastavení Console pro vývoj

Doporučuje se vytvořit samostatný OSLog pro každý modul aplikace s úrovněmi: debug (podrobné ladění), info (klíčové přechody stavů), error (výjimky a selhání). V Console Xcode zapněte filtr podle subsystému vaší aplikace, abyste vyloučili systémové zprávy, které vytvářejí šum a odvádějí pozornost od logiky aplikace.

Analýza crash logu

Při pádu aplikace Xcode automaticky zastaví provádění a zobrazí vlákno, na kterém došlo k pádu, s úplným stack trace v Console. První řádek crash logu obsahuje typ výjimky (NSException, EXC_BAD_ACCESS) a příčinu (reason). Prostudujte stack trace zdola nahoru: poslední volaná metoda je místo pádu. Pro šifrované adresy (v Release) je vyžadována symbolication přes dSYM.

swift
// Příklad modulární konfigurace OSLog
extension OSLog {
    static let uiLifecycle = OSLog(
        subsystem: "com.myapp.ui",
        category: "lifecycle"
    )
    static let network = OSLog(
        subsystem: "com.myapp.network",
        category: "http"
    )
    static let database = OSLog(
        subsystem: "com.myapp.data",
        category: "core-data"
    )
}

// Použití s úrovněmi
os_log("View did load", log: .uiLifecycle, type: .debug)
os_log("HTTP 200 received", log: .network, type: .info)
os_log("Failed to save: \(error.localizedDescription)",
    log: .database, type: .error)

Pokročilé možnosti: breakpoint logy a vlastní formáty

Xcode Console podporuje několik pokročilých funkcí, které přesahují jednoduché logování. Breakpoint logy umožňují výpis zpráv v Console bez zastavení provádění a příkazy LLDB v Debugger Command poskytují plnou kontrolu nad formátováním výstupu.

Breakpoint logy bez zastavení

Můžete nastavit breakpoint tak, aby vypisoval zprávu v Console a automaticky pokračoval v provádění. Umístěte breakpoint na požadovaný řádek, klikněte pravým tlačítkem → Edit Breakpoint → přidejte Debugger Command: “po self” nebo “expr @import UIKit” + Debugger Command: “po self.view”. Zaškrtněte Automatically continue after evaluating. Po spuštění bude breakpoint při každém dosažení řádku vypisovat výsledek příkazu v Console, aniž by přerušil vlákno.

Příkazy LLDB v Console

Console Xcode podporuje provádění libovolných příkazů LLDB během zastavení na breakpointu. po (print object) vypisuje popis objektu, p (print) — primitivní hodnoty a expr — provádí Swift/ObjC výrazy. Pro formátovaný výstup použijte p/CGRectGetWidth. Výstup LLDB se zobrazí v Console ihned po dosažení breakpointu.

swift
func processUserData(user: User) {
    // Breakpoint zde s Debugger Command:
    // po "User name: \(user.name)"
    // expr user.age = 30
    print("Processing user: \(user.name)")
}

// Příklad vlastního logování s posloupností
func trackMethodCall(
    file: String = #file,
    function: String = #function
) {
    os_log("[\(function)] called",
        log: .uiLifecycle, type: .debug)
}

Integrace s Instruments

Console Xcode je úzce integrována s Instruments — nástrojem pro profilování Xcode. Při spuštění aplikace přes Product → Profile se šablonou Logging jsou všechny zprávy os_log zaznamenávány do stop Instruments s časovými razítky. To umožňuje současně vidět logy, výkon a systémové události na jedné časové ose, což je klíčové pro diagnostiku race condition a regrese výkonu.

Často kladené otázky

Jaký je rozdíl mezi NSLog a os_log?

NSLog — synchronní, blokuje vlákno a vždy vypisuje zprávu. os_log — asynchronní, 50krát rychlejší ve scénářích s vysokým zatížením, podporuje kategorie a dynamické vypínání debug úrovní v Release sestavení bez ztráty výkonu.

Proč Console nezobrazuje os_log z aplikace?

Zkontrolujte úroveň logování: ve výchozím nastavení Console zobrazuje pouze default a výše. Pro zobrazení info a debug otevřete nabídku os_log v Console Xcode a vyberte Include Info Messages a Include Debug Messages, také v nastavení schématu (Edit Scheme → Run → Arguments → OS_ACTIVITY_MODE = debug).

Jak uložit log Console do souboru pro odeslání?

Vyberte požadované zprávy v Console, zkopírujte (Cmd + C) a vložte do libovolného textového editoru. Pro úplný dump použijte terminálový příkaz: sudo log collect --device --output /tmp/app_logs.logarchive — ukládá všechny logy z iOS zařízení ve strukturovaném formátu.

Jak povolit os_log v Release sestavení?

os_log typu .default a .error fungují v Release ve výchozím nastavení. Pro .info a .debug v Release je třeba přidat spouštěcí argument -OSLogPreferencesApp “$(PRODUCT_BUNDLE_IDENTIFIER):debug” do schématu Xcode. Bez tohoto argumentu nejsou debug zprávy v Release shromažďovány, což šetří prostředky zařízení.

Jak najít konkrétní crash log v historii?

Otevřete Window → Organizer → Crashes v Xcode. Organizátor zobrazuje všechny crash logy shromážděné ze zařízení testerů, seskupené podle typu výjimky. Pro symbolication je vyžadován .dSYM soubor ze sestavení, ve kterém došlo k pádu — Xcode jej automaticky najde, pokud je archiv k dispozici.

Shrnutí

  • Console Xcode — vestavěný nástroj pro prohlížení NSLog, os_log, print a crash logů v Debug Area
  • os_log — doporučené API s asynchronním zápisem, kategoriemi a podporou Unified Logging System
  • Unified Logging poskytuje subsystémy a kategorie pro modulární organizaci logů
  • Breakpoint logy vypisují zprávy v Console bez zastavení provádění aplikace
  • Příkazy LLDB po, p, expr poskytují plnou kontrolu nad formátováním výstupu v konzoli
  • Analýza crash logů začíná výjimkou v Console a vyžaduje symbolication přes dSYM pro Release
  • Integrace s Instruments umožňuje spojit logy s profilováním na jedné časové ose

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

Přečtěte si také