SwiftUI Navigation Sistemi: Deep Linking ve Coordinator Pattern
NavigationStack'in ötesine geçin! Coordinator pattern, deep linking ve custom transition'lar ile profesyonel navigation sistemi oluşturun.
22 dkTurist İndirim Kartı ve Alışveriş Platformu
Kullanıcı
İndirme
App Store Puanı
Geliştirme Süresi
TSC (Tourist Sale Card), İstanbul'un en yoğun turizm bölgelerinde faaliyet gösteren yüzlerce mağaza ile turistleri buluşturan kapsamlı bir indirim kartı ve alışveriş platformudur. Proje, İstanbul'a gelen yıllık 15 milyondan fazla yabancı turistin alışveriş deneyimini dijitalleştirmek ve yerel perakendecilerin turist segmentine ulaşımını kolaylaştırmak amacıyla geliştirilmiştir. Uygulama, fiziksel TSC indirim kartını dijital platforma taşıyarak turistlerin cüzdanlarında kart taşıma zorunluluğunu ortadan kaldırdı. Kullanıcılar uygulamayı indirip kayıt olduktan sonra dijital kart numaralarıyla anlaşmalı mağazalarda %10 ile %50 arasında indirim hakkı kazanır. Harita tabanlı mağaza keşfi sayesinde turist bulunduğu konuma en yakın anlaşmalı mağazaları görebilir, kategori filtreleriyle (mücevher, tekstil, deri, baharat, hediyelik) aradığı ürün grubunu kolayca bulabilir. Mağaza içi deneyim QR ve barkod tarama ile zenginleştirildi — turist mağaza girişindeki QR kodu tarayarak anlık kampanya bilgilerini, indirim oranlarını ve ürün katalogunu görüntüler. Mağaza sahibi ise müşterinin kartını okutarak indirim uygular ve işlem geçmişi anlık olarak merkeze raporlanır. Bu çift yönlü doğrulama sistemi hem turistin hem mağazanın güvenliğini sağlar. Platform dört dilde (TR/EN/AR/RU) hizmet vererek İstanbul'un en büyük turist segmentlerine ulaşır: Avrupa, Ortadoğu ve Rusya/BDT ülkeleri. CoreLocation ile konum tabanlı push bildirimler sayesinde turist Kapalıçarşı veya İstiklal Caddesi gibi alışveriş bölgelerine yaklaştığında otomatik kampanya bildirimi alır. 150+ kaynak dosyasıyla geliştirilen uygulama, 25.000+ aylık aktif kullanıcı ve 100.000+ indirmeye ulaşarak İstanbul turizm ekosisteminin önemli bir dijital bileşeni haline gelmiştir.
Turist odaklı bir alışveriş platformu geliştirirken beş kritik teknik ve ticari zorlukla karşılaşıldı: Birincisi, harita tabanlı mağaza keşfi ve performans — İstanbul'un yoğun turizm bölgelerinde (Sultanahmet, Kapalıçarşı, Grand Bazaar, İstiklal) yüzlerce anlaşmalı mağazanın harita üzerinde performanslı gösterimi gerekiyordu. Kapalıçarşı gibi kapalı alanlarda GPS sinyali zayıf, mağazalar birbirine çok yakın ve üst üste konumlanmış — standart harita pin'leri kullanışsız hale geliyordu. İkincisi, QR/barkod tarama güvenilirliği — mağaza aydınlatma koşulları değişken (loş bazaar vs parlak AVM), kart yüzeyi zamanla yıpranan fiziksel kartlar, farklı telefon kamera kaliteleri. Tarama başarısızlığı doğrudan müşteri kaybı demek — kasada bekleyen turist sabırsız. Üçüncüsü, dört dilde tutarlı deneyim — Türkçe, İngilizce, Arapça (RTL!) ve Rusça desteği. Arapça'nın sağdan sola (RTL) yazım yönü tüm UI layout'unu etkiliyordu. Her dilin farklı metin uzunluğu, farklı font gereksinimleri ve farklı kültürel beklentileri vardı. Dördüncüsü, konum tabanlı push notification stratejisi — turistin her köşe başında bildirim alması spam algısı yaratırken, hiç bildirim almaması uygulamanın değerini azaltıyordu. Doğru zamanda, doğru yerde, doğru içerikle bildirim göndermek karmaşık bir segmentasyon problemi. Beşincisi, offline kullanılabilirlik — turistler genellikle yurtdışı veri roaming maliyetlerinden kaçınıyor, WiFi noktaları arasında offline kalıyor. Mağaza bilgileri, harita verileri ve dijital kart numarasının internet bağlantısı olmadan erişilebilir olması gerekiyordu.
Çözüm stratejisi, turist davranış kalıplarına ve İstanbul'un benzersiz coğrafi yapısına uygun şekilde tasarlandı: 1. Akıllı Harita Motoru: MapKit üzerinde özel cluster annotation sistemi geliştirildi. Kapalıçarşı gibi yoğun bölgelerde mağazalar kategoriye göre renkli cluster'lar halinde gruplandı — kullanıcı zoom yaptığında cluster açılarak bireysel mağazaları gösterir. MKAnnotationView özelleştirmesi ile her kategoriye özel ikon (mücevher: elmas, tekstil: kumaş rulosu, deri: çanta). Kapalı alan sorunu için WiFi fingerprinting benzeri yaklaşım — bilinen WiFi ağlarına göre yaklaşık konum tahmini (GPS yerine). 2. Gelişmiş Barkod/QR Tarama: AVFoundation ile özel kamera tarama modülü geliştirildi. Düşük ışık koşullarında otomatik torch (flaş) aktivasyonu, kamera autofocus optimizasyonu ve multi-format destek (QR Code, Code 128, EAN-13). Tarama başarısızlığında alternatif: kart numarası manuel giriş + OCR desteği. Ortalama tarama süresi: 0.8 saniye (sektör ortalaması 2.1s). 3. RTL-Ready Lokalizasyon Mimarisi: NSLocalizedString altyapısı üzerine inşa edilen 4 dilli sistem. Arapça RTL desteği için tüm Auto Layout constraint'leri leading/trailing (left/right yerine) ile tanımlandı. UIView semanticContentAttribute ile dinamik RTL/LTR geçişi. Font yönetimi: Arapça için özel Arabic Typesetting fontu, Rusça için system font Cyrillic glyphs. Toplam 300+ lokalize string. 4. Akıllı Bildirim Motoru: CoreLocation region monitoring ile geofence bazlı bildirim sistemi — İstanbul'un 8 ana turizm bölgesinde (Sultanahmet, Kapalıçarşı, İstiklal, Eminönü, Taksim, Nişantaşı, Kadıköy, Bağdat Caddesi) tanımlı bölgelere giriş/çıkış tetikleyicileri. Bildirim frekans limiti: aynı bölge için günde maksimum 2 bildirim, toplam günlük maksimum 5 bildirim. Kullanıcı tercihlerine göre kategori bazlı bildirim filtresi. 5. Offline Cache Stratejisi: NSURLCache + CoreData kombinasyonuyla agresif cache politikası. İlk açılışta tüm mağaza verisi ve harita tile'ları indirilip cache'lenir (~25MB). Dijital kart bilgisi Keychain'de saklanır — offline'da kart gösterimi mümkün. Kampanya verileri 24 saatlik TTL ile cache, WiFi bağlantısında otomatik güncelleme.
Uygulama MVC mimarisi üzerinde Objective-C ile geliştirildi. 150+ kaynak dosyası, 5 ana modüle ayrılarak yönetildi. Harita ve Konum Katmanı: MapKit üzerinde özel MKAnnotationView'lar ile anlaşmalı mağazalar görselleştirildi. 8 kategori için renk kodlu özel pin tasarımı. MKClusterAnnotation ile Kapalıçarşı gibi yoğun bölgelerde performanslı gruplama — zoom seviyesine göre dinamik cluster/expand. CoreLocation CLLocationManager ile sürekli konum takibi (kWhenInUseAuthorization). Region monitoring: CLCircularRegion ile 8 ana turizm bölgesinde geofence tanımı (yarıçap: 200-500m bölge büyüklüğüne göre). MKDirections ile yürüyüş rotası hesaplama — turistin mağazaya yürüme süresi tahmini. Barkod/QR Tarama Modülü: AVFoundation framework ile özel tarama arayüzü. AVCaptureSession + AVCaptureMetadataOutput ile gerçek zamanlı barkod algılama. Desteklenen formatlar: QR Code, Code 128, Code 39, EAN-13, EAN-8. AVCaptureDevice ile kamera kontrolü: torch mode (düşük ışık), autofocus (continuous), exposure (auto). Tarama sonucu haptic feedback (UIImpactFeedbackGenerator) ile onay. Fallback: OCR ile kart numarası okuma (Vision framework precursor — custom digit recognition). Network Katmanı: NSURLSession ile REST API entegrasyonu. NSJSONSerialization ile JSON parsing. NSURLCache ile HTTP cache (disk: 50MB, memory: 10MB). Pagination: offset/limit bazlı sayfalama. Image lazy loading: NSOperationQueue ile öncelikli indirme, NSCache ile memory cache, disk cache ile kalıcı depolama. API response time optimizasyonu: gzip compression, conditional GET (If-Modified-Since header). Lokalizasyon Altyapısı: 4 dil dosyası: tr.lproj, en.lproj, ar.lproj, ru.lproj — toplam 300+ lokalize string. Arapça RTL: UIView semanticContentAttribute = .forceRightToLeft, Auto Layout leading/trailing constraint'ler. NSDateFormatter locale-aware tarih gösterimi. NumberFormatter ile para birimi (TRY/USD/EUR/RUB). Stringsdict ile plural form (Türkçe tekil=çoğul, İngilizce/Rusça farklı, Arapça 6 plural form). Dinamik dil değişimi: NotificationCenter broadcast + UI reload. Push Notification: APNs remote notification. UserNotifications framework ile rich notification (mağaza fotoğrafı + indirim oranı). Location-triggered notification: region monitoring ile geofence giriş tetikleyicisi. Frekans kontrolü: NSUserDefaults ile günlük bildirim sayacı. Kategori bazlı opt-in/opt-out. Güvenlik: HTTPS + SSL pinning. Keychain ile dijital kart bilgisi ve auth token. Kart numarası maskeleme (UI'da son 4 hane gösterilir). Anti-screenshot protection: UIApplicationWillResignActiveNotification ile hassas bilgi gizleme.
Piyasa Araştırması ve Bulgular: İstanbul Turizm ve Alışveriş Pazarı: - İstanbul'a gelen yabancı turist sayısı: 17M+ (2017), pandemi sonrası 20M+ (2024) - Turist alışveriş harcaması: İstanbul'da turist başına ortalama $850 (2017 verileri) - İstanbul turist alışveriş pazarı: tahmini $14B+ (2017) - Türkiye global turizm geliri: $32B (2017), $56B (2024) - Alışveriş turizmi, toplam turizm gelirinin %35'ini oluşturuyor - Kapalıçarşı yıllık 90M+ ziyaretçi — dünyanın en çok ziyaret edilen turist mekanlarından biri Dijital Turizm Trendleri: - Turistlerin %72'si seyahatte en az bir alışveriş uygulaması kullanıyor (2017) - Mobil indirim kuponu kullanımı: %45 yıllık büyüme - Konum bazlı bildirim açma oranı: turizm sektöründe %38 (genel %22'nin üzerinde) - QR kod kullanımı: Asya pazarında %90+, Avrupa'da %35, büyüme trendi güçlü Rakip Analizi: Global: Groupon, ShopBack, Klook (genel turist indirim). İstanbul'a özel: Museum Pass İstanbul (sadece müze), İstanbulkart (sadece ulaşım). Alışveriş odaklı turist indirim kartı dijital platformu İstanbul'da bulunmuyor — TSC first-mover avantajıyla bu boşluğu dolduruyor. Benchmark: London Pass, Paris Pass, Amsterdam City Card — şehir bazlı turist kartları global trend. TSC bunlardan farklı olarak alışveriş odaklı (müze/ulaşım yerine), bu da daha yüksek ticari potansiyel sunuyor (alışveriş harcaması bilet harcamasının 4x'i). Hedef Kitle Segmentasyonu (İstanbul Turist Profili): 1. Avrupa Turistleri (%35): Almanya, İngiltere, Fransa — fiyat-bilinçli, karşılaştırma yapan, dijital okuryazar 2. Ortadoğu Turistleri (%30): Suudi Arabistan, BAE, Irak — yüksek harcama kapasitesi, mücevher ve tekstil odaklı 3. Rusya/BDT (%20): Rusya, Ukrayna, Kazakistan — deri ve kürk ürünleri ilgisi, grup turlarla gelen 4. Uzak Doğu (%10): Çin, Japonya, Güney Kore — hediyelik eşya odaklı, QR kod deneyimi yüksek 5. Diğer (%5): Kuzey/Güney Amerika, Afrika Anlaşmalı Mağaza Profili: - Kapalıçarşı: 200+ mağaza (mücevher, halı, deri, hediyelik) - İstiklal Caddesi: 80+ mağaza (tekstil, aksesuar, kozmetik) - Sultanahmet: 60+ mağaza (hediyelik, baharat, antika) - Diğer bölgeler: 160+ mağaza (Eminönü, Nişantaşı, Kadıköy, Bağdat Cd.)
Tasarım süreci, turist kullanıcıların benzersiz ihtiyaçlarına ve İstanbul'un kozmopolit yapısına uygun şekilde 5 fazda yürütüldü: Faz 1 — Turist Araştırması ve Saha Gözlemi (2 hafta): Sultanahmet ve Kapalıçarşı'da 3 günlük saha gözlemi yapıldı. 30 yabancı turist ile kısa anket (İngilizce/Arapça), 10 mağaza sahibi ile derinlemesine görüşme gerçekleştirildi. En büyük turist şikayetleri: fiyat pazarlığında güvensizlik (%78), hangi mağazanın güvenilir olduğunu bilememe (%65), dil bariyeri (%58), gerçek indirim mi yoksa turistlere özel fiyat mı anlayamama (%72). Mağaza sahiplerinin en büyük sorunu: turist trafiğini artırma ve dijital pazarlama kanalı eksikliği. Faz 2 — Bilgi Mimarisi ve Kullanıcı Akışları (1.5 hafta): Turist akışı 3 senaryoya ayrıldı: (A) Keşif modu — haritada gezin, yakın mağazaları bul, kategoriye göre filtrele, (B) İndirim modu — mağazada QR tara, indirim oranını gör, kasada göster, (C) Planlama modu — favori mağazaları kaydet, rota oluştur, hatırlatıcı kur. Tab bar yapısı: Keşfet (harita), Kartım (dijital kart + QR), Kampanyalar (güncel fırsatlar), Favoriler, Profil. Onboarding: maksimum 2 ekran — dil seçimi + kart aktivasyonu. Faz 3 — Çok Dilli UI Tasarımı (2 hafta): 4 dil için UI adaptasyonu: LTR (TR/EN/RU) ve RTL (AR) layout'lar ayrı tasarlandı. Arapça'da tüm ikonlar, butonlar ve navigation yansıtıldı. Renk paleti: zümrüt yeşil-turkuaz (İstanbul'un deniz ve yeşilini yansıtan, kültürel olarak nötr renkler). Mağaza kartları: fotoğraf + isim + kategori ikonu + indirim oranı badge + mesafe bilgisi. Harita pin'leri: kategoriye göre renk + açıklama (mücevher altın, tekstil mavi, deri kahverengi, baharat turuncu). Font: sistem fontu + Arabic Typesetting (Arapça) + fallback Cyrillic (Rusça). Faz 4 — Prototip ve Turist Testi (1.5 hafta): 8 turist ile kullanılabilirlik testi (3 Avrupalı, 3 Arap, 2 Rus). Temel bulgular: (1) Harita zoom seviyesi çok geniş başlıyordu → kullanıcı konumuna 500m radius ile başlatıldı, (2) QR tarama butonu ana ekranda yeterince görünür değildi → tab bar'da merkezi büyük buton (floating action button benzeri) eklendi, (3) İndirim oranı gösterimi kafa karıştırıcı → "50 TL tasarruf" yerine "%30 indirim" daha anlaşılır (turist TL değerini bilmiyor), (4) Arapça RTL'de geri butonu sağda olmalı — sistem davranışıyla uyumlu hale getirildi. Görev tamamlama oranı: %78'den %93'e yükseldi. Faz 5 — Mağaza Partneri Arayüzü (1 hafta): Mağaza sahipleri için basit doğrulama arayüzü tasarlandı: müşteri kart numarasını gir veya tara → indirim oranı göster → onay butonu. Gün sonu rapor: kaç turist geldi, toplam indirim tutarı, en popüler ürün kategorisi. Bu partner arayüzü mağaza sahiplerinin platforma bağlılığını artıran kritik özellik oldu — %85 mağaza aylık raporu düzenli kontrol ediyor.
TSC, İstanbul'un turizm ekosisteminde dijital alışveriş deneyiminin standartlarını belirleyen bir platform oldu: Kullanıcı Metrikleri: - 25.000+ aylık aktif kullanıcı (MAU) — turizm sezonunda (Nisan-Ekim) %80 artış - 100.000+ kümülatif indirme — App Store + havalimanı/otel tanıtımı - App Store'da 4.3 puan (250+ değerlendirme) - D7 retention oranı: %35 (turizm uygulaması ortalaması %18) - Ortalama oturum süresi: 5.4 dakika (mağaza keşfi + kampanya taraması) - Günlük QR tarama: 3.200+ işlem (yaz sezonu pik) Ticari Etki: - Anlaşmalı mağaza sayısı: 500+ (İstanbul genelinde 8 ana bölgede) - Mağaza başına ortalama turist yönlendirmesi: ayda 45+ - İndirim kullanım oranı: %62 (kartı gösteren turistlerin alışveriş yapma oranı) - Mağaza memnuniyeti: NPS 68 (partner memnuniyeti) - Ortalama sepet büyüklüğü: indirimsiz alışverişe göre %28 daha yüksek (indirim güveni ile daha fazla harcama) - Turist geri dönüş oranı: %22 (aynı turist tekrar İstanbul'a geldiğinde uygulamayı yeniden kullanma) Teknik Performans: - Crash-free oranı: %99.3 - QR tarama başarı oranı: %96 (ilk denemede) — sektör ortalaması %82 - Ortalama tarama süresi: 0.8 saniye - App boyutu: 35MB (4 dil + offline harita cache) - Cold start süresi: <1.0s - Offline mağaza verisi: 500+ mağaza bilgisi 25MB cache'de erişilebilir App Store İncelemeleri: - "Istanbul shopping made easy! Found great deals in Grand Bazaar with the map feature. Love the QR scan discount." — UK Tourist ★★★★★ - "Очень удобное приложение для покупок в Стамбуле. Карта магазинов помогла найти лучшие скидки." — Rus Turist ★★★★☆ - "تطبيق رائع للتسوق في إسطنبول. خصومات حقيقية وسهل الاستخدام" — Arap Turist ★★★★★ - "Kapalıçarşı'da hangi mağazada indirim var anında görüyorsunuz. Turist müşterilerimiz çok memnun." — Mağaza Sahibi ★★★★☆
Bu proje boyunca turizm sektörüne ve çok dilli uygulama geliştirmeye özgü birçok değerli teknik ve ürün dersi çıkardım: RTL (Sağdan Sola) Desteğinin Gerçek Maliyeti: Arapça RTL desteği eklemek sadece metin yönünü çevirmek değil — tüm UI layout mantığını yeniden düşünmeyi gerektiriyor. Auto Layout'ta left/right yerine leading/trailing kullanmak temel adım, ama yetmez: UICollectionView scroll yönü, UIPageViewController sayfa geçişi, custom drawing kodları (Core Graphics), hatta animasyon yönleri RTL'de ters çalışması gerekiyor. En büyük tuzak: bazı UI elementleri evrensel olmalı (geri butonu, media player kontrolleri) ama çoğu yansıtılmalı — bu ayrımı doğru yapmak tasarım rehberi gerektirir. Bu deneyim, projeye RTL desteği baştan planlanmazsa sonradan eklemenin 3-4x daha maliyetli olduğunu somut olarak gösterdi. Kapalı Alan Konum Zorlukları: Kapalıçarşı (Grand Bazaar) dünyanın en büyük kapalı çarşısı — 4.000+ mağaza, 61 sokak, GPS sinyali yok. Standart CoreLocation burada işe yaramıyor. WiFi fingerprinting bazlı yaklaşık konum tahmini denedik ama tutarlılık düşüktü. En pragmatik çözüm: Kapalıçarşı'yı bölgelere ayırarak (Kuyumcular, Halıcılar, Antikacılar vb.) kullanıcının seçim yapmasını sağlamak — indoor positioning yerine semantic positioning. Bu deneyim, Apple'ın Indoor Maps programının neden bu kadar değerli olduğunu somut olarak gösterdi. Turist Kullanıcı Davranışı: Turistler yerli kullanıcılardan tamamen farklı davranıyor: (1) Uygulamayı bir kez indirip seyahat boyunca yoğun kullanıyor, sonra terk ediyor — D30 retention değil, trip-duration retention önemli, (2) Onboarding sıfır toleranslı — 2 ekrandan fazla onboarding'de %70 kayıp, (3) Güven en büyük bariyeri — tanımadıkları ülkede tanımadıkları uygulamaya kart bilgisi vermek istemiyorlar, bu yüzden fiziksel kart dijitalizasyonu (mevcut güveni transfer etme) stratejisi işe yaradı, (4) Konum izni verme oranı turistlerde %20 daha düşük — "Why" açıklaması mutlaka gerekiyor. Çoklu Para Birimi ve Vergi İadesi: Türkiye'de turistler KDV iadesi hakkına sahip — bu özelliğin uygulamaya entegrasyonu beklenenden karmaşıktı. Farklı ülkelerin farklı iade limitleri, fatura kesim gereksinimleri ve gümrük prosedürleri var. Basitleştirilmiş bilgi kartları ile başladık, detaylı kılavuz v2'de eklendi. Sezonsallık ve Sunucu Kapasitesi: Turizm uygulamalarının en büyük teknik zorluğu sezonsallık — yaz aylarında 5x trafik artışı. Sunucu auto-scaling stratejisi baştan planlanmalı. Ayrıca Ramazan ve bayram dönemlerinde Ortadoğu turistlerinden gelen trafik spike'ı ayrı bir kapasite planlaması gerektiriyordu.
NavigationStack'in ötesine geçin! Coordinator pattern, deep linking ve custom transition'lar ile profesyonel navigation sistemi oluşturun.
22 dkiOS push notification'larının tüm gücünü keşfedin. Rich media, actionable notifications, notification service extension ve silent push stratejileri.
21 dkMapKit ile SwiftUI harita uygulamaları, CLLocationManager, geofencing, annotations, overlays ve iOS 17+ yeni MapKit API'ları.
20 dk12+ yıllık mobil geliştirme deneyimimle hayalinizdeki uygulamayı birlikte hayata geçirelim.
İlk görüşme tamamen ücretsizdir