Jetpack Compose & SwiftUI

ChatGPT tarafından oluşturulan görsel — kaynak ve telif hakkı yazara aittir.
Herkese merhaba! Peakup’ta Android geliştirici olarak çalışmaya başlayalı 6 ay olmuştu. Gidişat çok güzeldi. Google Play Store’da 5 adet sağlam Android uygulama yayımlamıştık. Buradan uygulamalarımızın listesine göz atabilirsiniz. En son yaptığımız “İzin Yönetimi” Android uygulamamız, 12 Ekim 2019 tarihinde Google Play Store’a yüklenerek kullanıma hazır hâle geldi. Bu tarihten itibaren (yazıyı 1 ay sonrasında yazmıştım), XCode ile Android tarafında yazdığım uygulamaların iOS versiyonlarını yazmaya başladım. SwiftUI ile girişmiştim ki başıma geleceklerden habersizdim.
Biliyorsunuz ki Android ve iOS sistemleri birbirlerinden bir hayli farklı. Bu sistemlerin geliştirilme sürecindeki fark ise bundan çok daha fazla. Yeni bir dil, yeni bir IDE, yeni UI, yeni bir tasarım anlayışı, yeni kullanıcı alışkanlıkları, yeni… derken başlarda açıkçası sudan çıkmış balığa dönmüştüm. Swift ve Kotlin birbirine çok yakın diller olduğu için dil konusunda şanslıydım ama arayüz konusunda ne yazık ki aynı şeyi söyleyemeyeceğim. iOS’ta sürükle bırak kullanılıyordu, koda müdahale etmiyorduk; Android’de ise tam tersi, sürükle bırak kullanmıyorduk. SwiftUI’ın imdadıma yetişip beni kurtaracağını düşünüyor ama yanılıyordum. “SwiftUI’a başlayalım mı başlamayalım mı?” derken Android de Jetpack Compose çıkarıp kafamı altüst etmesin mi?
SwiftUI Nedir?
Google’da, “iOS öğreniyorum; neleri bilmem, öğrenmem gerekir?”, “iOS yedim zehirlendim.”, “iOS kafası”, “iOS olmak istiyorum.”, “iOS bize gelsin.”, “iOS sistem gereksinimleri”… gibi aramalar yapmaya başladım. Dolayısıyla uzun bir araştırma sürecim oldu. 🤗 Apple’ın, Haziran 2019’da WWDC’de SwiftUI isimli yeni bir UI framework yayımladığını öğrendim. Bu framework, UI yazımını bayağı kolaylaştırıyor; ilgili dokümanları ve internetteki çeşitli örnekleri incelediğinizde, işleri kayda değer derecede hızlandırdığını ve çok pratik olduğunu göreceksiniz. Ayrıca öğrenmesi de çok kolay. Bu hevesle “Apple, böyle taş gibi bir UI framework çıkardığına göre, Storyboard sisteminin daha da yüzüne bakmaz,” diye düşünerek hareket ettim ve ilk iOS projemi SwiftUI kullanarak açtım.
Projeyi yazmaya başladıktan sonra fark ettim ki yeni çıktığı için SwiftUI ile ilgili dokümanlar ve örnekler çok azdı. Çıkalı 4 ay olmasına rağmen pek çok class deprecated olmuştu bile ve yerlerine -dokümanlarda anlatılan bazı methodlar dâhil- stabil, çalışan kodlar da koymamışlardı. E tabii 2024'te Apple Store’da SwiftUI kullanan onlarca uygulama var şu an ancak o tarihte ihtiyacım olan bilgilerin çok azını bulabildim.
Mesela yazdığım uygulama için WKWebView bileşenini kullanmak zorundaydım. Bunun SwiftUI ile kullanımını merak ettim. WKWebView içinde değişen linki almak istedim ancak başarıya hızlıca ulaşamadım. Stackoverflow’da (ios — SwiftUI WKWebView detect url changing — Stack Overflow) cevap verildiğindeyse artık çok geçti.
Hiçbir zaman kolay yolu tercih eden bir insan olmadım ancak bir şeyin alması gerekenden fazla vakit almasını da istemedim.

Photo by Aron Visuals on Unsplash
WKWebView ile olan işim uzun uğraşlar sonucunda çözülmüştü ancak SwiftUI’da bir sayfadan başka bir sayfaya geçmekte bile zorlandım çünkü tüm view’ları NavigationView içerisine eklemeniz gerekiyordu. WKWebView ile oluşturduğum sayfayı o yapının içerisine almak pek mümkün görünmüyordu. Belki yeni başladığım için ben de becerememiş olabilirim. Bu, yaşadığım çeşitli problemlere sadece bir örnekti. Aklım ve gönlüm SwiftUI’da kala kala şimdilik mecburen Storyboard’a dönmüştüm. Bazı Quora soruları ve makaleler de bu görüşümü destekleyecek nitelikteydi. Storyboard sistemi ile yaptığım uygulama 2 hafta sürdü. SwiftUI’a verdiğim 1 haftada bunun çeyreği kadar ilerleyememiştim.
Ufak bir kod örneği vermek istiyorum:
import SwiftUI
struct AlbumDetail: View {
var album: Album
var body: some View {
List(album.songs) { song in
HStack {
Image(album.cover)
VStack(alignment: .leading) {
Text(song.title)
Text(song.artist.name).foregroundStyle(.secondary)
}
}
}
}
}Bu, bildiğiniz DeclarativeUI yapısı. Kısalığı, netliği, anlaşılırlığı ve açıklığıyla resmen gözlerimi kamaştırdı. SwiftUI hakkında detaylı bilgi için sizi Apple dokümanına davet ediyorum. Keşke Android’de de böyle rahat bir sistem olsa diyordum ki 2019 Ekim ayında yapılan Android Dev Summit’te Android Jetpack Compose isimli bir UI Framework kullanıma açıldı.
Android Jetpack Compose
“React, Litho, Vue.js, Flutter gibi teknolojilerden esinlenilen Declarative UI Toolkit’tir.” – Compose tanıtım videosu.
İlk olarak 2019 Google I/O’da tanıtılan bu framework, o zamanlar bayağı havada kalmıştı çünkü henüz yenilebilen bir şey değildi. Deneyemiyorduk, ne olduğunu bile tahmin edememiştik; bize sadece birkaç satır kod gösterilmişti. “Böyle bir şey yapıyoruz, gelecek bu, haberiniz olsun diye gösteriyoruz,” demişlerdi; 23 Ekim 2019’da yapılan Android Dev Summit’te ise resmen tanıttılar, gösterdiler. Android Studio 4.0 indirip Jetpack Compose’u deneyebileceğimizi söyleyerek bizi iyice heyecanlandırdılar.
Gördüğümüz kadarıyla Compose işimizi çok hızlandıracak, UI yazımını çok kolaylaştıracak; daha okunabilir, daha hızlı anlaşılabilir, birkaç ay sonra döndüğümüzde “Şair burada ne demek istemiş?” diye daha az düşüneceğimiz kaliteli kod üretmemizi sağlayacak. XML dosyalarındaki kalabalık kodu güzel bir yolla azaltacak gibi görünüyor. Heyecanla ilk fırsatta denemeyi ve ağzını yemeyi bekliyorum. E tabii içimden bir ses, “Acele etme, stabil değildir; stabil olduğu zaman daha çok konuşulacak, daha çok rüyayı süsleyecek,” diyor. Compose için de bir kod örneği sunarak değerlendirmeye geçiyorum.

Yazar tarafından alınan ekran görüntüsü
Öyle “Text” yazıp, parantez açıp içine yazdığım text’in önizlemede hemencecik TextView’a dönüşmesi ne güzelmiş. Altyapısını çok merak etmekle beraber, geliştiricilerin yakasına yapışıp “Bu hantal Android sisteminde bunu nasıl böyle yapabildiniz?” diye sormak istiyordum. 🤗
Android Jetpack Compose hakkında detaylı bilgi alabilmeniz için doküman ve eğitim bağlantısını buraya ekliyorum. Tanıdık geldi mi syntax yapısı? Gördüğünüz üzere Android’in getirdiği Jetpack Compose View Toolkit’i de SwiftUI gibi DeclarativeUI yapısına sahip.
Farkları
Evet, benzerlik şaşırtıcı. Hatta ürkütücü derecede şaşırtıcı. Yeminle kopyala-yapıştır yapıp 3–5 harf değiştirdim mi var ya iki tarafın da arayüzünü bitirmiş olurum. Hem de responsive, her cihaza uyumlu.
Legacy kod ile olan bağları:
UIViewveUIViewRepresentablesınıfları SwiftUI ile kullanılabilir ancak SwiftUI, temelde yeniViewprotokolüne dayanır.UIViewRepresentablesınıfı, eski UIKit bazlı bileşenleri SwiftUI içinde kullanmak için bir köprü görevi görür. SwiftUI,UIViewControlleryerineUIHostingControlleriçerisinde barındırılırJetpack Compose tamamen
@Composablefonksiyonlar ile çalışır ve eski Android XML bazlı layout sistemini kullanmaz.

