Section 12/161 menit
12. Debugging SwiftUI
12. Debugging SwiftUI
Inspeksi View Hierarchy
swift
# Di Xcode: Debug → View Debugging → Capture View Hierarchy (visual)
# Atau dari LLDB — print view hierarchy teks
(lldb) po UIApplication.shared.connectedScenes
.compactMap { $0 as? UIWindowScene }
.flatMap { $0.windows }
.first?.rootViewController?.view
.perform(Selector(("recursiveDescription")))?
.takeUnretainedValue()
Breakpoint di Body Re-render
swift
# Berhenti setiap kali ContentView.body dievaluasi
(lldb) breakpoint set --func-regex "ContentView.*body"
# Lihat berapa kali view di-render (action count)
(lldb) breakpoint list
# Perhatikan "times hit = N" — jika N terlalu tinggi, ada re-render berlebihan
Debugging @State dan @Observable
swift
# Set nilai @State langsung (dengan auto-continue untuk lihat efeknya)
(lldb) expr myView.isLoading = true
(lldb) continue
# Untuk @Observable model yang di-inject via environment:
(lldb) po myObservableModel
# Semua properti terlihat karena @Observable menggunakan stored properties biasa
Debugging Preview
SwiftUI Preview menjalankan kode di proses terpisah — breakpoint di Xcode tidak aktif di preview. Untuk debug preview:
swift
# Attach LLDB ke proses XCPreviewAgent
# Terminal:
xcrun lldb
(lldb) process attach --name XCPreviewAgent
# Atau di Xcode: Debug → Attach to Process → pilih XCPreviewAgent