Swift’in zarif tasarimina ragmen, sistem hata mesajlari genellikle anlasilmaz ve yardimci olmaktan uzak. Sadece sikayet etmek yerine, bu mesajlari insan dostu aciklamalarla eslestiren bir arac olan ErrorKit’i olusturdum. Ama Apple’in tum ekosistemini eselemek tek bir kisi icin cok buyuk bir gorev – bunun bir topluluk calismasi olmasi gerekiyor.
Bu yazida, gelistirilmis hata aciklamalari icin kurdigum temeli paylasacak ve Swift gelistiricileri icin kapsamli bir kullanici dostu hata mesajlari sozlugu olusturmak icin bana katilmani davet edecegim.
Sistem Hata Mesajlarindaki Sorun
Yardimci olmayan sistem hata mesajlarinin gercek orneklerine bakalim:
// File system error
"The file couldn't be opened because it doesn't exist."
// Better message: "The file 'report.pdf' could not be found. Please verify the file name and location."
// Core Data error
"The operation couldn't be completed. (Cocoa error 133000.)"
// Better message: "The database has a validation error. One or more required fields are empty or have invalid values."Bu varsayilan mesajlarin birkac sorunu var:
Genellikle son kullanicilar icin cok teknik
Neyin denendigi hakkinda baglam eksik
Sorunu nasil cozecekleri konusunda nadiren oneriler sunuyorlar
Bazen duz duz yanlis veya yaniltici
Kullanicilarin gormemesi gereken uygulama detaylarini ifsa edebilirler
Apple’in onlarca framework’u arasinda binlerce hata kodu var ve bunlarin bircogu onlarca yildir mevcut. Daha yeni API’leri iyilestirmis olsalar da, bircok eski framework hala kullanicilar icin degil, gelistiriciler icin tasarlanmis mesajlar donduruyor.
Cozum: Topluluk Tarafindan Secilmis Hata Eslemeleri
ErrorKit, sistem hatalarini daha yardimci mesajlara eslestiren userFriendlyMessage(for:) adinda bir fonksiyon sunuyor:
do {
let data = try Data(contentsOf: url)
// Process data...
} catch {
// Instead of showing the default message
// showAlert(error.localizedDescription)
// Show an enhanced message
showAlert(ErrorKit.userFriendlyMessage(for: error))
}Arka planda bu fonksiyon hatayi analiz ediyor ve buyuyen bir bilinen hata turleri setine dayanarak daha iyi bir aciklama donduruyor:
// Example from ErrorKit's implementation
enum FoundationErrorMapper: ErrorMapper {
static func userFriendlyMessage(for error: Error) -> String? {
let nsError = error as NSError
// URL loading errors
if nsError.domain == NSURLErrorDomain {
switch nsError.code {
case NSURLErrorNotConnectedToInternet:
return String(localized: "You are not connected to the Internet. Please check your connection.")
case NSURLErrorTimedOut:
return String(localized: "The request timed out. Please try again later.")
// Many more cases...
}
}
// File system errors
if nsError.domain == NSCocoaErrorDomain {
switch nsError.code {
case NSFileNoSuchFileError:
return String(localized: "The file could not be found.")
// Many more cases...
}
}
// More domains and error codes...
return nil // Fall back to default handling
}
}Mevcut Kapsam ve Ornekler
ErrorKit, onemli Apple framework’leri arasinda yaygin hatalar icin eslemeler iceriyor:
Foundation
Ag:
NSURLErrorNotConnectedToInternet-> “Cihaziniz internete bagli degil. Lutfen baglantinizi kontrol edip tekrar deneyin.”Dosya Sistemi:
NSFileNoSuchFileError-> “‘report.pdf’ dosyasi bulunamadi. Lutfen dosya adini ve konumunu dogrulayin.”
Core Data
Dogrulama:
NSValidationErrorMinimum-> “Veritabani dogrulamasi basarisiz oldu. Lutfen girdilerinizi kontrol edip tekrar deneyin.”Depo Yonetimi:
NSPersistentStoreCoordinatorError-> “Veritabani hatasi. Bu, yakin zamandaki bir uygulama guncellemesi veya dosya bozulmasi nedeniyle olabilir.”
MapKit
Yol Tarifi:
MKErrorDirectionsNotFound-> “Istenen rota icin yol tarifi bulunamadi.”Konum:
MKErrorLocationUnknown-> “Mevcut konum alinamiyor. Lutfen konum izinlerini kontrol edin.”
Neden Bir Topluluk Yaniti Gerekiyor
Ideal bir dunyada Apple tum kafa karistirici hata mesajlarini duzetirdi. Ve adil olmak gerekirse, isleri iyilestirdiler – SwiftUI gibi daha yeni framework’ler cok daha net. Ama onlarca yillik eski API’ler hala muhtemelen bir daha dokunulmayacak teknik, anlasilmaz mesajlar donduruyor.
Toplulugumuzun gercek bir etki yaratabilecegli yer burasi. Tek bir gelistirici her belirsiz hatayi gormemistir – ama hep birlikte cogunu gormusuzdir. Zaten cozdugumuzu paylasarak ve bu mesajlari sade bir dille yeniden yazarak, herkese zaman kazandiran ve gelistiriciler ile kullanicilar icin deneyimi iyilestiren bir kaynak olusturabiliriz.
Nasil Katki Saglayabilirsin
Bir sistem hata mesajini daha yardimci hale getirmek icin yeniden yazdiysan, isi zaten yapiyorsun – simdi paylasabilirsin. Iste 3 genel adim:
Kotu bir mesaj yakala
Hata domain’ini ve kodunu, onu tetikleyen islemi veuserInfosozlugundeki faydali bilgileri not et.Daha iyi bir versiyon yaz
Sade bir dil kullan. Spesifik ol. Mantikli oldugunda yardimci bir sonraki adim oner.GitHub’da gonder
ErrorKit deposuna iyilestirilmis mesajini, orijinal baglami ve notlarini iceren bir pull request veya issue ac.
Kucuk katkilar bile binlerce gelistiriciye yardimci olabilir ve milyonlarca kullanicinin deneyimini iyilestirebilir!
Apple Framework’lerinin Otesinde: Herhangi Bir Kutuphanenin Hatalarini Eslemek
Apple framework’leri birincil odak noktasi olsa da, ErrorKit’in hata esleme sistemi herhangi bir hata turuyle calisiyor. ErrorMapper protokolu, gelistiricilerin ucuncu parti kutuphaneler icin ozel eslemeler olusturmasina olanak taniyor:
// Example mapper for Alamofire networking errors
enum AlamofireErrorMapper: ErrorMapper {
static func userFriendlyMessage(for error: Error) -> String? {
switch error {
case let afError as Alamofire.AFError:
switch afError {
case .sessionTaskFailed(let underlying):
if let urlError = underlying as? URLError {
switch urlError.code {
case .notConnectedToInternet:
return String(localized: "Your device isn't connected to the internet. Please check your connection and try again.")
case .timedOut:
return String(localized: "The server took too long to respond. Please try again later.")
default:
return nil
}
}
return nil
case .responseValidationFailed(let reason):
if case .unacceptableStatusCode(let code) = reason {
return String(localized: "The server returned error \(code). Please check your request or try again later.")
}
return nil
default:
return nil
}
default:
return nil
}
}
}
// Register for immediate use
ErrorKit.registerMapper(AlamofireErrorMapper.self)Bu genisletilebilirlik su olanaklari aciyor:
Uygulamanda Alamofire gibi populer kutuphaneler icin ozel eslemeler ekleme
Stripe, Admob gibi kapali kaynakli SDK’lar icin mapper paketleri olusturma
Ekipler veya organizasyonlar icerisinde hata eslemelerini paylasma
Sonuc
Hata mesajlari kullanici deneyimini onemli olcude etkiler ama gelistirmede genellikle gozden kacirilir. ErrorKit’in userFriendlyMessage(for:) fonksiyonu, bunu topluluk is birligi araciligiyla donusturmek icin bir cerceve olusturuyor – gelistiricilerin bilgilerini birlestirerek tum Swift ekosistemini daha kullanici dostu hale getirdigi bir cerceve.
Anlasilmaz hata mesajlarini cozduysen, deneyimin degerli. ErrorKit’e katki saglayarak bu sorunlari sadece kendin icin degil, ayni zorluklarla karsilasan her Swift gelistiricisi icin cozebilirsin. ErrorKit’e goz at ve bu topluluk kaynagini olusturmak icin cozumlerini paylas:
Apple framework’lerinde anlasilmaz hata mesajlariyla karsilastin mi? Kendin icin daha yardimci hale getirdin mi? Sosyal medyada (asagidaki linklerden) bana bildir!

