# React Native 0.87 ve SwiftPM 2026: Modern iOS Build ve Mülakat Soruları > React Native 0.87 deneysel Swift Package Manager desteği sunarak CocoaPods ihtiyacını ortadan kaldırıyor. SwiftPM yapılandırması, otomatik bağlama ve mülakat hazırlığı hakkında bilgi edinin. - Published: 2026-09-03 - Updated: 2026-09-03 - Author: Anthony Fillion-Maillet - Tags: react-native, swiftpm, ios, typescript, mobile - Reading time: 8 min --- React Native 0.87, 11 Ağustos 2026'da yayınlandı ve iOS build'lerine deneysel Swift Package Manager (SwiftPM) desteği getirerek CocoaPods'u React Native projelerinden kaldırmanın ilk adımını attı. Bu sürüm ayrıca Strict TypeScript API'yi varsayılan yapar, iki kat daha hızlı source map oluşturma ile Metro 0.87'yi sunar ve minimum araç zinciri gereksinimlerini Node.js 22, Kotlin 2.0 ve Android compileSdk 37'ye yükseltir. > **Tek Komutla SwiftPM Kurulumu** > > CocoaPods'u devre dışı bıraktıktan sonra `npx react-native spm --deintegrate` komutunu bir kez çalıştırın. Proje daha sonra her build'de `pod install` gerektirmeden native bağımlılıkları otomatik olarak yeniden bağlar. ## Swift Package Manager iOS Bağımlılıkları için CocoaPods'un Yerini Alıyor React Native 0.87'deki SwiftPM desteği isteğe bağlı ve deneyseldir. CocoaPods, production uygulamaları için varsayılan bağımlılık yöneticisi olarak kalır. SwiftPM yolu, React Native'in zaten yayınladığı aynı önceden derlenmiş XCFramework'leri kullanır, bu nedenle ek binary indirmeler gerekmez. Temel avantaj: SwiftPM tabanlı bir proje yalnızca Xcode gerektirir. Ruby, Bundler ve CocoaPods artık geliştirici makinelerinde veya CI pipeline'larında gerekli değildir. ```bash # ios-swiftpm-setup.sh # Adım 1: iOS dizinine gidin cd ios # Adım 2: CocoaPods'u devre dışı bırakın ve SwiftPM referanslarını oluşturun npx react-native spm --deintegrate # Adım 3: Projeyi Xcode'da açın ve build yapın open MyApp.xcworkspace ``` `spm --deintegrate` komutu, proje dosyasını değiştirmek yerine mevcut `.xcodeproj`'a Swift paket referansları enjekte eder. Kod imzalama ayarları, build aşamaları ve yetenekler değişmeden kalır. Değişikliği geri almak için `npx react-native spm deinit` komutunu çalıştırın. ## SwiftPM Otomatik Bağlama pod install Olmadan Nasıl Çalışır İlk kurulumdan sonra, bağımlılık değişiklikleri otomatik yeniden bağlamayı tetikler. npm veya yarn ile native bir paket yükleyin veya kaldırın, ardından build yapın. Proje değişiklikleri algılar ve Xcode build aşaması sırasında otomatik bağlamayı yeniden çalıştırır. ```bash # dependency-workflow.sh # Native bir bağımlılık yükleyin npm install react-native-reanimated # Build otomatik yeniden bağlamayı tetikler npx react-native run-ios # pod install gerekmez ``` Taze klonlar ve CI ortamları için ilk build'den önce `npx react-native spm` komutunu bir kez çalıştırın. Bu, `Package.swift` dosyasını oluşturur ve Swift paket bağımlılıklarını çözer. ## SwiftPM Sınırlamaları ve Production Hazırlığı 0.87'deki SwiftPM desteği, benimseme kararlarını etkileyen önemli sınırlamalar taşır: | Sınırlama | Etki | |-----------|------| | Topluluk kütüphanesi desteği | Her kütüphane bir `Package.swift` dosyası sunmalıdır | | Komut kararlılığı | Bayraklar ve oluşturulan düzen 0.88+'da değişebilir | | CI yapılandırması | Build'lerden önce `npx react-native spm` adımı gerektirir | | Dokümantasyon | Sınırlı sorun giderme kaynakları mevcut | Production uygulamaları için CocoaPods önerilen yol olarak kalır. SwiftPM'i değerlendiren ekipler, geçişe karar vermeden önce ayrı bir dal üzerinde prototip oluşturmalı ve tam bağımlılık ağaçlarını test etmelidir. ## Breaking Change: Native Modüllerde Namespace'ler React Native 0.87, native modüller için namespace'leri tanıtır. Modüller artık kütüphaneler arasındaki çakışmaları önlemek için benzersiz bir namespace bildirmelidir. Bu değişiklik, mevcut modüllerde native kod güncellemelerini gerektirir. ```typescript // NativeModule.ts import { TurboModuleRegistry } from 'react-native'; import type { TurboModule } from 'react-native'; export interface Spec extends TurboModule { multiply(a: number, b: number): number; } // 0.87'de namespace ile yeni sözdizimi export default TurboModuleRegistry.getEnforcing( 'com.myapp.MathModule' ); ``` Namespace formatı ters domain kuralını (`com.company.ModuleName`) takip eder. Namespace olmayan mevcut modüller çalışmaya devam eder, ancak kullanımdan kaldırma uyarıları oluşturur. ## Strict TypeScript API Varsayılan Standart Oluyor 0.86'da isteğe bağlı olarak tanıtılan Strict TypeScript API, 0.87'de varsayılan haline gelir. Bu değişiklik, native modüllerin ve bileşenlerin doğru tiplendirilmesini zorunlu kılar ve yaygın runtime hatalarını ortadan kaldırır. ```typescript // Önce: gevşek tiplendirme geçersiz props'ları kabul ediyordu // Sonra: Strict API doğru tipler gerektirir ``` Önceki sürümlerden geçiş yapan projeler TypeScript hatalarıyla karşılaşabilir. Çoğu, props'ları doğru tiplere güncelleyerek veya açık tip assertion'ları ekleyerek düzeltilebilir. ## Metro 0.87: İki Kat Daha Hızlı Source Maps Metro bundler 0.87 sürümünde önemli performans iyileştirmeleri sunar. Source map oluşturma, paralel işleme ve bellek optimizasyonları sayesinde artık iki kat daha hızlıdır. ```javascript // metro.config.js module.exports = { transformer: { // Metro 0.87'deki yeni seçenekler experimentalImportSupport: true, inlineRequires: true, }, resolver: { // Daha hızlı modül çözümlemesi unstable_enableSymlinks: true, unstable_enablePackageExports: true, }, }; ``` Büyük projeler için bu optimizasyonlar, release modunda build süresini birkaç dakika kısaltabilir. ## Yükseltilmiş Toolchain Gereksinimleri React Native 0.87, daha yeni araç sürümleri gerektirir: | Araç | Minimum Sürüm | |------|---------------| | Node.js | 22.x | | Kotlin | 2.0 | | Android compileSdk | 37 | | Xcode | 16.0 | | iOS Deployment Target | 15.1 | Güncelleme yapmadan önce CI ortamlarının ve geliştirici makinelerinin uyumluluğunu doğrulayın. ## Mülakat Soruları: React Native 0.87 ve SwiftPM Aşağıdaki sorular, en son React Native özellikleri hakkında mülakat hazırlığına yardımcı olur. ### Soru 1: React Native'de SwiftPM'e geçişin ana avantajları nelerdir? **Örnek Cevap:** Ana avantajlar, geliştirme ortamında ve CI pipeline'larında Ruby ve CocoaPods bağımlılığının ortadan kalkmasıdır. SwiftPM tabanlı bir proje build için yalnızca Xcode gerektirir. Ayrıca SwiftPM, Apple'ın yerleşik paket yöneticisidir, bu da iOS ekosistemiyle daha iyi entegrasyon ve potansiyel olarak daha hızlı bağımlılık çözümleme süreleri anlamına gelir. ### Soru 2: SwiftPM neden 0.87'de hala deneysel? **Örnek Cevap:** Deneysel durum üç ana sınırlamadan kaynaklanır: tüm topluluk kütüphaneleri henüz `Package.swift` dosyaları sunmuyor, komut API'si gelecek sürümlerde değişebilir ve dokümantasyon ile sorun giderme kaynakları sınırlıdır. React Native Ekibi, SwiftPM desteği kararlı hale gelene kadar production uygulamaları için CocoaPods'u önermektedir. ### Soru 3: SwiftPM'de otomatik bağlama CocoaPods ile karşılaştırıldığında nasıl çalışır? **Örnek Cevap:** CocoaPods modelinde, otomatik bağlama her bağımlılık değişikliğinden sonra `pod install` çalıştırmayı gerektirir. SwiftPM modelinde, otomatik bağlama Xcode build aşamasına entegredir - npm/yarn bağımlılık değişikliği, ek komutlar olmadan bir sonraki build sırasında otomatik olarak yeniden bağlamayı tetikler. İstisna, `npx react-native spm` komutunun bir kez çalıştırılması gereken taze klonlar ve CI ortamlarıdır. ### Soru 4: Strict TypeScript API mevcut projeler için ne anlama gelir? **Örnek Cevap:** Strict TypeScript API, bileşen props'larının ve native modül parametrelerinin doğru tiplendirilmesini zorunlu kılar. Mevcut projeler için bu, daha önce gizli olan tiplendirme sorunlarını ortaya çıkaran potansiyel TypeScript derleme hataları anlamına gelir. Çoğu hata, yanlış tipleri güncelleyerek veya açık assertion'lar ekleyerek düzeltilebilir. Bu bir breaking change'dir, ancak kod kalitesini iyileştirir ve runtime hatalarını azaltır. ### Soru 5: Namespace'ler native modül oluşturmayı nasıl etkiler? **Örnek Cevap:** 0.87 sürümünden itibaren, native modüller ters domain formatında benzersiz bir namespace bildirmelidir, örneğin `com.myapp.ModuleName`. Bu değişiklik, aynı adlı modüller tanımlayabilecek farklı kütüphaneler arasındaki ad çakışmalarını önler. Namespace olmayan mevcut modüller çalışmaya devam eder, ancak kullanımdan kaldırma uyarıları oluşturur ve bir sonraki major sürümden önce güncellenmelidir. ## 0.86'dan 0.87'ye Geçiş Geçiş süreci birkaç değişikliği dikkate almayı gerektirir: ```bash # Bağımlılıkları güncelle npm install react-native@0.87.0 # Native projeleri güncelle npx react-native upgrade # TypeScript uyumluluğunu doğrula npm run type-check ``` En yaygın geçiş sorunları, Strict API ile ilgili TypeScript hatalarını ve yeni namespace'leri destekleyen sürümlere native kütüphaneleri güncelleme ihtiyacını içerir. ## Sonuç React Native 0.87, iOS ekosisteminin modernizasyonunda önemli bir adımı temsil eder. Deneysel SwiftPM desteği, Ruby ve CocoaPods bağımlılıklarını ortadan kaldırarak araç zincirini basitleştirmenin yolunu açar. Strict TypeScript API, kod kalitesini ve tip güvenliğini iyileştirir. Metro iyileştirmeleri build sürecini hızlandırır. Benimseme planlayan ekipler için production projelerinde CocoaPods'ta kalmak, ayrı dallarda SwiftPM'i test etmek önerilir. Mülakat hazırlığı, bağımlılık yönetimi modelleri arasındaki farkları anlamayı ve yeni TypeScript özellikleriyle pratik deneyim kazanmayı içermelidir. --- Source: SharpSkill (https://sharpskill.dev), tech interview preparation for your real stack. HTML version of this page: https://sharpskill.dev/tr/blog/react-native/react-native-087-swiftpm-ios-build-interview-questions