1 Neden 2026'de UIKit

Apple, SwiftUI'nin yıllık WWDC'deki evrimini vurguluyor ve ilan edilen UI'nin rahatlığı artık şüpheli değil.

Ancak, bu uygulamanın vermeyen gereksinimleri vardır. Metin Süresini (başlangıçtan metin girişine kadar olan süre) 500ms veya daha azına yapmaktır.

SwiftUI'de, @StateObject'in başlatılması, body'in yeniden değerlendirilmesi ve .onAppear'nin zamanlama kontrolü gibi bildirimsel UI çerçevesine özgü bir ek yük vardır. Bunlar genel uygulamalarda göz ardı edilebilir, ancak optimizasyonun milisaniyeler içinde takip edildiği durumlarda göz ardı edilemez.

Öte yandan, UIKit'in viewDidAppear'inden becomeFirstResponder()'i çağıran yol deterministik olarak hızlıdır. ViewController'ın yaşam döngüsü açıktır ve klavyenin ne zaman görüntüleneceğini doğru bir şekilde kontrol edebilirsiniz.

Tasarım kararı:UIKit, Time-to-Text 500ms veya daha azının işlevsel olmayan gereksinimlerini karşılamak için kullanılır.

2 Storyboard'u tamamen ortadan kaldırmanın nedeni

Sadece UIKit'i seçmek yeterli değil. Storyboard ayrıca başlangıç performansını etkileyen ek yüke sahiptir.

  • XML analiz maliyeti:Storyboard dahili bir XML dosyasıdır ve başlangıçta ayrıştırılması gerekir
  • Segue çözünürlük maliyeti:Ekran geçişi için Segue ayarlarını çözmek zaman alır
  • Gereksiz karmaşıklık: Storyboard'un görsel tasarım araçları basit not uygulamaları için aşırı

doğrudan SceneDelegate ile ViewController oluşturma yöntemini benimsedi.

func scene(_ scene: UIScene, willConnectTo session: UISceneSession,
           options connectionOptions: UIScene.ConnectionOptions) {
    PerformanceLogger.shared.signpostBegin(name: "SceneConnect")
    guard let windowScene = (scene as? UIWindowScene) else { return }
    let window = UIWindow(windowScene: windowScene)
    let composeVC = ComposeViewController()
    let navController = UINavigationController(rootViewController: composeVC)
    window.rootViewController = navController
    window.makeKeyAndVisible()
    PerformanceLogger.shared.signpostEnd(name: "SceneConnect")
}

Bu yaklaşım Storyboard için sıfır Perth zamanı ve sıfır Segue çözüm süresi elde eder. ComposeViewController'ı doğrudan SceneDelegate'den oluşturarak, gereksiz işlem başlangıç yolundan tamamen ortadan kaldırılmıştır.

3. 1 viewDidAppear serisi her şeyi tamamlar

UIKit'in en büyük gücü, ViewController'ın Yaşam Döngüsünün açıkça tanımlanmasıdır. viewDidAppear(_:) çağrıldığında, görünüm ekranda tam olarak görüntülenir. Bu belirli zamanda becomeFirstResponder()'i arayarak, klavyenin görüntülenmesine kadar gecikmeyi en aza indirebilirsiniz.

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    activateTextInput()
}

private func activateTextInput() {
    textView.becomeFirstResponder()
    PerformanceLogger.shared.endTimeToText()
}

Ölçümler os_signpost ile nanosaniye doğruluğu ile gerçekleştirilir. PerformanceLogger.shared.endTimeToText(), Signpost sonlandırma olayını kaydeder ve Instruments'ta ayrıntılı analiz sağlar.

Ölçüm sonuçları:Hedef en fazla 500 ms’dir. Simgeye dokunuştan itibaren ekran kaydıyla ölçülen testte (11/8/2026, iPhone 16e, sıcak başlatma), metin alanı 0.17 saniyede odaklandı ve klavye 0.4 saniyede tamamen göründü.

4. Performans ölçüm mekanizması

Tasarım kararları, "hızlı" duyusal bir yargıdan ziyade nicel verilere dayanarak verilir.

  • Performans Kaydedici:os_signpost ile sarılmış özel kaydedici. Başlangıç, iletim ve kullanıcı arayüzü güncellemesinin her aşamasını ölçün
  • Enstrüman işbirliği:Xcode'un os_signpost Instrument ile nanosaniye doğruluk izleme mümkündür
  • Ana ölçümler: Metne Kadar Süre (başlangıç → giriş mümkün), Sıfırlamak için Gönder (gönder düğmesi → UI başlatma)
  • Sürekli izleme:Geliştirilmekte olan tüm yapılarda performans ölçümleri yapın ve gerilemeyi anında tespit edin

Performans bir işlevdir. Kullanıcılar açıkça "hız" gerektirmese bile, yavaş uygulamalar bilinçsizce kullanılmayacaktır. Bu nedenle performansı sayısal olarak yönetmeye devam etmek önemlidir.

5. SwiftUI'nin kullanıldığı bir durum var mı?

UIKit tek seçenek değil. Uygulamada SwiftUI'nin uygun olduğu bazı durumlar var.

  • Ayar ekranı: SwiftUI'nin bildirimsel kullanıcı arayüzü, başlangıç hızını etkilemeyen kritik olmayan ekranlarda üretkenliği artırır
  • Kritik yolun tanımı:Başla → Notları girin → UIKit ile göndermenin temel akışını koruyun
  • Hibrit karmaşıklık:UIKit ve SwiftUI'yi karıştırmak, UIHostingController yönetimi ve veri akışının tutarlılığına dikkat etmeyi gerektirir
  • Şu anda yargı: Not uygulamasının kullanıcı arayüzü basittir ve kod tabanlı tutarlılığı korumak için tam ekran bir UIKit ile birleştirmek daha iyidir

SwiftUI'nin performansı gelecekte daha da iyileştirilirse, yeniden değerlendirmeye yer var, ancak kritik yol UIKit şimdilik korunacak.

Sık sorulan sorular

S. SwiftUI'de 500ms veya daha azını başlatmak imkansız mı?
Bu imkansız değil. Ancak, SwiftUI'de@StateObjectvebody'nın yeniden değerlendirilmesi için işlem eklenmiştir. En hızlıyı hedefleyen bu gelişmede, yaşam döngüsünü ayrıntılı olarak kontrol edebilen UIKit'i seçtik (ikisini aynı koşullar altında ölçmenin ve karşılaştırmanın sonucu değil).
S. Storyboard kullanmamanın dezavantajları nelerdir?
UI görselleştirmesi kod tabanlı hale gelir. Interface Builder'da tasarımı sürükleyip bırakamazsınız. Bununla birlikte, not uygulamasının kullanıcı arayüzü basittir, bu nedenle kod tabanlı bir kullanıcı arayüzü oluşturmada sorun yoktur.
S. Gerçek makinedeki ölçüm sonuçları nelerdir?
Hedef 500 ms veya altıdır. Kaydı bulunan ölçüm, simgeye dokunulduğu andan itibaren ekran kaydıyla yapılmıştır: 11/8/2026, iPhone 16e, sıcak başlatma. Giriş alanının odaklanması 0.17 saniye, klavyenin tamamen görünmesi 0.4 saniyedir. Geliştirme sırasında,os_signpostile kaydedilir ve Instruments ile analiz edilir.
S. Gelecekte SwiftUI'ye geçmeyi planlıyor musunuz?
Kritik yol (başlangıç → giriş → gönder) UIKit'i korur. Ayar ekranı gibi kritik olmayan ekranlar için SwiftUI'yi benimsemeyi düşünmek için yer vardır.