SwiftUI nedir diye merak edenler için özet geçelim:
Apple'ın her sene geliştiriciler için düzenlediği WWDC konferansında bu sene SwiftUI adlı yeni bir kullanıcı arayüzü geliştirme (UI) kütüphanesi tanıtıldı. Web geliştirme dünyasında son yıllarda bir hayli yaygınlaşan deklaratif/reaktif programlama (örn. React) kütüphanelerine bir hayli benzeyen bir yapısı var. Her ne kadar arayüz geliştirme kütüphanesi desek de, yapı olarak mevcut arayüz geliştirme yöntemlerinden farklı olduğundan tüm alışkanlıkları kenara bırakıp yeni bir yapı ile çalışmayı gerektiriyor.
Apple'ın bu tarz bir UI geliştirme kütüphanesine ihtiyacı olduğunu yıllardır söylüyorum. NSIstanbul'da 3.5 sene önce yaptığım "Auto-Layout Öldü Mü" sunumunda da bu ihtiyacı detaylı anlatmıştım. iOS geliştirmenin en sıkıcı yanı arayüz oluşturmanın çok uğraştırıcı olması. İster storyboard ister kod ile geliştirin, iki tarafın da ciddi eksileri var. Auto-Layout çok güçlü, ancak uygulaması ve debug etmesi meşakkatli. Her değişikliği test etmek için projeyi tekrar derleyip cihazda çalıştırma zorunluluğu da zaman kaybı.
SwiftUI bu sorunları çözmeyi vaadediyor. Arayüz kodunu yazarken sağdaki panelde arayüzün görselleştrilmiş bir halini görüyorsunuz. Yine bu panelden uygulamayı cihazda çalıştırmadan kullanabiliyorsunuz. Sürükle bırak ile arayüz elemanlarını bu panele sürükleyip ekleme yapabiliyorsuzun. Xcode kodu sizin için güncelliyor. Auto-Layout yerine yatay ve dikey stack'ler (desteler) kullanıyorsunuz. Yapılan değişikliklerin sonucunu anında görmek arayüz geliştirmeyi müthiş hızlandırıyor.
Elbette bu sihirli bir değnek değil. Çok kapsamlı ve detaylı olmasından dolayı ciddi bir öğrenme süreci geçirmeniz gerekiyor.
Bu kısa özetten sonra SwiftUI öğrenmeye başlama sürecime geçelim:
Bir yazılımcı olarak, yeni çıkan ve güzel şeyler vaat eden programlama araçlarına (kütüphane, yazılım mimarisi, vs.) mesafeli yaklaşıyorum. Zira ilk çıktıklarında bir fikir, ve bu fikrin işe yarayacağı güçlü örneklerle yazılımcıları etkiliyorlar ve bu efsun sayesinde defolarının ortaya çıkması zaman alıyor. Bu, "yeni çıkmış teknolojileri hemen benimsemeye, ve geliştirilecek üründe erkenden kullanma" durumuna "Hype-Driven Development", yani "Heyecan Güdümlü Geliştirme"(çeviremedim sanki) diyoruz.
Bu prensibim sebebiyle Swift öğrenmek için 2 yıl bekledim. Angular.js'i öğrenmeye başlamadan kayboldu gitti. React'i seneler sonra, yerini sağlamlaştıktan sonra şimdi öğreniyorum.
SwiftUI için de planım benzerdi. 2020 sonu gibi yavaştan öğrenmeye başlarım diyordum. Twitter'da takip ettiğim yazılımcılar ve okuduğum blog yazıları SwiftUI'ın henüz canlıya çıkmaya uygun olmadığını söylüyorlardı. Ayrıca SwiftUI ile yapılmış bir uygulama sadece iOS13 ve üstü versiyonlarda çalışıyor, bu da kütüphanenin genel kullanımının en erken 2021'de başlaması demekti. Ek olarak SwiftUI arayüzünü görsel olarak yanda görüntüleme özelliği sadece macOS Catalina'da çalıştığını belirteyim.
Fakat geçen ay dostum Adem (@ademilter) SwiftUI'a biraz baktığını ve çok beğendiğini söyledi. Benden de ufak bir uygulama yapmamı, genel olarak internetten veri çekme ve bu veriyi SwiftUI ile yapılmış arayüzde listelememi istedi. iTunes API'sine bağlanıp bir sanatçının şarkılarının listesini çekelim dedik.
Hızlı olsun diye hemen Alamofire + Moya ikilisi ile iTunes API'ye bağlanan bir network stack kurdum. SwiftUI ile de arayüzü oluşturdum. Sonra 1 saat uğraştım ve datayı nerede, nasıl çekeceğimi ve bağlayacağımı bulamadım. Öğrenmem gerekiyordu.
Apple'ın SwiftUI tutorialları ile başladım. Genel olarak UI oluşturmayı anlatasalar da, pratikte ihtiyaç duyulan bir çok konuyu anlatmıyorlardı. Yine de bu tutorial sayfalarının kalitesinden dolayı ilgili takımı tebrik etmek gerek.
Pratikte app yapmayı anlatan materyalleri aramadan önce, kompleks bir arayüz bulup onun aynısını SwiftUI ile yapmayı denedim. Bu süreçte SwiftUI'ın arayüz çalışma prensibini bir hayli öğrendim. Her türlü arayüzü kolaylıkla yapabiliyorsunuz. Sadece biraz sabır göstermelisiniz, çünkü layout konusunda bildiğiniz doğruları unutmanız ve yeniden öğrenmeniz gerek. SwiftUI'ın çalışma prensiplerini detaylı anlatan harika bir yazı dizisi buldum: https://netsplit.com/swiftui/views-choose-their-own-sizes/ Bu yazıdan başlayıp next next diyerek son yazıya kadar tüm yazıları okumanızı tavsiye ederim.
İncelediğim materyaller ise sırasıyla şöyle:
Ray Wenderlich'in SwiftUI kitabı
SwiftUI için bu kadar erken kitap yazılmasını doğru bulmuyorum. Bu "kitap" da aslında sitede yayınlanan tutorial yazılarının derlenmesiyle oluşuyor. Konu başlıklarına bakınca da biraz sığ geldi. 60 dolar fiyatı var, black friday için indirime girmişti.
Hacking with Swift eğitim serisi
Yaptığı ücretsiz eğitimler ve oluşturduğu çok çeşitli öğrenme materyalleriyle Paul Hudson, iOS camiasında haklı bir ün kazandı. Kitabı da 20 dolara satıyor, video olarak seyrederseniz ya da kitabı online okursanız ücretsiz. İçeriklere bakınca arayüz kısımlarını çok detaylı anlatıyor. Videoların bazılarını seyrettim, anlatımı hoş. Yeni başlayanlar ve deklaratif programlama tecrübesi olmayanlar için faydalı olabilir.
Design+Code video eğitimi
2018'de Black Friday kampanyasını kullanıp yıllık Design+Code üyeliği almıştım. Eğitimlerin yarısına yakınını seyrettim. Tasarımcılara yönelik olduğundan çok yüzeysel geldi. SwiftUI eğitimi de benzerdir diye üyeliğimi bu yıl uzatmadım. Yıllık 54 dolara geliyor indirimle beraber.
Swift Talk
Objc.io ekibinin yaptığı işler tüm caimanın malumu. Yayınladıkları makaleler, kitapları ve Swift Talk video eğitimleri ile tecrübeli yazılımcılar için çok önemli bir açığı kapatıyorlar. Aylık 15 dolar. Swift ile alakalı yüzlerce video var ve son 4 aydır SwiftUI özelinde içerik oluşturuyorlar. Eğer deklaratif programlama konseptine genel olarak hakimseniz ve iOS geliştirmede tecrübeliyseniz Swift Talk üyeliğini tavsiye ederim. Benim seçimim de Swift Talk oldu. Diğer eğitimler ekranda buton gösterme, liste oluşturma gibi basit konular üzerine eğilirken, Swift Talk daha ikinci videodan asenkron olarak veri çekip ekranda göstermeyi işliyor. Son derece doğru bir yaklaşım. Deneyerek bulabileceğiniz konuları atlayıp işin özünü iyi veriyorlar. Tek eksik tarafı videolar Xcode 11 beta 2 zamanından başlıyor, SwiftUI beta sürecinde çok fazla değişim geçidiğinden kullanılan metod ve class isimler farklılık gösterebiliyor. Konseptler değişmiyor, sıkıntı çekmedim uygularken. Sıkılmadan seyredebildiğim tek video serisi Swift Talk oldu diyebilirim.
Swift Talk seçimimle birlikte her gece 2'şer video seyrederek aklımdaki soru işaretlerini hızla gideriyorum. Geri kalan kısmı da örnek bir uygulama yapmaya çalışırken kapatıyorum. Adem'in benden istediği uygulamanın basit çalışır halini kodlamayı da 2-3 videodan sonra tamamladım. Kaynak kodlarını GitHub üzerinden paylaştım. Bu uygulamayı güncellemeye ve geliştirmeye devam edeceğim: