iPucu Lab · Blog

Derin teknik yazılar ve platform duyuruları

Sahada karşılaştığımız konuları, resmi dokümantasyona dayanarak ve uygulanabilir örneklerle anlatıyoruz.

Mimari ve AI yolculuğu

Kolaydan zora sıralı bir rota. Her yazı bir seviye; okudukça yol aydınlanır.

Yolculuğa başla
Bölüm 1TemellerBağımlılıklar, yaşam süreleri ve paylaşılan durum
01BuradasıniOS + Android17 dk okumaSingleton'ları tamamen yok etmek gerçekten doğru mu?Büyük iOS ve Android projelerinde can yakan şey gizli erişim ve global mutable state; bir nesneden tek tane olması kimseyi incitmiyor. Hangi singleton kalır, hangisi oturuma bağlanır, hangisi silinir: Swift 6 ve Hilt ile adım adım anlatıyoruz.02BuradasıniOS17 dk okumaDependency Injection'ın yanlış kullanımı: iOS'ta DI container anti-pattern'leriProjeye bir DI container eklemek, bağımlılıkları enjekte ettiğiniz anlamına gelmiyor. Service locator'a dönüşen resolve çağrılarını, QA'in açmadığı ekranda patlayan kayıtları, tanrı container'ı ve SwiftUI environment tuzaklarını; yerine koyduğumuz composition root'u ve geçiş adımlarını anlatıyoruz.03BuradasınAndroid15 dk okumaDependency Injection'ın yanlış kullanımı: Android'de DI container anti-pattern'leriHilt ya da Koin kurulu diye bağımlılıklarınız yönetiliyor sayılmaz. Her şeyin @Singleton olduğu graph'ler, kılık değiştirmiş service locator'lar ve 80 @Provides'lı AppModule nasıl oluşur, adım adım nasıl toparlanır, anlatıyoruz.04BuradasıniOS + Android16 dk okumaBookingFlowContext gibi global state object'leri neden tehlikelidir?Çok adımlı bir akışta her ekranın okuyup yazdığı otuz optional'lı context çantası, ilk gün kolaylık, üçüncü yıl crash kaynağıdır. Neyi kırdığını, observable yapmanın neden yetmediğini ve yerine koyduğumuz tipli girdi, çıktı ve state machine modelini Swift ve Kotlin koduyla anlatıyoruz.
Bölüm 2SınırlarKodu ve alanları nereden böleceğiz?
05BuradasıniOS + Android17 dk okumaFeature-based mimari vs layer-based mimariKodu teknik katmana göre mi, özelliğe göre mi dilimlemeli? Layer-first projelerin nasıl yaşlandığını, feature-first'ün neye mal olduğunu, ölçekte önerdiğimiz yapıyı ve bir seferde tek feature taşıyan geçiş yolunu iOS ve Android örnekleriyle anlatıyoruz.06BuradasıniOS + Android17 dk okumaDomain boundary nasıl belirlenir?Modülerleştirmeden önce verilmesi gereken karar, bir domain'in nerede bitip diğerinin nerede başladığıdır. Ekranlara ya da endpoint'lere göre kesmek yerine dile, birlikte değişen koda ve verinin sahibine bakarak sınır çizmeyi, hayali bir seyahat uygulaması üzerinden anlatıyoruz.07BuradasıniOS + Android15 dk okumaShared model kullanmak mı, domain-specific model kullanmak mı?Her feature’ın import ettiği altmış alanlı `Booking`, module grafiği temiz görünse bile bütün uygulamayı birbirine bağlar. Feature’a ait modelleri, sıkıcı mapper’ları, küçük bir shared kernel’i ve god-model’i tüketici tüketici bölmenin yolunu Swift ve Kotlin ile anlatıyoruz.
Bölüm 3ModüllerBağımlılık grafiği, döngüler ve kuralların zorlanması
08BuradasıniOS + Android16 dk okumaModularization'ın gerçek maliyeti: ne zaman modüllememeliyiz?Modularization bedava diye satılır, faturası sonradan gelir. Modül başına build ayarı, ikiye katlanan interface modülleri, launch süresi, Gradle configuration süresi ve yanlış yerde donan sınırlar. Ne zaman bölmemenizi önerdiğimizi ve karardan önce neyi ölçeceğinizi anlatıyoruz.09BuradasıniOS15 dk okumaCircular dependency büyük iOS projelerinde nasıl önlenir?SwiftPM ve Xcode module cycle'ını zaten reddeder; asıl sorun, cycle'ın şişmiş bir Common module'ü ya da bölünemeyen bir monolit olarak geri dönmesidir. Beş tekniği, hangi nedene hangisinin uyduğunu ve yasak kenarı CI'da yakalayan script'i anlatıyoruz.10BuradasıniOS17 dk okumaCompile-time dependency graph'i yönetmek: iOSProjeyi 60 module'e böldünüz ama Core'daki tek satır hâlâ her şeyi yeniden derliyor. Swift'in neyi neden yeniden derlediğini, import'ların erişim seviyesini, interface module'leri ve graph'inizdeki sıcak noktaları kendi projenizde nasıl ölçeceğinizi anlatıyoruz.11BuradasınAndroid14 dk okumaCompile-time dependency graph'i yönetmek: AndroidKırk module'e böldüğünüz proje tek satırlık değişiklikte hâlâ dakikalarca derleniyorsa bakmanız gereken yer graph'in şeklidir. Gradle'da api ile implementation farkını, api/impl ayrımını, fark etmeden sızan şeyleri ve kazancı nasıl ölçeceğinizi anlatıyoruz.12BuradasıniOS17 dk okumaArchitecture dependency rule'larını compiler'a enforce ettirmek: iOSWiki'de duran bir dependency rule'u çoktan çiğnenmiştir. Kuralı Package.swift'e, access control'e, bir CI script'ine ve Swift 6 isolation'ına taşıyıp build'i kırdırmanın yolunu, SwiftPM'in sessizce warning'e çevirdiği boşlukla birlikte anlatıyoruz.13BuradasınAndroid16 dk okumaArchitecture dependency rule'larını compiler'a enforce ettirmek: AndroidWiki sayfasında ya da code review yorumunda yaşayan bir dependency rule çoktan delinmiştir. Gradle module sınırları, convention plugin'ler, explicitApi, module graph assertion, Konsist, ArchUnit, detekt ve dependency guard ile kuralları build'i kıran kontrollere çeviriyoruz.
Bölüm 4Ölçek100+ modül ve büyük organizasyonlar için araçlar
14BuradasıniOS14 dk okumaTuist / SPM / XcodeProj: büyük organizasyonlarda hangisi?20 ile 200 arası iOS mühendisi olan ekipler için karar yazısı. Elle bakılan .xcodeproj, ince proje artı yerel Swift package'lar, Tuist ve XcodeGen ile proje üretimi, Bazel. Hangisini hangi koşulda seçtiğimizi, geri alınabilir geçiş planıyla birlikte anlatıyoruz.15BuradasıniOS18 dk okumaSwift Package Manager ile 100+ modüllü iOS architectureYüz module'ü local Swift package'larla yönetmek mümkün, yeter ki manifest'i veri gibi değil kod gibi yazın. Tek package kararından linking tuzaklarına, macro faturasından yalnızca etkilenen testleri çalıştıran CI script'ine kadar uçtan uca kurulum.
Bölüm 5Güvenlikİstemciyi ve trafiği korumak
16BuradasıniOS + Android22 dk okumaSSL pinning: ne zaman gerekli, nasıl doğru yapılır, nasıl kırılır?Pinning, güvendiğiniz CA kümesini yüzlerce kökten birkaç anahtara indirir; karşılığında sertifika takviminizi uygulama sürümlerinize bağlar. iOS ve Android'de doğru kurulum, rotasyon runbook'u, telemetri, test ve pentest'te nasıl atlatıldığı.17BuradasıniOS + Android20 dk okumaApp Attest ve Play Integrity: sahte istemcileri durdurmanın uçtan uca rehberiAPI’niz kiminle konuştuğunu bilmiyor. Tehdit modelinden veri modeline, Swift ve Kotlin istemci kodundan TypeScript ile sunucu doğrulamasına, karar matrisinden kademeli yayın planına kadar App Attest ve Play Integrity’yi üretimde nasıl kurduğumuzu adım adım anlatıyoruz.
Bölüm 6Yapay zekâAI destekli geliştirme, otomasyon ve yönetişim
18BuradasınGenel15 dk okumaKod asistanı lisansı almak dönüşüm değildir: AI destekli SDLC'yi adım adım kurmakLisans almak tek tek geliştiricilerin yazma hızını değiştirir, ekibin teslimat biçimine dokunmaz. Ortak talimat dosyaları, repoda duran komutlar, PR şablonu, CI adımı ve çalışma anlaşmalarıyla AI destekli bir SDLC'yi aşama aşama nasıl kurduğumuzu anlatıyoruz.19BuradasınGenel16 dk okumaAI ile kod inceleme: insan incelemesinden önce ne yakalanır, ne yakalanmaz?Ekip AI ile daha çok kod yazınca ilk tıkanan yer review kuyruğu olur. AI ön incelemesinin mekanik katmanda neyi güvenilir yakaladığını, neyi kaçırdığını, talimat dosyasını, CI kurulumunu, gürültü kontrolünü ve insana kalan işi Swift ve Kotlin örnekleriyle anlatıyoruz.20BuradasıniOS + Android20 dk okumaBüyük bir iOS/Android kod tabanında AI ajanlarını çalıştırmak: proje kuralları, bağlam ve sınırlarKodlama ajanları küçük repoda parlıyor, 100 modüllü mobil uygulamada tökezliyor. Fark çoğu zaman repo'nun hazırlığından geliyor. Tek modüllük build ve test komutları, modül başına kural dosyaları, bağlam sınırı ve ajana verilmeyecek yetkiler üzerinden uçtan uca anlatıyoruz.21BuradasıniOS + Android18 dk okumaAI'ın yazdığı kodun mimariyi bozmasını önlemek: kuralları ajanlara da zorlatmakBir ajan görevin geçmesini optimize eder; mimariniz o hedefin içinde yer almaz. Build'in zorlamadığı kuralı her insandan daha hızlı ve daha kibar çiğner. Talimat dosyasından CODEOWNERS'a uzanan korkuluk yığınını ve korkulukların kendisini nasıl koruduğumuzu anlatıyoruz.22BuradasıniOS + Android20 dk okumaAI ile test üretimi: kapsam artıyor, peki güven artıyor mu?Bir agent bir öğleden sonrada kapsamı ikiye katlayabilir, ama üretilen testlerin çoğu kodu kendisine doğrulatır ve hiçbir zaman kırmızıya dönmez. Swift ve Kotlin örnekleriyle neyi istemeniz, neyi reddetmeniz ve güvenin gerçekten artıp artmadığını nasıl ölçmeniz gerektiğini anlatıyoruz.23BuradasınGenel20 dk okumaAI verimliliğini ölçmek: 'daha hızlıyız' hissini sayıya dökmekEkip daha hızlı olduğunu söylüyor, bütçe sahibi sayı istiyor, vendor paneli acceptance rate gösteriyor. Hangi metriklerin yanılttığını, hangilerinin dayandığını, veriyi kendi Git host'unuzdan nasıl çekeceğinizi ve yönetime abartmadan nasıl raporlayacağınızı anlatıyoruz.24BuradasınGenel19 dk okuman8n ile ilk üretim otomasyonu: form, sınıflandırma, CRM, Slack (uçtan uca)Web sitesindeki iletişim formunu LLM ile sınıflandırıp CRM'e yazan ve Slack'e haber veren bir n8n workflow'unu demo seviyesinden üretim seviyesine taşıyoruz. Webhook ya da kuyruktan çekme, idempotent yazma, hata workflow'u, dead-letter, test ve runbook dahil.25BuradasınGenel18 dk okuman8n'de AI adımlarını güvenilir kılmak: hata yönetimi, insan onayı, maliyet sınırıDemo'da çalışan LLM adımı gerçek trafikte şemayı bozar, enjekte edilmiş talimata uyar, faturayı şişirir. n8n 2.x'te çıktı sözleşmesi, onay adımı, dead-letter, idempotency ve günlük bütçe kapısını node ayarları ve koduyla kuruyoruz.26BuradasınGenel18 dk okumaŞirket içi bilgi asistanı kurmak: RAG ne zaman yeter, ne zaman yetmez?Dokümanlarımızı bilen bir asistan isteği çoğu zaman üç şekilde hayal kırıklığına dönüşür: emin ama yanlış, bayat ya da soranın görmemesi gerekeni sızdıran cevaplar. Sorulardan başlayıp yetki, tazelik ve ölçüme kadar uçtan uca anlatıyoruz.27BuradasıniOS + Android19 dk okumaMobil uygulamaya LLM özelliği eklemek: cihazda mı, sunucuda mı?Model seçmeden önce özelliği tanımlayın. Bir seyahat uygulaması üzerinden kalite, gecikme, maliyet, gizlilik ve cihaz kapsamı eksenlerini, anahtarı saklayan gateway'i, Swift ve Kotlin ile streaming istemcisini, cihaz içi modele düşen hibrit akışı ve özellik tipine göre karar tablosunu anlatıyoruz.28BuradasıniOS + Android22 dk okumaiOS ve Android'de cihaz üzerinde çalışan modeller: bugün neler mümkün?Foundation Models, Core ML ve Core AI bir yanda; Gemini Nano, ML Kit GenAI, LiteRT ve Play for On-device AI öbür yanda. Ekim 2026 itibarıyla hangi API hangi cihazda, hangi dilde çalışıyor, nerede yetmiyor ve model yokken uygulamanız ne yapmalı, kodla anlatıyoruz.29BuradasınGenel19 dk okumaŞirket için AI kullanım politikası: kod, veri ve müşteri bilgisi nereye gidebilir?Politikanız yoksa da bir politikanız var, yalnızca onu her geliştirici kendi yazıyor. Araçlar arasındaki gerçek veri farklarını, on saniyede uygulanan bir veri sınıflandırmasını, kod ve müşteri verisi kurallarını, teknik zorlamayı ve uyarlayabileceğiniz tek sayfalık şablonu anlatıyoruz.