TEKNOLOJİ UZMANLIĞI / NATIVE iOS

Swift Uygulama Geliştirme

Yayındaki ürünler için
mühendislik disiplini.

Swift uygulama geliştirme sürecinde arayüzü, iş kurallarını ve veri akışını birlikte tasarlıyoruz. Böylece native iOS ürününüzü gerçek kullanım koşullarına, yeni özelliklere ve sürdürülebilir bakıma hazırlıyoruz.

Ürünün teknik temeline bakalım
ÖRNEK / KOD BAĞIMLILIKLARIClean Architecture yaklaşımı
PresentationSwiftUI · UIKit

Ekran durumu ve gezinme

DataAPI · Realtime

İstemciler ve yerel kayıt

Domainİş kuralları.
Modeller. Protokoller.

Arayüz ve veri adaptörlerinin ortak sözleşmesi.

Oklar kaynak kodu bağımlılığını gösterir. İş kuralları, arayüz veya ağ SDK’sına bağımlı kalmaz.

Bir ürünü dört mühendislik sorusuyla ele alıyoruz.iOS Uygulama Geliştirme hizmetimiz
01 / MİMARİ VE ARAYÜZ

Ürün büyürken,
değişiklikler sınırını bilsin.

Swift uygulama geliştirme için mimariyi ürünün kapsamına göre kurarız. İlk olarak değişme ihtimali yüksek alanları belirleriz. Ardından ekiplerin güvenle geliştirebileceği sorumluluk sınırları oluştururuz.

Clean Architecture: iş kurallarını bağımsız tutmak

Domain katmanı, kullanım senaryolarını ve repository protokollerini tanımlar. Veri adaptörleri bu protokolleri uygular; ekranlar uygun kullanım senaryosunu çağırır. Böylece testlerde gerçek sunucuya ihtiyaç duymadan iş kurallarını doğrulayabiliriz.

Ayrıca bağımlılıkları uygulamanın kurulum noktasında birleştiririz. Her ekrana gereksiz katman eklemeyiz. Ayrıştırmayı, değişiklik riski ve test ihtiyacı haklı çıkardığında kullanırız.

DEĞİŞİKLİKİLK ETKİ ALANI

Bir API sağlayıcısı değişiyor.

Veri adaptörü ve model dönüşümü. İş sözleşmesi aynıysa ekranı koruyabiliriz.

Bir ekran SwiftUI’a taşınıyor.

Sunum katmanı ve gezinme. Mevcut iş kurallarını yeniden kullanabiliriz.

Yeni bir ürün modülü geliyor.

Özellik sınırı ve sözleşmeler. Mevcut akışları regresyon testleriyle koruruz.

SwiftUI ve UIKit’i ürünün ihtiyacına göre birleştirmek

DURUMDAN ARAYÜZE

SwiftUI

Yüklenme, boş veri, başarı ve hata durumlarını açıkça modelleriz. Ayrıca ekran kimliğini, gezinmeyi ve veri sahipliğini düzenleriz. Böylece tutarlı bileşenler, öngörülebilir davranış üretir.

Dynamic Type ve VoiceOver’ı bileşen tasarımına dahil ederiz. Ardından erişilebilirliği gerçek cihazda, farklı metin boyutlarında doğrularız.

MEVCUT YATIRIMLA BİRLİKTE

UIKit

Olgun ekranlarda veya özel etkileşimlerde UIKit’i kullanabiliriz. Bununla birlikte uygun alanları SwiftUI’a aşamalı taşırız. UIHostingController ve UIViewRepresentable ile iki arayüz dünyasını birlikte çalıştırabiliriz.

Geçişi tek ekranda dener, gezinme ve yaşam döngüsünü test ederiz. Böylece yeniden yazım kararını somut bulgularla değerlendiririz.

SWIFT CONCURRENCY

Asenkron işin de
bir sahibi olmalı.

async/await ile asenkron akışları yönetiriz. @MainActor ile arayüz durumunun izolasyonunu tanımlar, actor ve Sendable sınırlarını değerlendiririz. Ancak asenkron bir fonksiyonun ağır hesaplamayı otomatik olarak arka plana taşıdığını varsaymayız.

Ayrıca görev iptalini, ekranın yaşam döngüsünü ve yanıt sırasını ele alırız. Önceki isteğin yeni veriyi ezmesini engelleriz. Actor izolasyonunun yanında iş akışının mantıksal tutarlılığını da test ederiz.

Büyük ölçekli uygulama mimarileri: ekipler için de sınırlar

Özellik modüllerini, ortak tasarım sistemini ve altyapı paketlerini ayırırız. Swift Package Manager ile uygun sınırları yönetebiliriz. Ayrıca döngüsel bağımlılıkları, derleme süresini ve modül sahipliğini takip ederiz.

Böylece farklı ekipler aynı ürün üzerinde daha kontrollü ilerler. Kullanıcı sayısı büyüdüğünde ise API kapasitesini, önbelleği ve backend servislerini ayrıca ölçeklendiririz.

02 / ENTEGRASYON VE VERİ AKIŞI

Bağlantı değişse de
ürünün durumu anlaşılır kalsın.

Swift uygulama geliştirme, API’den veri çekmenin ötesinde bir veri sözleşmesi gerektirir. Bu nedenle zaman aşımı, yeniden deneme, oturum yenileme ve çevrimdışı davranışı başlangıçta tanımlarız.

API entegrasyonu: sunucu modeli ile ürün modelini ayırmak

URLSession ve Codable ile ağ katmanını kurabiliriz. Ardından API yanıtlarını domain modellerine dönüştürürüz. HTTP hatalarını, sayfalama ve önbellek kurallarını ekrana anlamlı durumlar olarak taşırız.

Ayrıca eş zamanlı oturum yenileme isteklerini koordine ederiz. Yeniden denemeyi işlem türüne göre sınırlarız; veri değiştiren isteklerde sunucuyla aynı işlem kimliği üzerinde anlaşırız.

ÖRNEK AKIŞ / BİR REZERVASYON GÜNCELLENİYOR

Normal akış kadar,
kesintiyi de tasarlamak.

  1. 01

    İstek gitti, yanıt gelmedi.

    İşlemi hemen başarısız saymayız. Aynı işlem kimliğiyle durumunu sorgularız; böylece kontrolsüz tekrarın çift kayıt üretmesini önleriz.

    GEREKEN SÖZLEŞME / Sunucuda idempotency ve durum sorgulama.
  2. 02

    Realtime bağlantı koptu.

    Yeniden bağlanmayı gecikmeli ve kontrollü yönetiriz. Ardından güncel durumu veya son olaydan sonraki değişiklikleri alırız; yinelenen olayları ayıklarız.

    GEREKEN SÖZLEŞME / Olay kimliği, sıralama ve yeniden eşitleme.
  3. 03

    Bildirim geç ulaştı.

    Bildirimi güncel verinin yerine koymayız. Kullanıcı uygulamayı açınca yetkisini ve rezervasyonun son durumunu API üzerinden doğrularız.

    GEREKEN SÖZLEŞME / Yetkili deep link ve sunucudaki güncel kayıt.

Realtime sistemler ve push notification farklı işler yapar

WebSocket bağlantısını aktif kullanım ve yaşam döngüsüyle birlikte yönetiriz. Buna karşın APNs bildirimini, kullanıcıyı uygun akışa geri çağırmak için kullanırız. Arka plan bildiriminin teslimini garanti saymayız.

Ayrıca bildirim iznini, değişen cihaz token’larını ve oturumu kapanmış kullanıcıyı ele alırız. Çevrimdışı işlemlerde ise yerel kuyruğu, çakışma kuralını ve eşitleme durumunu açıkça tanımlarız.

Apple servisleri, ürünün güven sınırlarına dahil

Sign in with Apple
Kimlik belirtecini sunucuda doğrular, mevcut hesaplarla eşleşmeyi planlarız. Böylece giriş ekranıyla backend oturumu aynı kimliği temsil eder.
StoreKit
Satın alma ve geri yükleme akışlarını, sunucudaki kullanım hakkıyla ilişkilendiririz. Ayrıca iptal, iade ve abonelik değişikliklerini kapsama alırız.
MapKit · Core Location
İzin reddi, yaklaşık konum ve kullanım amacını birlikte değerlendiririz. Ardından konum doğruluğu ile pil tüketimi arasında ürüne uygun denge kurarız.
03 / PERFORMANS VE GÜVENLİK

Kaliteyi varsaymayın.
Ölçülebilir hale getirin.

Swift uygulama geliştirme planında hedef cihazları ve kabul ölçütlerini birlikte belirleriz. Ayrıca gerçek veri, zayıf bağlantı ve uzun kullanım koşullarını değerlendirmeye dahil ederiz.

PERFORMANS İNCELEMESİ

Açılıştan uzun
kullanıma kadar.

Instruments ile işlem yükünü, bellek kullanımını ve arayüz takılmalarını inceleriz. Ardından görsel yükleme, liste güncelleme ve ağır işleri ölçülen darboğaza göre iyileştiririz.

İlk etkileşim
Açılış iş yükü, ana iş parçacığı ve ilk kullanılabilir ekran.
Akıcı kullanım
Uzun listeler, ekran geçişleri ve büyük veri güncellemeleri.
Uzun oturum
Bellek artışı, referans döngüleri, pil ve ağ tüketimi.

