Bazılarınızın bildiği üzere 2025'in sonuna doğru iOS geliştirmede ileri seviye konuları işlediğim bir eğitim (bootcamp) vermiştim. Kontenjandan dolayı katılamayan ve merak edenler ikinci dönemi soruyordu. Bootcamp'in yeni dönemi 25 Mart 2026 tarihinde başlayacak.

Kayıt ve ek bilgi için: Kayıt Linki


Neden Bootcamp?

Türkçe eğitim olarak giriş seviyesi fazlaca eğitim programı varken, orta (mid) seviye bir geliştiriciyi ileri (senior) seviyeye taşıyacak, iOS geliştirmede kullanılan birçok yöntemin temelinde yatan sebepleri ile birlikte anlatacak komple bir programın eksik olduğunu düşündüm. Bir çok iOS geliştiricisi sadece app geliştirme kısmında tecrübe kazanıyor ancak test yazma, performans optimizasyonu, mimari, tasarım - yazılım ilişkisi, kod kalitesi gibi konularda eksik kalıyordu.

Bu yüzden ben de bütün bu ileri seviye konuları en basit haliyle anlatan, gerçek hayattaki kullanımlarını da gösterecek şekilde bir müfredat hazırladım. Sektörde daha çok UIKit kullanıldığı için mimari gibi konuları UIKit özelinde anlattım ancak son haftalarda iki dersi SwiftUI'ın çalışma mantığı ve layout prensiplerine ayırdım.

Eğitim boyunca MVC ile geliştirilmiş bir dizi/film uygulaması üzerinde tüm konu başlıklarında işlediklerimizi uygulayarak son haftaya kadar taşıdık.

Müfredatı Merak Ediyorsanız

Merak edenler için özet halinde tüm müfredatı özetleyeyim:

1) Mimari: İşe alım süreçlerinde, ilanlarda mimari konusu hep ön planda olduğu, ve iyi oturtulmuş bir mimari olmadan diğer konuları rahatça işleyemeyeceğimizden ilk olarak Mimari nedir, önemi ve Apple MVC'nin kökeninden bahsettik. Daha sonra VIPER, Clean Swift mimarilerini detaylıca işledik ve örnek projeyi bu mimarilerle tekrardan yazdık. Sonraki derste ise MVVM mimarisini işleyip, son olarak Coordinator patternini uygulayarak MVVM-C ile uygulamamızın son haline getirdik.

2) Testing: Test neden önemli? Bir iOS appinde nerelere test yazılır? Test tipleri: Unit Test, UI Test, Snapshot Testing. TDD ve BDD. Mimari olarak düzenlediğimiz appe XCTest, Quick + Nimble, Swift Testing ile testleri yazdık ve aralarındaki farkları detaylı inceledik. Snapshot testing ile arayüz elementlerini test ettik. Son olarak da UI testlerde kullanılan Robot ve Page patternleri inceledik.

3) Debugging: En basit print fonksiyonundan başlayarak hataları tespit etme ve sorunların kaynağını bulma stratejilerini inceledik. Xcode Breakpoints'i tüm özellikleriyle anlatıp, arkasından LLDB'nin nasıl çalıştığını, LLDB komutları ve bu komutların pratikte kullanım yerlerini inceledik. Son konumuz view debugging ile de Xcode'un view debugging tooluna ek olarak Reveal, Lookin gibi araçların nasıl kullanılacağına dair demo yaptık.

4) Kod Kalitesi ve Xcode Ayarları: Swift Style Guide'ları, bu kuralların ekip içerisinde SwiftLint ile nasıl kontrol edileceği, kodu yazarken bu kurallara göre kodun otomatik formatlanmasına yarayan SwiftLint format, SwiftFormat ve Apple'ın Xcode içerisine entegre ettiği swift-format araçlarının nasıl ayarlanacağı ve kullanılacağını işledik. Xcode'da yapılabilecek ayarların da üzerinden geçtik.

5) XCConfig ve Tuist: Xcode projesi içerinde farklı konfigurasyonlar oluşturma ve buna gore appi Debug, Beta, Release gibi farklı varyantlara bölme, ayrı targetlar oluşturmadan app ikonlarını modifiye etme gibi tüm XCConfig detaylarını uygulamalı inceledik. Daha sonra Tuist'i projeye bu konfigurasyonları da içerecek şekilde projeye entegre ettik. Sanırım en zor dersimiz bu oldu, Tuist'i tam anlamıyla entegre ederken sorunlar yaşadık. Eğer amaç sadece pbxproj dosyalarındaki conflict'i çözmekse Xcode 16 ile gelen Buildable Folders özelliğinin yeterli olduğunu ve nasıl çalıştığını uygulamalı olarak denedik.

6) Dependency Management Sistemleri: İlk iPhone SDK'den itibaren projeye başkasının kodunu ekleme konusunda kullanılan tüm projeleri, artıları ve eksileriyle inceledik. CocoaPods, Carthage, SPM, Scipio gibi araçları nasıl kullanacağamızı öğrendikten sonra, bir projeye dependency eklenirse ne gibi bir yükü olur, Swift compiler ve linker'ın çalışma prensiplerini, buna göre eklenen dependencylerin neye göre statik veya dinamik olarak linklenmesi gerektiğini, tüm sistemin nasıl çalıştığı ile birlikte anlattık. Son olarak Apple'ın getirdiği Mergable Libraries tekniğinin tam olarak ne yaptığından ve nerede kullanılabileceğinden bahsettik.

7) Error Handling: Bir uygulamada oluşacak hataların kod seviyesinde nasıl ele alınacağını inceledik. Detaylı bir şekilde Swift Error yapısını, tüm kullanım şekilleriyle inceledik. Geliştirme sürecinde kullanılacak assert, precondition, fatalError gibi yapıların nerede, ne şekilde kullanılacağını inceledik. Client applerde en çok görülen hata türü olan internet bağlantı hatalarının nasıl ele alınacağını, Reachability.swift ya da NWPathMonitor kullanmanın iyi sonuçlar vermediğini, bunun yerine Apple'ın bize sunduğu yapıların nasıl kullanılabileceğini inceledik.

8) Arayüz Geliştirme ve Design System: iOS Geliştirmede kullanıcı arayüzünü oluşturmak için kullanılan tüm teknikleri Interface Builder'dan Auto-Layout'a ve en son SwiftUI'a kadar gelen süreci ve bu araçların neyi çözmeyi hedeflediğinden bahsettik. Özellikle tasarımda arayüz geliştirmenin hızlı ve yapılanın anında önizlenebildiği yapıların önemini, ve bu tarz bir sistemin Xcode Previews ile nasıl kurulabileceğini, mimari ve veri yapılarının nasıl ayarlanabileceğini işledik. Daha sonra örnek uygulamamız için hazırladığımız Design System dökümanına bakarak, sistemdeki tüm renk, ikon, gölge, corner radius gibi verilerin olduğu ayrı bir UI kütüphanesi oluşturduk. Tasarımda kullanılan komponentleri de bu kütüphane içinde oluşturarak, dökümantasyonu ile birlikte komple bir tasarım sistemi implementasyonu yaptık. Bol bol live coding yaptığımız bir haftasonu oldu.

9) Animasyonlar ve Geçişler: Kullanıcı deneyimini iyileştiren arayüz animasyonlarının prensipleri, easing fonksiyonlarının algıdaki karşılığı, arayüz animasyonu hazırlarken kullanılacak zamanlamalar, easing tiplerini işledik. iOS'te var olan 10'un üzerinde animasyon tekniğini örnekleriyle işledikten sonra bunların hangi durumlarda ne şekilde kullanılacağını öğrendik. Bir sonraki ders ise appte iki ekran arası geçişleri nasıl koordine ederek tamamen sıfırdan geçiş animasyonları tasarlamayı uygulamalı öğrendik.

10) Performans: Kullanıcı deneyimini asıl etkileyen faktörün, appin hızlı çalışması olduğunu anlatarak, uygulamada yaşanacak performans problemlerini nasıl tespit edip ölçüm yapacağımızı, arayüzde hangi işlemin GPU, hangi işlemin CPU üzerinde çalıştığını ve bu bilgilerle nasıl arayüz render performansını optimize edeceğimizi öğrendik.

11) Build Süresi Optimizasyonu: Özellikle kompleks uygulamalarda projeyi derleme sürelerinin uzunluğu, ekiplerin vakit kaybetmesine sebep oluyor. Bu derste build sürelerini nasıl ölçer ve optimize ederiz, dependencyleri önceden derleyerek zaman kazanma, swift kodunda bazı fonksiyonları kullanmaktan kaçınarak nasıl derleme performasını arttırabiliriz, bunları öğrendik.

12) CI/CD: Continous Integration ve Continous Delivery ne demektir, mobil uygulamalarda nasıl çalışmaktadır, faydaları nelerdir konuları ile başlayıp, büyük takımlarda bu sistemler nasıl çalışıyor detaylandırarak bahsettikten sonra bu senaryoları önce Xcode Cloud, sonra da daha detaylı bir sistem olan Bitrise üzerinde canlı olarak kurguladık.

13) Swift: Swift'teki Generic, Property Wrappers, Access Control, Optionals gibi özelliklerin detayına inerek detaylı anlatımını yaptık. Struct vs Class ayrımına baktık. Swift Macros ile makroların nasıl yazıldığını, ne amaçla kullanıldıklarını inceledik ve kendi makrolarımızı yazdık.

14) Swift Concurrency: Yakın zamanda gelen Swift Concurrency'yi en basit haliyle anlatarak işlerin başka threadlere alınmasını, bunun arayüzdeki takılmalara çözümünü işledik. Bu zamana kadar geliştirdiğimiz uygulamaya adım adım async await, async let gibi yöntemleri ekledik. Bir sonraki gün de Memory Safety, race condition konularını, Sendable kavramını, actor tipini ve bunların pratikte tam olarak ne işe yaradığını uygulamalı gördük.

15) SwiftUI: SwiftUI'ın temel çalışma prensibini, render sırasında neler olduğunu, bir SwiftUI View'ında yazdığımız kod ve modifier'lar tam olarak arayüzdeki çizimi nasıl etkiliyor, örneklerle inceledik. UIKit'ten tamamen farklı bir layout yapısı olduğundan, SwiftUI'ın gerektirdiği farklı kafa yapısını aktarmaya çalıştım. Bu dersin sonunda SwiftUI yazan öğrenciler, bir daha layoutta bir şeyleri çözmek için her yere frame, stack yazmayı bırakmışlardır diye tahmin ediyorum.

State, StateObject, ObservedObject, Binding ve iOS17 ile gelen Observation framework ile datayı nasıl kurgulamamız gerektiğini işledik.

Bu zamana kadar yaptığımız uygulamayı, komple SwiftUI ile baştan yazdık.

Ek olarak SwiftUI'da 120fps çalışan bir arayüz yapmanın zorlukları, performans için SwiftUI viewlarının nasıl kullanılması gerektiğini inceledik.

16) Routing: iOS appinde deeplink entegrasyonu ve app içinde bir yerden başka bir yere gidişi Coordinatorlar ile nasıl gerçekleştirebilriz, bunu örnek uygulamaya implemente ederek öğrendik.

Bütün bu konulara ek olarak, daha önce konferanslarda yaptığım, 14 Years of iOS, Thousand Faces of iOS Animations, Practical Testing in iOS gibi sunumlarımın daha kapsamlı hallerini öğrencilere haftaiçi seanslarda sundum.

Bootcamp Sonrası

Eğitim süresince ve sonrasında çok olumlu geri dönüşler aldım. Tüm öğrencilere katılımlarından dolayı teşekkür ediyorum. Umarım ikinci dönem de en az ilk dönem kadar faydalı geçer.

Çok Sorulan Sorular:

  • Kendi seviyemden emin değilim, yine de katılabilir miyim?

Başvuru yapıldıktan sonra yapılan ön görüşmede bu durum değerlendiriliyor. Eğitim orta seviye için gözükse de geçen dönem katılan senior ve junior geliştiriciler de vardı. Bütün konuları, hiç bilmediğinizi varsayarak anlatıyorum.

  • Ekip olarak gelsek bir indirim oluyor mu?

Eğer aynı şirkette takım arkadaşıysanız ya da şirketiniz sizi eğitime gönderiyorsa grup indiriminden faydalanabilirsiniz.

Diğer sıkça sorulan sorulara iCommunity sayfası üzerinden ulaşabilirsiniz.


İkinci döneme kayıt için: Kayıt Linki