Storyboard ile SwiftUI Hakkında

XCode11 ve iOS 13 ile beraber apple yeni tasarım aracı olan SwiftUI’ı duyurdu. Bu değişikliği geliştirmeye başladığım günden beri kaçıncı kez yaşadığımı unuttum Interface Builder ile başlayan serüven SwiftUI’a doğru ilerliyor görünen. Ama planlamayı nasıl yapmalıyım, SwiftUI’ı bugünden kullanmak mümkün mü, kullansam ne olur, kullanmasam ne kaybederim gibi sorularının doğru cevaplarını bende aramaktayım. Fakat her zaman olduğu gibi tek doğru yok maalesef, projeye bağlı olarak değerlendirmek gereken bir süreç bu.

Öncelikle neden böyle bir geliştirmeye ihtiyaç duyuldu konusunu biraz irdelemek lazım. Apple’dan keyfi olarak böyle bir çaba içinde değil tabi ki. Storyboard güzel bir arayüz geliştirme aracı, ekran geçişlerini yönetmek ve uygulamanın akışını da belirleyebilmek için önemli özelliklere sahip. Birden fazla ekranın tek bir storyboard içerisinde yönetimi güzel fakat beraberinde farklı sorunlar doğurmakta. Örneğin;

  • Az ekranı olan bir uygulama geliştirirken çok farketmeyebilirsiniz fakat ekran sayınız arttıkça sizi çok yavaşlatacak düzeyde performans sorunları yaşarsınız. Çözüm olarak modüler veya uygulama akışına uygun bir gruplama düşünüp farklı storyboard’lara parçalama şansınız var ama bu da bir yerden sonra kontrolü kaybetmenize sebep olabilmekte.
  • Uygulama geliştiren bir ekiptesiniz, projeniz Git’de duruyor ve sizden başka developer’larda aynı app üzerinde geliştirme yapmakta. Ekip arkadaşlarınızla aynı storyboard içerisinde farklı ekranlarda geliştirme yapıyorsanız commit sonrasında karşınıza bir çok conflict durumunun çıkması muhtemel ve aldınız başınıza belayı. Storyboard’un belki de en çok can yakıcı olduğu konu budur, bir ekrada label’ı azcık kaydırırsınız fakat bu storyboard’unuzu değiştirdiğiniz anlamına gelecektir. Yine buna da çözüm olarak farklı storyboard’lar oluşturma yoluna gideceksiniz ama böl böl nereye kadar, kalıcı ve stabil bir çözüm üretmek çok zor. Bu konudan dertli olanlar çözümü Storyboard’dan vazgeçip tüm arayüzleri kod ile oluşturma yoluna gittiler ama orası da pek dikensiz değil.
  • Arayüzlerinizi Storyboard’la oluşturduğunuz zaman, uygulamayı çalıştırmadan çıktınızın nasıl olacağı ile ilgili bir fikir edinme şansınız var, en azından preview ekranlarını kullanabilirsiniz bunun için. Fakat kodla yaptıysanız tüm geliştirmeyi, yazar durursunuz ve her yazdığınızın nasıl bir arayüz oluşturduğunu görmek için app’i derleyip çalıştırmanız gerekecek ki, yorulursunuz. 🙂 Belki playground’da yazmak fikri gelebilir aklınıza, orda yazar sonra projenize taşırsınız ki yine yorulursunuz ve tüm logic’i playground’a taşıyamayacağınız için sürdürmekte zorlanırsınız.
  • AutoLayout güzeldir, alışırsanız ne isterseniz yapabileceğiniz esnekliği verir size. Güzel güzel tasarlarsınız ekranınızı, constraint’lerinize baktıkça duygulanırsınız fakat bir teste çıkarsınız, yöneticinize veya müşterinize gösterirsiniz uygulamayı ve gelir yorumlar. Başlar ekranlarda revizeler gelmeye, müşteri ayrı beğenmez, tasarımcı onun beğendiğini beğenmez. Ve bir süre sonra sildiğiniz constraint’lerle bozulan ekranlarınızı toparlamaya çalışırken bulursunuz kendinizi. Bu açıdanda düşününce kod ile tasarlamak daha stabil çözüm olacaktır. SnapKit benzeri library’lerde burdaki sürecinizi kolaylaştıracaktır.

Biraz süreci özetlemeye çalıştım, göreceğiniz gibi optimum bir çözümü üretmek gerçekten zor. iOS beraberinde Android’de geliştirdiğim için biraz kıyas yaparak ilerleyebilirim. Android’de arayüzlerinizi UI aracını kullanarak geliştirebileceğiniz gibi, Android Studio’nun bu konuda Xcode kadar başarılı olamaması sebebiyle xml yazarak tasarlarsınız, fakat güzelliği şudur ki, siz xml’lerle oynarken ekranın bir tarafında çıktıyı görebilirsiniz. Bu açıdan android için arayüz geliştirmeyi +1 önde kabul ederim her zaman. Son dönemde android için storyboard diyebileceğimiz “Navigation Architecture Component” o tarafta farklı bir sürecin başlaması gibi fakat bunları başka bir yazıda konuşmak daha sağlıklı olur.

