← HARUN DOĞDU

SECTION — PARİTE

Aynı uygulamayı iki kere yazmak

Study Sprint Timer ve Ynera iki platformda da yayında ve ikisinin tek bir uygulama gibi davranması gerekiyor. Katmanların nasıl eşleştiğini aşağıdaki diyagram gösteriyor; asıl iş, iki tarafta da doğru görünen kodun yalnız birinde çalıştığı durumları yakalamak.

iOS ve Android katmanlarının eşleşmesini gösteren diyagram: uygulama kabuğu, model ve kalıcılık, sayaç motoru ve ekran katmanı karşılıklı bağlanmış; yanda sapmaların yazıldığı defter duruyor.
27 Ağustos 2026 itibarıyla doğru. Diyagram elle tazeleniyor.

Kural: iki taraf aynı görevde

Bir platformda yaptığın değişikliği diğerine sonra taşımak, pratikte hiç taşımamak demek. Sonraki iş her zaman daha acil görünüyor ve arada kalan fark birikiyor. Bu yüzden taşıma ayrı bir görev değil, aynı görevin parçası: iki taraf da derlenip testleri geçmeden iş bitmiş sayılmıyor.

Aynı şey hatalar için de geçerli. Bir platformda düzelttiğin hatanın regresyon testi diğerinde de yazılıyor, çünkü hata çoğu zaman koda değil ikisinde de yaptığın aynı varsayıma bağlı.

Sapma olur, sessiz olmaz

İki platform her yerde birebir aynı olamıyor; bazen API farkı, bazen platform kısıtı araya giriyor. Sorun sapmanın kendisi değil, kimsenin ondan haberi olmaması.

O yüzden her Kotlin dosyasının başında hangi Swift dosyasından geldiği yazılı, dosya taşınınca o satır da güncelleniyor. Bilinçli sapma ise iki yere işleniyor: gerekçesi koda yorum olarak, kaydı ayrı bir deftere. Deftere yazılmadan o iş bitmiş sayılmıyor.

Parite denetiminin göremediği hatalar

Dosyaları yan yana koyup karşılaştırmak yetmiyor, çünkü en pahalı hatalar iki tarafta da var olan koddan çıkıyor. Kod iki yerde de duruyor; yalnız birinde çalışıyor.

SwiftUI'de sahne değişimine bağladığın iş soğuk açılışta hiç tetiklenmiyor: uygulama zaten etkin başlıyor, yani ortada bir değişim yok. Android'de aynı kanca soğuk açılışta da çalışıyor. Menü müziğinin yalnız arka plandan dönünce başlaması bu yüzdendi ve sekiz test yeşilken kullanıcı fark etti.

Compose tarafında bir durumu yerinde değiştirip kopyasını yeni durum olarak koymak, yeni durumu eskisine eşit bırakıyor ve ekran hiç yenilenmiyor. SwiftUI'de aynı kalıp çalışıyor, çünkü orası değer tipi. Testler iki tarafta da yeşil geçiyor.

Sonuncusu bir satırlık: SwiftUI bir tam sayıyı ekrana basarken onu yerel biçimle grupluyor, Kotlin gruplamıyor. Aynı profil satırı iOS'ta 2.447, Android'de 2447 görünüyordu. Bunu kod okuyarak bulmak mümkün değil; iki ekran görüntüsünü yan yana koymak gerekiyor.

UYGULAMALARA BAK →