Console di Xcode: konsep kunci, keluaran data, dan debugging

Penulis: IT Sectr Diterbitkan: 2026-05-06 Waktu membaca: 8 mnt

Console di Xcode adalah alat debugging untuk pengembangan iOS yang menampilkan keluaran NSLog, print, os_log, dan crash log aplikasi secara real-time. Menurut Apple Unified Logging, sejak iOS 10 Apple merekomendasikan penggunaan os_log daripada NSLog untuk pengumpulan pesan terpusat melalui Unified Logging System. Console menggabungkan keluaran debugger dan pesan sistem dalam satu jendela Debug Area, yang tersedia setiap saat selama pengembangan.

Poin Utama

  • Console Xcode — jendela Debug Area untuk melihat NSLog, os_log, print, dan crash log aplikasi iOS
  • Unified Logging System — sistem logging modern Apple dengan kategori, level, dan penyimpanan ke disk
  • os_log — API yang direkomendasikan untuk logging dengan dukungan konfigurasi level secara dinamis
  • Crash log ditampilkan secara otomatis di Console saat aplikasi crash di perangkat atau simulator
  • Breakpoint log — keluaran pesan di Console tanpa menghentikan eksekusi melalui Debugger Command

Apa itu Console di Xcode

Console — bagian dari Debug Area di Xcode, terletak di panel bawah editor (View → Debug Area → Activate Console, pintasan Cmd + Shift + Y). Console menampilkan semua keluaran teks dari aplikasi yang berjalan: pesan dari NSLog, os_log, print, peringatan runtime, dan dump pengecualian otomatis saat aplikasi crash.

Console bekerja baik di simulator maupun di perangkat fisik. Di simulator, pesan tiba seketika melalui pipe lokal, di perangkat — melalui koneksi USB dengan penundaan 1–3 frame. Untuk aplikasi produksi, Console di perangkat tidak tersedia — pengembang mengandalkan Crashlytics atau Unified Logging dengan pengumpulan jarak jauh melalui log collect.

Tidak seperti aplikasi sistem Console.app di Mac, jendela Console di Xcode hanya menampilkan log dari aplikasi yang sedang berjalan (dengan kemampuan filter). Console.app mengumpulkan log dari semua proses di Mac, termasuk simulator iOS. Namun, untuk debugging aplikasi iOS, pengembang menggunakan Console Xcode bawaan karena integrasinya dengan debugger LLDB.

API Logging: NSLog, os_log, dan print

Tiga API utama tersedia bagi pengembang iOS untuk keluaran di Console: NSLog (usang), os_log (direkomendasikan), dan print (khusus Swift). Masing-masing memiliki karakteristik sendiri dalam hal kinerja, pemformatan, dan kompatibilitas dengan Unified Logging System.

NSLog — logging klasik

NSLog — fungsi dari Foundation, tersedia di Objective-C dan Swift. NSLog mengeluarkan pesan dengan stempel waktu, nama proses, dan PID. Kekurangan: NSLog menulis ke buffer sistem secara sinkron, memblokir thread saat ini selama penulisan. Pada panggilan yang sering (misalnya dalam perulangan), NSLog menyebabkan penundaan yang terlihat. Apple tidak merekomendasikan NSLog untuk proyek baru, tetapi tetap kompatibel dengan kode lama dan pustaka pihak ketiga.

os_log — standar modern

os_log — API dari os.framework, diperkenalkan di iOS 10. os_log bersifat asinkron: pesan ditempatkan dalam antrian dan ditulis ke buffer tanpa memblokir thread pemanggil. Menurut WWDC 2016, os_log 50 kali lebih cepat daripada NSLog dalam skenario beban tinggi. os_log juga mendukung manajemen dinamis: pesan level DEBUG hanya dikumpulkan di build Debug, di Release diabaikan tanpa biaya kinerja.

print() — keluaran khusus Swift

print() — metode keluaran paling sederhana di Swift. print menulis ke stdout (keluaran standar), yang diarahkan Xcode ke Console. print tidak menambahkan metadata (waktu, level), tetapi mendukung buffering stdout. Untuk debugging cepat, print adalah alat yang nyaman, tetapi untuk logging permanen, print kalah dari os_log dalam hal fungsionalitas dan kontrol.