İşte tam bu noktada iOS’un sıkıntılarına derman olacak nitelikte SwiftUI. Hem arayüzünüzü kod ile geliştirmenize hem de çıktılarınızı derleme ihtiyacı duymadan görebilmenize imkan sağlaması muhteşem. Ayrıca state bazlı geliştirme yapabildiğiniz için yapmanız gereken bir çok geliştirmeyi basit ve kolay çözmenize imkan sağlar nitelikte. Basit bir ekranı ve çıktısını aşağıya ekliyorum.

Kesinlikle çok iyi geldin SwiftUI

SwiftUI daha yolun başında, gelişmeye ihtiyaç duyulan çok nokta var ve zamanla gelişecektirde. Ama ilerleyişin ne yönde olacağını kestirmek zor değil. Fakat aşağıdaki değerlendirmeler önemli;

  • Mevcutta geliştirdiğimiz bir çok app var, bireysel veya kurumsal. Bireysel olarak maliyetini üstlenip app’lerinizi SwiftUI ile yeniden geliştirmeyi değerlendirebilirsiniz, sizin insiyatifiniz. Fakat bunu app sahibi müşterinize anlatmanız çok zor. Bugün yani başlanılan bir app’in özel bir nedeni yoksa Swift ile başlanması yüksek ihtimal ama halen daha Objective-C için destek verdiğimiz müşterilerimizde var. Şimdi bu noktada siz ben sadece Swift bilsem yeter diyemiyorsunuz ve Objective-C’i tamamen gündeminizden çıkaramıyorsunuz. 2014’te duyurusu yapılan Swift için söylüyoruz bunu. Üzerinden 6-7 yıl geçmiş olmasına rağmen halen daha Objective-C varlığını bir şekilde sürdürmekte.
  • Apple 2014’te Swift 1.2 versiyonunu duyurduktan sonra kullanmaya başlayanlardanım. Aynı zamanda tam o dönemlerde verdiğim Objective-C eğitim içeriklerini yavaş yavaş Swift’e kaydırmaya da başlamıştım. Fakat sonraki süreçte öyle değişikliklere uğradı ki Swift, 3.0 versiyonu gelince ilk haliyle alakası yok düzeye gelmişti ve yıl 2016 olmuştu. Aslında ilk çıkan 1.2 versiyonu üstünde yapılan geliştirmelerle stabil bir versiyonun çıkması 2 yıl kadar sürmüştü. SwiftUI içinde benzer bir sürecin yaşanacağını düşünmekteyim. Apple bizlere bir oyuncak verdi, gelecek katkılarla 2 yıl belki daha uzun bir süre bu oyuncağın ne noktalarda revize göreceğini izleyeceğiz.
  • Herşeyden önemli olanı şu ki, SwiftUI kullandığınız zaman iOS13 altı versiyonları destekleyemiyorsunuz. Apple kullanıcılarının güncelleme hızları çok iyidir, %80 kullanıcı çok kısa sürede iOS13e geçmiştir zaten. Fakat iOS13e cihaz veya bilgi kısıtı sebebiyle geçmeyen ciddi bir kullanıcı kitlesi de mevcut her zaman. Ve kurumsal bir app’te iOS13 ve üstünü destekleyelim diye müşterinizi ikna etmeniz çok zor ve şuan için mantıklı da değil. Bu sebeple iOS13 altı versiyonları desteklemesekte olur noktasına gelinceye kadar Storyboard’dan vazgeçmeniz çok mümkün değil.

Bugün yapmanız gereken SwiftUI gelişimini takip etmek. Şimdiden başlayarak incelemek, ekranlar tasarlamak. Uygulama geliştirme dinamiklerinin değişeceği bir süreci yaşayacağız bir dönem sonra, o güne hazırlık yapmak. Sadece SwiftUI ile sınırlı değil oradaki gelişmeler, reactive programlama için RXSwift yerine Combine, Cocoapods yerine yavaş yavaş Swift Package Manager gibi bir değişim süreci yaşıyoruz. Karantina günlerinde fırsatınız varken bol bol okumanız en iyisi. Öğrenelim ama kullanmaya başlamakta çok acele etmeyelim. Hoşçakalın…

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn
Bu yazıyı beğendiyseniz daha fazla kişiye ulaşmasını sağlamak için paylaşabilirsiniz.