Hedefleri cihaz ve kullanım senaryosuyla birlikte koyarız. Böylece tek bir güçlü cihazdaki sonucu bütün kullanıcıları temsil eden ölçüm saymayız.

Güvenlik: cihaz, oturum ve sunucu birlikte

CİHAZDA

Veriye amacına göre erişim.

Token ve hassas anahtarlar için Keychain kullanırız. Ayrıca erişim koşullarını arka plan ihtiyacıyla birlikte seçeriz. Gereksiz hassas veriyi yerel dosyalarda veya loglarda tutmayız.

Face ID gibi LocalAuthentication akışları cihaz içi erişimi destekleyebilir. Ancak kullanıcı yetkisini ve işleme izin verilip verilmediğini sunucuda doğrularız.

SİSTEMDE

Yetkiyi her istekte doğrulamak.

TLS ve App Transport Security ayarlarını koruruz. Ayrıca oturum süresini, yenileme ve çıkış davranışını backend sözleşmesiyle eşleştiririz. Uygulama paketine sunucu sırları yerleştirmeyiz.

Bağımlılıkları ve üçüncü taraf SDK’ları veri erişimleriyle birlikte inceleriz. Hata kayıtlarında ise kişisel veri ve kimlik bilgilerini maskeleyerek teşhis için gerekli bağlamı koruruz.

04 / TEST, YAYIN VE DEVAMI

Bir sürümün hazır olması,
kanıt gerektirir.

Swift uygulama geliştirme sürecinde test kapsamını ürünün risklerine göre kurarız. Böylece yalnızca başarılı senaryoyu değil, kullanıcının karşılaşabileceği kesintileri de doğrularız.

Test süreçleri: hangi davranışı koruyoruz?

01İş kuralları
Swift Testing veya XCTest ile kullanım senaryolarını test ederiz. Ayrıca tarih, yetki ve geçersiz durum sınırlarını sahte bağımlılıklarla doğrularız.
02Entegrasyon sınırları
API model dönüşümünü, hata yanıtlarını ve oturum yenilemeyi test ederiz. Ardından test ortamında gerçek servis sözleşmesiyle uyumu kontrol ederiz.
03Kullanıcı akışları
XCTest / XCUITest ile kritik ekran akışlarını koruruz. Ayrıca deep link, izin reddi, metin büyütme ve erişilebilirliği cihaz üzerinde inceleriz.
04Sürüm performansı
Release yapılandırmasında açılışı, bellek ve etkileşim davranışını ölçeriz. Böylece önceki sürüme göre oluşan gerilemeleri yayın öncesinde görebiliriz.
APP STORE VE YAYIN SONRASI

Aynı disiplin,
her sürümde.

Kaynak kodu, imzalama erişimleri ve mağaza hesaplarını kurumunuzun devralabileceği biçimde düzenleriz. Ayrıca yayın adımlarını tekrarlanabilir hale getiririz.

  1. 01 / KODDAN SÜRÜME

    Code review ve CI

    Değişiklikleri inceleyip testleri çalıştırırız. Ardından derleme çıktısını, sürüm bilgisini ve hata çözümlemede kullanılan sembolleri birlikte saklarız.

  2. 02 / GERÇEK KULLANIM

    TestFlight

    Kritik akışları pilot kullanıcılarla deneriz. Ayrıca cihaz dağılımını, geri bildirimleri ve hata kayıtlarını değerlendirerek yayın kararını veririz.

  3. 03 / MAĞAZAYA HAZIRLIK

    App Store

    İnceleme erişimini, gizlilik beyanlarını ve ürün bilgilerini hazırlarız. Mağazanın değerlendirme sürecini de yayın planına dahil ederiz.

  4. 04 / CANLI ÜRÜN

    İzleme ve bakım

    Sürüm bazında çökmeleri ve performans değişimlerini izleriz. Sorunda kademeli dağıtımı durdurur, uygunsa ilgili özelliği sınırlar ve düzeltme sürümü hazırlarız.

Teknik kararlar, ekibinizle yaşasın.

Mimari kararları, modül sorumluluklarını ve çalışma ortamını dokümante ederiz. Bununla birlikte SDK güncellemelerini, test kapsamını ve bakım iş listesini takip ederiz. Böylece ürün bilgisi yalnızca geliştiricinin hafızasında kalmaz.

UZMANLIĞI ÜRÜNÜNÜZE TAŞIYALIM

Yeni bir ürün.
Ya da daha sağlam
bir sonraki sürüm.

Swift uygulama geliştirme ihtiyacınızı, mevcut kod tabanınızı veya kritik entegrasyonunuzu paylaşın. Önce teknik sınırları birlikte inceleyelim. Ardından mimari, doğrulama ve geliştirme adımlarını netleştirelim.

Swift projemi konuşalım
Soft Marketing
info@softmarketing.net

Teknolojinin insan tarafı. :}