Mobil uygulamaların profesyonel hata ayıklaması ve teşhisi, kodda hataları bulmayı ve düzeltmeyi sağlayan mobil geliştirme için önemli bir beceridir. JetBrains Developer Ecosystem (2024)'e göre, geliştiriciler çalışma zamanlarının %30'una kadarını kod hata ayıklamaya harcıyor. IT Sectr, hata ayıklama araçlarının doğru kullanımıyla hata bulma süresini %40 azaltan kendi teşhis uygulamalarını geliştirdi.
Önemli Noktalar
Mobil uygulamalar iki ana yapılandırmada derlenir: Debug ve Release. Debug derlemesi hata ayıklama sembolleri içerir, kodu optimize etmez ve geçici bir imza kullanır — bu, kesme noktaları ayarlamaya, değişkenleri incelemeye ve kodu adım adım çalıştırmaya olanak tanır.
Mobil geliştirme için Release derlemesi, App Store ve Google Play için son sürümdür. Release kodu optimize eder, gereksiz sembolleri ve günlükleri kaldırır ve uygulamayı bir üretim sertifikasıyla imzalar. Release'te hata ayıklama imkansızdır — bir hata yalnızca Release'te tekrarlanıyorsa, Crashlytics veya diğer çökme raporlayıcıları gerekir.
Mobil uygulamalar için doğru strateji: Geliştirme için Debug, yayın öncesi test için Release. IT Sectr, Debug modunda görünmeyen sorunları (örneğin, kod gizleme veya ProGuard/R8 hataları) belirlemek için yayından 2-3 gün önce test cihazlarında Release derlemesini çalıştırmayı önerir.
Debuggable=false, AndroidManifest'te Release için zorunlu bir ayardır. iOS Debug ve Release, Xcode'daki derleme şemasına göre farklılık gösterir — Debug, Debug yürütülebilir dosyasını içerir, Release içermez. iOS ayrıca TestFlight (çökme raporlarıyla) ve App Store yapılandırmasına sahiptir.
Android Studio, Android platformunda mobil uygulamaları hata ayıklamak ve teşhis etmek için eksiksiz bir araç seti sağlar. Logcat, Android sistem günlük konsoludur, günlükleri görüntülemek için ana araçtır, seviyeye (Verbose, Debug, Info, Warn, Error), işleme ve etikete göre filtrelenebilir.
Logcat, cihaz veya emülatördeki tüm işlemlerin günlüklerini gösterir. Her günlüğün bir öncelik seviyesi, etiketi ve mesajı vardır — hata ayıklama mesajları için Log.d(TAG, message), hatalar için Log.e kullanın. Etikete göre filtreleme, binlerce sistem mesajı arasında günlüklerinizi bulmanın en iyi yoludur.
Android'de mobil geliştirmede günlük çıktısı örneği:
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 — Android için görsel UI hata ayıklayıcısı, View hiyerarşisini, her öğenin özniteliklerini ve ekrandaki konumunu gösterir. Çalışan bir uygulamada düzen parametrelerini, iç boşluğu, kenar boşluğunu, görünürlüğü ve metin boyutlarını kontrol etmeye olanak tanır.
Database Inspector — doğrudan Android Studio'da SQLite veritabanlarını görüntüleyin ve düzenleyin, tüm tabloların içeriğini gösterir, SQL sorguları yürütmeye ve gerçek zamanlı olarak verileri değiştirmeye olanak tanır — Room sorgularını ve ContentProvider'ı hata ayıklamak için vazgeçilmez bir araçtır.
Network Inspector — uygulamanın tüm HTTP isteklerini izler, URL, başlıklar, istek ve yanıt gövdesi, yürütme süresi ve durum kodunu gösterir. REST API'sinde hata ayıklamaya, serileştirme doğruluğunu doğrulamaya ve yavaş istekleri tespit etmeye yardımcı olur.
Android'de mobil uygulamaların kapsamlı hata ayıklaması ve teşhisi, listelenen tüm araçlarda ustalık gerektirir. Android Studio bunları daha fazla verimlilik için tek bir IDE'de birleştirir.
Xcode, iOS'ta mobil uygulamaları hata ayıklamak ve teşhis etmek için benzer bir araç seti sağlar. Console, iOS'ta Logcat'in eşdeğeridir, kategoriye ve seviyeye (OSLogType) göre gruplandırılmış sistem ve uygulama günlüklerini gösterir.
Memory Graph Debugger, retain cycle'ları ve bellek sızıntılarını tespit etmek için görsel bir araçtır, referanslarıyla birlikte bellekteki tüm nesnelerin bir grafiğini gösterir. Kırmızı düğümler sızıntıları gösterir — serbest bırakılması gereken ancak hâlâ bellekte olan nesneler.
Memory Graph kullanımı: uygulamayı çalıştırın, Xcode'da Debug Memory Graph düğmesine tıklayın, bir nesne seçin ve gelen referanslarını inceleyin. Bir retain cycle döngüsel bir bağımlılık olarak görünür: A nesnesi B nesnesini tutar, B nesnesi A nesnesini tutar. Çözüm, closure'larda zayıf veya sahiplenilmeyen referanslar kullanmaktır.
View Hierarchy Debugger, iOS'ta Layout Inspector'ın eşdeğeridir, ekrandaki tüm UIView öğelerinin hiyerarşileri, kısıtlamaları ve öznitelikleriyle birlikte 3D görselleştirmesini gösterir. Herhangi bir öğeyi seçip konumunu, rengini, boyutunu ve düzen kısıtlamalarını görmeye olanak tanır.
Heap Dump uygulamanın tüm belleğinin bir anlık görüntüsüdür, analizi serbest bırakılmayan nesneleri bulmaya ve her sınıfın toplam bellek kullanımını tahmin etmeye yardımcı olur. Xcode'da Heap Dump, Debug Navigator'daki Memory Report aracılığıyla kullanılabilir.
LLDB, C, Objective-C ve Swift uygulamaları için düşük seviyeli bir hata ayıklayıcıdır, kesme noktalarını, izleme noktalarını, derleme dökümünü ve dinamik değişken değişikliğini destekler. LLDB'de po (print object) komutu, bellekteki herhangi bir nesnenin açıklamasını çıktılar.
Watchpoint, bir değişkenin değeri değiştiğinde tetiklenen bir kesme noktasıdır, bir nesne alanının değerini kimin ve ne zaman değiştirdiğini izlemek için kullanışlıdır. Belirli bir satırda tetiklenen breakpoint'ten farklı olarak, watchpoint herhangi bir bellek değişikliğinde tetiklenir.
iOS'ta profesyonel hata ayıklama ve teşhis, Xcode deneyimi ve bellek yönetimi anlayışı gerektirir. Apple, her hata ayıklama aracı için eksiksiz dokümantasyon sağlar.
Proxy araçları, mobil uygulamalardaki ağ sorunlarını teşhis etmek için gereklidir. Charles Proxy, mobil geliştirme için en popüler HTTP proxy'sidir, uygulama ve sunucu arasındaki istekleri yakalamaya, görüntülemeye ve değiştirmeye olanak tanır.
Charles Proxy, ortadaki adam olarak çalışır: cihazı Charles'ı proxy olarak kullanacak şekilde yapılandırırsınız (genellikle bilgisayarın IP'si, bağlantı noktası 8888). Charles, başlıkları, gövdeyi, çerezleri ve yürütme süresini görüntüleme yeteneğiyle tüm HTTP ve HTTPS isteklerini gösterir. SSL Proxying, analiz için HTTPS trafiğinin şifresini çözmeye olanak tanır.
Charles özellikleri: Breakpoints (düzenleme için isteği duraklatma), Rewrite (otomatik istek değişikliği), Map Local (yanıtları yerel dosyalarla değiştirme). Map Local, gerçek API olmadan test etmek için vazgeçilmezdir — sunucu yanıtı yerine önceden hazırlanmış bir JSON döndürürsünüz.
Proxyman, daha temiz bir arayüze, daha iyi M1 ve M2 desteğine ve gizlilik korumasına sahip macOS için modern bir Charles alternatifidir. Aynı özellikleri destekler: yakalama, SSL proxy, istek düzenleme ve otomatik trafik değişikliği için komut dosyaları.
Wireshark, derin ağ teşhisi için profesyonel bir trafik analizörüdür, tüm OSI katmanlarını analiz eder: TCP, DNS, TLS el sıkışması, ICMP. Yavaş bağlantıları, DNS sorunlarını ve düşük seviyeli ağ hatalarını teşhis etmek için kullanılır.
Stetho, Chrome tarayıcısı aracılığıyla Android uygulamalarında hata ayıklamak için Facebook'tan bir kütüphanedir, Chrome DevTools aracılığıyla veritabanlarını, ağ isteklerini, View Hierarchy'yi ve Shared Preferences'ı görüntülemeye olanak tanır. Flipper, iOS desteği ve eklenti mimarisiyle Stetho'nun halefidir.
API istemcileri, uygulamanın kendisini çalıştırmadan mobil uygulamaların backend'inde hata ayıklamak ve teşhis etmek için kullanılır. Postman, koleksiyonlar, testler ve otomasyonla en popüler API istemcisidir, GET, POST, PUT, DELETE istekleri göndermeye ve başlıkları, çerezleri ve ortam değişkenlerini yönetmeye olanak tanır.
Insomnia, daha hızlı bir arayüz, yerleşik GraphQL desteği ve daha iyi koleksiyon organizasyonuyla Postman'a hafif, açık kaynaklı bir alternatiftir. Eklentileri destekler: temalar, dışa aktarma, farklı dillerde kod oluşturma.
Httpie, okunabilir çıktıya sahip bir komut satırı HTTP istemcisidir, terminalde doğrudan renkli JSON yanıtı, başlıkları ve durumu gösterir. Bir GUI uygulaması açmadan hızlı API kontrolleri için uygundur.
Httpie kullanım örneği:
http POST https://api.example.com/v1/users \
"Authorization: Bearer token123" \
name="John" email="john@example.com"
IT Sectr şu kombinasyonu önerir: API analizi ve dokümantasyonu için Postman + hızlı kontroller için Httpie. Swagger veya OpenAPI belirtiminden bir Postman koleksiyonu içe aktarın — bu, test edilen uç noktaların sunucu dokümantasyonuyla eşleşmesini sağlar.
| Araç | Platform | Hata Ayıklama Türü | Ücretsiz | En İyi Kullanım |
|---|---|---|---|---|
| Logcat | Android | Günlük Kaydı | + | Uygulama ve sistem günlüklerini görüntüleme |
| Layout Inspector | Android | UI/View | + | View hiyerarşisi ve özniteliklerini kontrol etme |
| Memory Graph | iOS | Bellek | + | Bellek sızıntısı teşhisi |
| View Hierarchy | iOS | UI/View | + | UIView 3D görselleştirme |
| Charles Proxy | iOS/Android | Ağ | 30 günlük deneme | HTTP/HTTPS trafiği yakalama |
| Proxyman | iOS/Android | Ağ | + (sınırlı) | macOS için modern HTTP proxy |
| Wireshark | Tüm platformlar | Ağ (derin) | + | Tüm OSI katman analizi |
| Postman | Tüm platformlar | API | + | REST/GraphQL API testi |
| Insomnia | Tüm platformlar | API | + | GraphQL ile Postman alternatifi |
| LLDB | iOS/macOS | Düşük seviyeli | + | Adım adım hata ayıklama, derleme |
Sıkça Sorulan Sorular
Debug derlemesi hata ayıklama sembolleri içerir, kodu optimize etmez ve geçici bir imza kullanır. Release derlemesi kodu optimize eder, günlükleri kaldırır, gizler ve bir üretim sertifikasıyla imzalar. Debug USB veya emülatör aracılığıyla, Release — App Store veya Google Play aracılığıyla kurulur.
Android Studio Memory Profiler'ı kullanın — ayrılan ve serbest bırakılan nesneleri ve GC olaylarını gösterir. Bir Heap Dump alın ve serbest bırakılmayan nesneleri analiz edin. finish()'ten sonra bellekte kalan Activity ve Fragment örneklerini arayın. LeakCanary kullanın — kütüphane sızıntıları otomatik olarak tespit eder.
Bilgisayarda: Charles'ta SSL Proxying'i etkinleştirin (Proxy → SSL Proxying Settings). Cihazda: Charles CA sertifikasını (chls.pro/ssl) yükleyin ve ayarlarda güvenin. iOS 13+'te, General → About → Certificate Trust Settings'te sertifika güvenini etkinleştirin. Android 7+'da network_security_config.xml yapılandırması gerekir.
Breakpoint, belirli bir kod satırında yürütmeyi durdurur. Watchpoint, bir değişkenin değeri değiştiğinde yürütmeyi durdurur. Breakpoint satıra her ulaşıldığında tetiklenir, watchpoint izlenen bellekteki herhangi bir değişiklikte tetiklenir. Watchpoint, beklenmeyen alan değişikliklerini bulmak için kullanışlıdır.
Apollo DevTools'u (tarayıcı uzantısı) veya GraphQL desteği olan Insomnia'yı kullanın. Charles ve Proxyman, GraphQL isteklerini normal HTTP POST olarak yakalar — sorguları, değişkenleri ve yanıtları görüntüleyebilirsiniz. Ayrıntılı hata ayıklama için — Apollo Client Developer Tools.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.