ChatGPT tarafından oluşturulan görsel — kaynak ve telif hakkı yazara aittir.
SwiftUI sınıfları ve Composable:
SwiftUI'da kullanılan yapılar
structolarak tanımlanır ve bu struct'larViewprotokolünü uygular. (Inheritance yerine protocol composition kullanılır.)Compose'da
@Composablefonksiyonlar, UI bileşenlerini tanımlamak için kullanılır. Bunlar sınıflarla değil, fonksiyonlarla gerçekleştirilir ve gerçekten de sınıfla bir bağlantıları yoktur. Bu fonksiyonlar sayesinde tamamen yeni bir UI yapısı kurulabilir.
Kod yazma zorunlulukları:
SwiftUI’da
body: View { }bloğu, her View için zorunlu olarak tanımlanması gereken bir yapıdır.Compose'da bir
@Composablefonksiyonun tanımı, bir UI parçasını render etmek için yeterlidir ve özel bir kalıp zorunluluğu yoktur.
View dizilimi:
Her iki platform da dikey (
ColumnveVStack) ve yatay (RowveHStack) düzenlemeleri destekler. SwiftUI ve Compose arasında bu dizilim yapılarının isimlendirilmesi dışında fonksiyonellik olarak büyük farklar yoktur. (Declarative UI yapısında olduğu için bi’ zahmet)
SwiftUI “Bir kere yaz, her yerde kullan,” mantığından ziyade, “Bir kere öğren, her yerde yaz,” mantığına hitap ederken Compose, tamamen tekrar kullanılabilir bir mantık sunuyor. Compose open source iken SwiftUI hâliyle değil.
Compose,SwiftUI
Row,HStack
Column,VStack
Stack,ZStackStil başlığında da birkaç fark olduğu görünüyor. Alttaki kod parçacığında gördüğünüz satırlar kendi içlerinde aynı işi yapıyor.
Button("Button Name", color = Color.Green, onClick = {}) // Compose
Button("Button Name", action: {}).foregroundColor(Color.green) // SwiftUIOrtak Özellikleri
Her iki teknolojiyle de özel view objeleri üretebilirsiniz. Her iki framework da bileşen tabanlı (component-based) yaklaşımı benimser ve yeniden kullanılabilir UI bileşenleri oluşturmayı kolaylaştırır.
Bu toolkit’lerin en iyi yanı ise preview hizmetleri. SwiftuUI, canlı preview ile geliyor. Hatta SwiftUI preview sayesinde bunlarla etkileşime bile girebiliyorsunuz. Compose Preview ile Android Studio da live preview özelliğine sahip.
SwiftUI’da macOS Catalina ve iOS 13 zorunluluğu, Compose tarafında Android Studio 4.0 ve uygulamanızın API Level 21 üstü olması lazım.
Farklar, benzerlikler uzayıp gider. Şimdilik burada bırakalım, ileride toolkitler geliştikçe buraları da güncelleriz.
Şimdi derin ve cevabını merak ettiğim bir soru var aklımda. İnşallah sizin aklınızda da uyanmıştır bu soru. Yazıyı buraya kadar okuduysanız bence uyanmalı. 🙂 Neden 2 dev şirket birden, ardı ardına DeclarativeUI yapısına sahip yeni UI Toolkit ve Framework yayınlar? Nedir ki bu DeclarativeUI? Bir sonraki yazıda da ondan bahsedelim.
Kaynakça
http://nilhcem.com/swift-is-like-kotlin
2019 Ekim Android Dev Summit Youtube
http://intelligiblebabble.com/compose-from-first-principles/
https://quickbirdstudios.com/blog/swiftui-vs-android-jetpack-compose/
https://medium.com/@ZoeWave/swiftui-jetpack-compose-db29036532df
Sıkça Sorulan Sorular
▸Jetpack Compose ile SwiftUI arasındaki temel farklar nelerdir?
Yazıda bu iki framework'ün farkları karşılaştırmalı olarak ele alınıyor. Her ikisi de modern, deklaratif UI geliştirme yaklaşımı sunsa da platform bağımlılıkları ve API yapıları bakımından ayrışıyorlar.
▸Jetpack Compose ile SwiftUI'ın ortak özellikleri nelerdir?
Her iki framework de deklaratif programlama modeline dayanıyor. Yazıda bu ortak yaklaşımın geliştiriciye nasıl kolaylık sağladığı paylaşılıyor.
▸Storyboard kullanımında ne gibi zorluklarla karşılaşılıyor?
Yazıda iOS geliştirme sürecinde Storyboard kullanımının getirdiği zorluklar aktarılıyor. Özellikle SwiftUI'a geçişle birlikte bu zorlukların nasıl aşıldığına dair deneyimler paylaşılıyor.
▸Hem Android hem iOS geliştirici olarak çalışmak nasıl bir deneyim?
Yazar, Peakup'ta önce Android geliştirici olarak başlayıp 6 ay içinde 5 uygulama yayımlamış, ardından iOS geliştirme sürecine de dahil olmuş. Bu iki platform arasında geçiş yapmanın getirdiği dersler yazıda aktarılıyor.
▸Jetpack Compose öğrenmek SwiftUI öğrenmeyi kolaylaştırır mı?
Yazı, her iki framework'ü bilen birinin perspektifinden yazılmış. Deklaratif UI mantığına aşina olan bir Android geliştiricisinin SwiftUI'a geçişte bu birikimden faydalanabileceği ima ediliyor.