swift
import os.log

// NSLog — usang, memblokir
NSLog("Application started")

// os_log — direkomendasikan, asinkron
let log = OSLog(
    subsystem: "com.myapp",
    category: "lifecycle"
)
os_log("Application started", log: log)

// print — keluaran Swift cepat
print("Application started")

Unified Logging: kategori, level, dan subsistem

Unified Logging System (ULS) — infrastruktur logging komprehensif Apple, diperkenalkan di iOS 10 dan macOS Sierra. ULS mengumpulkan pesan dari semua proses sistem ke dalam satu penyimpanan dengan akses jarak jauh melalui alat baris perintah log di Mac. Pengembang menggunakan os_log untuk menulis ke ULS dan Console untuk membaca.

Subsistem dan kategori

Setiap OSLog diidentifikasi oleh pasangan subsystem (misalnya, com.myapp.network) dan category (misalnya, http, websocket). Subsistem adalah domain aplikasi (satu aplikasi dapat memiliki beberapa subsistem untuk modul yang berbeda). Kategori adalah komponen di dalam subsistem. Kombinasi subsystem + category memungkinkan pemfilteran log yang fleksibel di Console dan log collect.

Level logging OSLog

LevelOSLogTypeTampilan di ConsolePengumpulan di Release
Default.defaultSelaluYa
Info.infoSaat os_log UI diaktifkanYa
Debug.debugHanya di build DebugTidak
Error.errorSelalu dengan label merahYa
Fault.faultSelalu dengan label unguYa

log collect — pengumpulan log jarak jauh

Perintah log collect di Mac mengumpulkan log yang diarsipkan dari perangkat iOS yang terhubung ke file .logarchive. File ini dapat dibuka di Console.app di Mac untuk analisis mendetail, termasuk pesan os_log, crash log, dan diagnostik sistem. Untuk mengaktifkan pengumpulan di perangkat, Anda perlu mengaktifkan Developer Mode dan menghubungkan perangkat melalui USB.

Bekerja dengan Console: debugging langkah demi langkah dan analisis crash log

Kerja praktis dengan Console mencakup tiga skenario utama: logging aktif selama pengembangan, analisis crash log setelah crash, dan diagnostik jarak jauh melalui .logarchive. Untuk setiap skenario, ada seperangkat alat dan pengaturan yang optimal.

Konfigurasi Console untuk pengembangan

Disarankan untuk membuat OSLog terpisah untuk setiap modul aplikasi dengan level: debug (debugging mendetail), info (transisi status utama), error (pengecualian dan kegagalan). Di Console Xcode, aktifkan filter berdasarkan subsistem aplikasi Anda untuk mengecualikan pesan sistem yang menciptakan kebisingan dan mengalihkan perhatian dari logika aplikasi.

Analisis crash log

Saat aplikasi crash, Xcode secara otomatis menghentikan eksekusi dan menampilkan thread tempat crash terjadi, dengan stack trace lengkap di Console. Baris pertama crash log berisi jenis pengecualian (NSException, EXC_BAD_ACCESS) dan penyebab (reason). Pelajari stack trace dari bawah ke atas: metode terakhir yang dipanggil adalah lokasi crash. Untuk alamat terenkripsi (di Release), diperlukan symbolication melalui dSYM.

swift
// Contoh konfigurasi modular 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"
    )
}

// Penggunaan dengan level
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)

Fitur Lanjutan: breakpoint log dan format khusus

Xcode Console mendukung beberapa fungsi lanjutan yang melampaui logging sederhana. Breakpoint log memungkinkan keluaran pesan di Console tanpa menghentikan eksekusi, dan perintah LLDB di Debugger Command memberikan kontrol penuh atas pemformatan keluaran.

Breakpoint log tanpa berhenti

Anda dapat mengatur breakpoint sehingga mengeluarkan pesan di Console dan secara otomatis melanjutkan eksekusi. Tempatkan breakpoint pada baris yang diinginkan, klik kanan → Edit Breakpoint → tambahkan Debugger Command: “po self” atau “expr @import UIKit” + Debugger Command: “po self.view”. Centang Automatically continue after evaluating. Setelah dijalankan, breakpoint akan menampilkan hasil perintah di Console setiap kali mencapai baris tersebut, tanpa mengganggu thread.

Perintah LLDB di Console

Console Xcode mendukung eksekusi perintah LLDB arbitrer selama berhenti di breakpoint. po (print object) menampilkan deskripsi objek, p (print) — nilai primitif, dan expr — mengeksekusi ekspresi Swift/ObjC. Untuk keluaran terformat, gunakan p/CGRectGetWidth. Keluaran LLDB ditampilkan di Console segera setelah mencapai breakpoint.

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

// Contoh logging kustom dengan urutan
func trackMethodCall(
    file: String = #file,
    function: String = #function
) {
    os_log("[\(function)] called",
        log: .uiLifecycle, type: .debug)
}

Integrasi dengan Instruments

Console Xcode terintegrasi erat dengan Instruments — alat profiling Xcode. Saat menjalankan aplikasi melalui Product → Profile dengan template Logging, semua pesan os_log dicatat di trek Instruments dengan stempel waktu. Ini memungkinkan melihat log, kinerja, dan peristiwa sistem secara bersamaan pada satu skala waktu, yang penting untuk mendiagnosis race condition dan regresi kinerja.

Pertanyaan yang Sering Diajukan

Apa perbedaan antara NSLog dan os_log?

NSLog — sinkron, memblokir thread, dan selalu mengeluarkan pesan. os_log — asinkron, 50 kali lebih cepat dalam skenario beban tinggi, mendukung kategori, dan penonaktifan dinamis level debug di build Release tanpa kehilangan kinerja.

Mengapa Console tidak menampilkan os_log dari aplikasi?

Periksa level logging: secara default Console hanya menampilkan default ke atas. Untuk melihat info dan debug, buka menu os_log di Console Xcode dan pilih Include Info Messages dan Include Debug Messages, juga di pengaturan skema (Edit Scheme → Run → Arguments → OS_ACTIVITY_MODE = debug).

Bagaimana cara menyimpan log Console ke file untuk dikirim?

Pilih pesan yang diinginkan di Console, salin (Cmd + C), dan tempel di editor teks mana pun. Untuk dump lengkap, gunakan perintah terminal: sudo log collect --device --output /tmp/app_logs.logarchive — ini menyimpan semua log dari perangkat iOS dalam format terstruktur.

Bagaimana cara mengaktifkan os_log di build Release?

os_log tipe .default dan .error berfungsi di Release secara default. Untuk .info dan .debug di Release, Anda perlu menambahkan argumen peluncuran -OSLogPreferencesApp “$(PRODUCT_BUNDLE_IDENTIFIER):debug” di skema Xcode. Tanpa argumen ini, pesan debug tidak dikumpulkan di Release, yang menghemat sumber daya perangkat.

Bagaimana cara menemukan crash log tertentu dalam riwayat?

Buka Window → Organizer → Crashes di Xcode. Organizer menampilkan semua crash log yang dikumpulkan dari perangkat penguji, dikelompokkan berdasarkan jenis pengecualian. Untuk symbolication, diperlukan file .dSYM dari build tempat crash terjadi — Xcode secara otomatis menemukannya jika arsip tersedia.

Kesimpulan

  • Console Xcode — alat bawaan untuk melihat NSLog, os_log, print, dan crash log di Debug Area
  • os_log — API yang direkomendasikan dengan penulisan asinkron, kategori, dan dukungan Unified Logging System
  • Unified Logging menyediakan subsistem dan kategori untuk organisasi log modular
  • Breakpoint log mengeluarkan pesan di Console tanpa menghentikan eksekusi aplikasi
  • Perintah LLDB po, p, expr memberikan kontrol penuh atas pemformatan keluaran di konsol
  • Analisis crash log dimulai dengan pengecualian di Console dan memerlukan symbolication melalui dSYM untuk Release
  • Integrasi dengan Instruments memungkinkan menggabungkan log dengan profiling pada satu skala waktu

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga