CI/CD (Continuous Integration / Continuous Delivery), her kod değişikliğinde uygulamayı otomatik olarak derleme, test etme ve teslim etme pratiğidir. Statista (2025) verilerine göre, mobil geliştirme ekiplerinin %80'i CI/CD kullanmaktadır. Bu makale popüler CI araçlarını, mobil derleme otomasyonu için Fastlane'i ve Canary Release ile Feature Flags'i ele almaktadır.
Önemli Noktalar
Continuous Integration, mobil uygulamalar için CI/CD otomasyonunun temelidir. Her geliştiricinin kodunu günde birkaç kez paylaşılan bir depoya birleştirdiği bir uygulamadır. Her push'tan sonra CI sunucusu otomatik olarak projeyi derler ve testleri çalıştırır. Testler başarısız olursa, derleme bozuk kabul edilir ve ekip sorunu hemen düzeltir. CI, bir geliştiricinin kodunun diğerinin kodunu bozduğu «bende çalışıyor» durumunu önler.
Build Pipeline — her push'ta yürütülen adımlar dizisi: kod linting → birim testler → debug APK/IPA derleme → entegrasyon testleri → release derleme. Her adım yalnızca bir önceki adım başarılı olduktan sonra çalışır. Derleme yapıtları — APK, IPA, AAB, test raporları — kaydedilir ve indirilebilir.
Continuous Delivery — kod otomatik olarak derlenir ve test edilir, ancak üretime sürme kararını bir insan verir. Continuous Deployment — her başarılı derleme otomatik olarak üretime sürülür. Mobil uygulamalar için, TestFlight veya Internal Testing aracılığıyla CD (mağazalara teslimat) daha yaygındır, çünkü yayınlama kararını geliştirici veya yönetici verir. Staging — üretime mümkün olduğunca yakın ortam, sürümden önce derlemeyi test etmek için kullanılır.
GitHub Actions, GitHub'da mobil uygulamaları otomatikleştirmek için yerleşik bir CI/CD sistemidir. Actions, iş hatlarını tanımlamak için YAML yapılandırmasını (.github/workflows) kullanır. Mobil geliştirme için hazır eylemler mevcuttur: actions/setup-java, Android için gradle-build-action, iOS için xcodebuild-action. GitHub Actions, özel depolar için ayda 2000 ücretsiz dakika sağlar.
Örnek: Bir Android iş akışı, kod checkout, JDK 17 kurulumu, Gradle bağımlılık önbellekleme, lint ve birim test çalıştırma, APK derleme ve yapıt yükleme içerir. iOS için — checkout, Xcode kurulumu, pod install, XCTest çalıştırma, arşivleme ve IPA dışa aktarma. GitHub Actions, bildirimler için GitHub Releases, Slack ve Telegram ile entegre olur.
GitLab CI, .gitlab-ci.yml ile yapılandırılan GitLab'de yerleşik bir CI/CD sistemidir. GitLab CI, işleri yürüten aracılar olan runner'ları kullanır. Mobil geliştirme için paylaşılan runner'ları (Android için Linux) veya kendi runner'larınızı (iOS için macOS) kullanabilirsiniz. GitLab CI, paralel işleri, yapıtları, ortamları ve üretim sürümleri için manuel onayı destekler.
Bitrise, mobil uygulama otomasyonunda uzmanlaşmış bir CI/CD platformudur. Bitrise, Android, iOS, Flutter ve React Native için hazır Steps sunar: Gradle Runner, Xcode Archive, Flutter Test, CocoaPods Install. Bitrise, iOS için kod imzalamayı otomatik olarak yapılandırır (Codesigndoc aracılığıyla) ve Xcode, Android SDK, Flutter ve diğer araçlar önceden yüklenmiş sanal makineler sağlar.
Bitrise avantajları: görsel Workflow düzenleyicisi ile basit kurulum, paralel derleme desteği, Firebase Test Lab, App Store Connect ve Google Play Console ile entegrasyon. Bitrise, kişisel projeler için ayda 90 ücretsiz dakika sağlar. IT Sectr'de tüm mobil projeler için Bitrise kullanıyoruz — manuel GitHub Actions kurulumuna kıyasla CI/CD'yi önemli ölçüde basitleştirir.
| Kriter | GitHub Actions | GitLab CI | Bitrise | CircleCI |
|---|---|---|---|---|
| Uzmanlık | Genel | Genel | Mobil | Genel |
| iOS için macOS | Evet (macOS runner) | Kendi runner | Evet (yerleşik) | Evet (macOS) |
| Ücretsiz limit | 2000 dk/ay | 400 dk/ay | 90 dk/ay | 6000 dk/ay |
| Fastlane entegrasyonu | run script ile | run script ile | Hazır Step | run script ile |
| Kod İmzalama | Manuel kurulum | Manuel kurulum | Otomatik | Fastlane ile |
| Paralel derleme | Evet | Evet | Evet | Evet |
Fastlane, Ruby ile yazılmış iOS ve Android için mobil uygulama otomasyon aracıdır. Fastlane, hazır eylemler (200+) sistemi ve Fastfile aracılığıyla senaryoları tanımlamak için DSL'den oluşur. Fastlane, her mobil geliştiricinin manuel olarak yaptığı görevleri çözer: kod imzalama, ekran görüntüsü oluşturma, TestFlight ve Google Play'e yükleme, sertifika ve provisioning profil yönetimi.
Lane — Fastfile'da adlandırılmış senaryo. Örnek: lane :release do — bir sürüm yayınlamak için eylem zinciri. Match — şifrelenmiş bir Git deposu aracılığıyla sertifikaları ve provisioning profillerini güvenle depolama ve senkronize etme aracı. Gym — iOS uygulaması derleme ve arşivleme (xcodebuild üzerinde bir sarmalayıcı). Pilot — TestFlight'da derleme yükleme ve yönetimi. Deliver — App Store Connect'e uygulama ve meta veri yükleme. Snapshot — tüm dillerde otomatik ekran görüntüsü oluşturma. Screengrab — Android için otomatik ekran görüntüsü oluşturma.
Android için Fastfile örneği: lane :beta gradle (assembleRelease) çağırır, ardından test edenlere dağıtmak için firebase_app_distribution çağırır. iOS için: lane :beta match (sertifika indirme), gym (arşivleme) ve pilot (TestFlight'a yükleme) çağırır. Fastlane yerel olarak ve CI sunucusunda çalışabilir — bu onu herhangi bir mobil projede evrensel bir araç haline getirir.
Canary Release, tam sürümden önce uygulamanın yeni bir sürümünü küçük bir kullanıcı yüzdesine (%1–5) dağıtmak için bir CI/CD otomasyon stratejisidir. Google Play Console'da bu Staged Rollout ile uygulanır: kitlenizin %5'ine bir güncelleme yayınlarsınız, çökmeleri ve metrikleri izlersiniz ve sorun yoksa yüzdeyi artırırsınız. App Store Connect'te — Phased Release for Automatic Updates aracılığıyla.
A/B Testing — rastgele kullanıcı gruplarında bir özelliğin iki versiyonunun karşılaştırılması. Mobil geliştirmede A/B testleri Feature Flags, Firebase Remote Config veya sunucu tarafı mantığı ile yapılır. Canary Release ve A/B testleri yeni özellikler dağıtılırken riskleri en aza indirir.
Feature Flag (Feature Toggle) — yeni kod dağıtmadan işlevselliğin koşullu olarak etkinleştirilmesi. Feature Flag, kodda bir kontroldür: if (featureFlag.isEnabled()) { /* yeni kod */ } else { /* eski kod */ }. Flag'ler hizmetler aracılığıyla yönetilir: LaunchDarkly, Split.io, Firebase Remote Config. Feature Flags, özellik henüz kullanıcılara hazır olmasa bile geliştiricilerin kodu main'e birleştirmesine olanak tanır.
LaunchDarkly — en popüler Feature Flags yönetim platformu. LaunchDarkly, iOS, Android, Flutter ve React Native için SDK'lar sağlar. Özellikleri belirli kullanıcılar, segmentler, bölgeler veya kitlenin bir yüzdesi için etkinleştirebilirsiniz. Feature Flags ayrıca kill switch olarak da kullanılır — yeni bir uygulama sürümü yayınlamadan sorunlu bir özelliği anında devre dışı bırakma.
Sıkça Sorulan Sorular
Kodunuz GitHub'daysa GitHub Actions ile başlayın. Actions herkese açık depolar için ücretsizdir, Android ve iOS (macOS runner) için yerleşik desteğe ve hazır eylemlerden oluşan geniş bir ekosisteme sahiptir. Mobil uzmanlık için — Bitrise.
Hayır, CI hizmetleri (GitHub Actions, Bitrise, CircleCI) macOS runner sağlar. Kullanım dakikasına göre ödeme yaparsınız. Yerel Fastlane hata ayıklaması için Mac gerekir, ancak CI bulutta çalışabilir.
Canary Release — kararlılığı kontrol etmek için bir kullanıcı alt kümesine yeni sürüm dağıtma. A/B testi — daha iyisini seçmek için bir özelliğin iki varyantını karşılaştırma. Canary güvenilirlikle, A/B dönüşümle ilgilidir.
Fastlane zorunlu değildir ancak şiddetle tavsiye edilir. Fastlane olmadan manuel olarak xcodebuild çalıştırmanız, sertifikaları yönetmeniz ve web arayüzü üzerinden derleme yüklemeniz gerekir. Fastlane tüm bu görevleri tek bir komutla otomatikleştirir.
Match, iOS Code Signing sertifikalarını yönetmek için Fastlane aracıdır. Match, sertifikaları ve provisioning profillerini şifrelenmiş bir Git deposunda saklar ve tüm geliştiriciler ve CI sunucusu arasında senkronize eder.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.