# Xcode Tips & Debugging — To'liq Darslik

## Mundarija
1. [Xcode interfeysi navigatsiyasi](#xcode-interface)
2. [Eng kerakli Keyboard Shortcuts](#shortcuts)
3. [Breakpoints turlari (Conditional, Symbolic)](#breakpoints)
4. [LLDB Debugger (po, p, expression)](#lldb)
5. [View Debugger (3D UI vizualizatsiyasi)](#view-debugger)
6. [Instruments (Performance monitoring)](#instruments)
7. [Memory Graph Debugger (Retain Cycle topish)](#memory-graph)
8. [Xcode Previews (SwiftUI)](#previews)
9. [Build Configuration (Debug vs Release)](#build-config)
10. [Code Snippets va Templates](#snippets)
11. [Xulosa](#xulosa)

---

## 1. Xcode interfeysi navigatsiyasi {#xcode-interface}

Xcode — bu juda murakkab vosita. Navigatsiyani osonlashtirish uchun:
- **Navigator (Chap tomon):** Fayllar, ramzlar (symbols), testlar va qidiruv.
- **Inspectors (O'ng tomon):** Attributes, Connections va Size inspector.
- **Debug Area (Pastki qism):** Console va Variables view.

---

## 2. Eng kerakli Keyboard Shortcuts {#shortcuts}

Ish tezligini 2 baravar oshiradigan shortcut'lar:
- `⌘ + ⇧ + O`: Quick Open (istalgan faylni nomi bilan topish)
- `⌘ + B`: Build
- `⌘ + R`: Run
- `⌘ + .`: Stop
- `⌘ + /`: Kodni comment/uncomment qilish
- `⌃ + I`: Kodni avtomatik tekislash (Re-indent)
- `⌘ + ⇧ + J`: Hozirgi faylni navigatorda ko'rsatish

---

## 3. Breakpoints turlari {#breakpoints}

Breakpoints — bu kodni to'xtatib, holatni tekshirish uchun:
- **Oddiy Breakpoint:** Kod o'sha qatorga kelganda to'xtaydi.
- **Conditional Breakpoint:** Faqat ma'lum bir shart bajarilganda to'xtaydi (masalan, `i == 10`).
- **Exception Breakpoint:** Ilova crash bo'lishidan aynan bitta qadam oldin to'xtatadi. Foydali!
- **Symbolic Breakpoint:** Ma'lum bir metod chaqirilganda to'xtaydi (masalan, `UIView.layoutSubviews`).

---

## 4. LLDB Debugger {#lldb}

Console'da yoziladigan buyruqlar:
- `po self.label.text`: Obyektning tavsifini ko'rish (Print Object).
- `p variableName`: O’zgaruvchi qiymatini ko'rish.
- `expression self.view.backgroundColor = .red`: Kodni to'xtatgan joyda property'ni o'zgartirib ko'rish.
- `bt`: Call Stack'ni ko'rish (Backtrace).

---

## 5. View Debugger {#view-debugger}

UI elementlari bir-birining ostida qolib ketgan bo'lsa yoki noto'g'ri joylashsa, `Debug View Hierarchy` tugmasini bosing. Bu sizga butun UI ni 3D ko'rinishida aylantirib ko'rish imkonini beradi.

---

## 6. Instruments {#instruments}

Ilovaning performansini tekshirish:
- **Time Profiler:** CPU ni qaysi funksiya eng ko'p band qilayotganini topish.
- **Allocations:** Xotira sarfini (RAM) kuzatish.
- **Leaks:** Xotira oqishini (Memory Leaks) topish.
- **Network:** API so'rovlar vaqtini va hajmini tekshirish.

---

## 7. Memory Graph Debugger {#memory-graph}

Retain Cycle (ikkita obyekt bir-birini ushlab qolishi) bor yoki yo'qligini vizual ko'rish uchun mo'ljallangan. Agar birorta obyekt xotiradan o'chmayotgan bo'lsa, Memory Graph sizga uni kim "ushlab turganini" ko'rsatadi.

---

## 8. Xcode Previews {#previews}

SwiftUI da kod yozish bilan birga natijani ko'rish.
- Har xil qurilmalarni (iPhone, iPad, Apple Watch) bir vaqtda preview qilish.
- Dark/Light mode va turli tillarni (Localization) tekshirish.

---

## 9. Build Configuration {#build-config}

- **Debug:** Developer uchun. Ko'proq ma'lumot (logging) va sekinroq build.
- **Release:** App Store uchun. Maksimal darajada optimallangan kod.
- **Environment Variables:** Server URL manzillarini (`development_url` vs `production_url`) ajratib qo'yish.

---

## 10. Code Snippets va Templates {#snippets}

Tez-tez yozadigan kodingiz bo'lsa (masalan, `UITableViewDataSource` metodlari), ularni `Code Snippet` sifatida saqlang. Keyingi safar bir nechta harf bilan butun kod blokini chiqara olasiz.

---

## 11. Xulosa {#xulosa}

Yaxshi dasturchi nafaqat kod yozishni, balki xatolarni tezda topishni ham bilishi kerak.
- Shortcut'larni o'rganing, vaqtingizni tejang.
- LLDB va Instruments vositalaridan foydalaning.
- Crashlarni `Exception Breakpoint` bilan ushlashni o'rganing.

**Vazifa:** Bugun o'zingiz yozgan loyihada `Time Profiler`ni ishga tushirib, CPU sarfini tahlil qiling! 🔍
