TEST Expo SDK 56 Beta ile Neler Değişti? Geliştiriciler İçin Kapsamlı Rehber

Expo SDK 56 Beta ile Neler Değişti? Geliştiriciler İçin Kapsamlı Rehber
Expo SDK 56 Beta, React Native dünyasında hem performans hem de geliştirici deneyimi açısından önemli bir dönüm noktası. Bu sürüm, React Native 0.85.2 ve React 19.2.3 üzerine inşa ediliyor; Expo UI tarafında SwiftUI ve Jetpack Compose tabanlı API'leri stabilize ediyor, dosya sistemi, router, bundler ve native köprü (JSI) katmanında ciddi iyileştirmeler sunuyor. Bu yazıda, teknik ve teknik olmayan bakış açısıyla Expo SDK 56 Beta'nın neler getirdiğini, projelerinizi nasıl etkileyebileceğini ve adım adım nasıl deneyebileceğinizi ele alacağız. Geliştirme süreçlerini optimize etmek isteyen ekipler için Kompanse Yazılım benzeri profesyonel ekiplerin bu sürümü neden yakından takip ettiğini de göreceksiniz.
Expo SDK 56 Beta Nedir ve Neden Önemli?
SDK 56, yaklaşık iki haftalık bir beta dönemiyle yayınlanıyor ve bu süre boyunca hatalar, geriye dönük uyumsuzluklar ve performans sorunları toplu şekilde test ediliyor. Amaç, stabil sürüm çıkmadan önce farklı cihaz, işletim sistemi ve yapılandırmalarda gerçek hayat senaryolarını doğrulamak.
Öne çıkan temel başlıklar:
- React Native 0.85.2 ve React 19.2.3 entegrasyonu
- Expo UI için SwiftUI ve Jetpack Compose API'lerinin stabil hale gelmesi
- Yeni universal components ile Android, iOS ve web için tek kod tabanı
- Inline modules ile projeye gömülü native modül geliştirme kolaylığı
- Dosya sistemi (
expo-file-system) ve medya API'lerinde modern, nesne tabanlı yaklaşım - expo-router ile React Navigation bağımlılığının kaldırılması ve yeni router özellikleri
- Android ve iOS tarafında ciddi performans iyileştirmeleri (Kotlin compiler plugin, yeni JSI katmanı)
Teknik olmayan ekipler için bu değişiklikler; daha hızlı derlemeler, daha akıcı animasyonlar ve daha kararlı uygulamalar anlamına geliyor. Teknik ekipler içinse; daha okunabilir kod, daha az köprü (bridge) karmaşası ve native yetenekleri projeye entegre etmenin daha öngörülebilir yolları demek.
Expo UI: Universal Components, SwiftUI ve Jetpack Compose
SDK 56'nın en güçlü taraflarından biri, Expo UI'nin artık üretim için çok daha hazır hale gelmesi. Üç ana odak alanı var:
- Evrensel (universal) bileşenler
- Stabil native API'ler (SwiftUI & Jetpack Compose)
- Popüler React Native kütüphaneleri için drop-in replacement bileşenler
Universal Components ile Tek Kod Tabanı
Universal components, Android, iOS ve web'de aynı bileşenleri kullanmanızı sağlıyor. Örneğin, Row, Column, ScrollView, Text, TextInput, Button, Switch, Slider, Checkbox ve BottomSheet gibi temel bileşenler artık platformlar arasında ortak bir API üzerinden yönetilebiliyor.
Bunun iş değeri tarafındaki karşılığı; tasarım ekiplerinin tek bir tasarım sistemi üzerinden ilerleyebilmesi, geliştirme ekiplerinin ise .android.tsx ve .ios.tsx gibi dosya ayrımlarını daha az yapmak zorunda kalması.
SwiftUI ve Jetpack Compose API'lerinin Stabil Olması
Expo UI, SwiftUI (iOS) ve Jetpack Compose (Android) ile daha sıkı hizalanarak geliştiricilerin native dokümantasyondan doğrudan faydalanmasını amaçlıyor. Artık:
- Kendi SwiftUI ve Compose görünümlerinizi Expo UI ile genişletebiliyorsunuz.
react-native-workletsve native state (ObservableObject,MutableState) ile senkron animasyon ve form deneyimleri geliştirebiliyorsunuz.useNativeStatehook'u ile JavaScript'ten native state'i doğrudan yönetebiliyorsunuz.
Örneğin, iOS tarafında SwiftUI ile tanımladığınız bir bileşenin TypeScript arayüzünün otomatik üretilmesi, hem native hem JS tarafında tip güvenliğini artırıyor.
Drop-in Replacement Bileşenler: Kütüphane Karmasını Azaltmak
Expo UI, bazı popüler React Native kütüphaneleri için birebir (veya çok yakın) API sunan bileşenler getiriyor. Örneğin, tarih seçici için:
// Önceki kullanım
import DateTimePicker from '@react-native-community/datetimepicker';
// SDK 56 ile drop-in replacement
import DateTimePicker from '@expo/ui/community/datetime-picker';
Benzer şekilde aşağıdaki kütüphaneler için de Expo UI tarafında alternatifler var:
@react-native-segmented-control/segmented-control@react-native-picker/picker@react-native-masked-view/masked-view@gorhom/bottom-sheet
Bu yaklaşım, özellikle orta ve büyük ölçekli projelerde kütüphane sayısını azaltarak bakım maliyetlerini düşürüyor. Kompanse Yazılım gibi ajans yapısında çalışan ekipler için bu, her müşteri projesinde daha az bağımlılık yönetimi anlamına gelir.
Inline Modules: Native Kodla Aynı Projede Çalışmak
SDK 56 ile gelen inline modules özelliği, Expo modüllerini doğrudan proje yapınızın içinde, JavaScript/TypeScript dosyalarınızla yan yana tanımlamanıza izin veriyor. Yani ayrı bir repo veya karmaşık build ayarlarıyla uğraşmadan Kotlin ve Swift dosyaları açıp native modüller yazabiliyorsunuz.
Öne çıkan avantajlar:
- Prebuild sırasında iOS ve Android projeleri otomatik güncelleniyor.
- CLI tabanlı tip üretim araçları sayesinde Swift/Kotlin tarafındaki API'ler için TypeScript arayüzleri otomatik oluşturuluyor.
- Android Studio, Xcode veya favori IDE'nizle aynı proje üzerinden geliştirme yapabiliyorsunuz.
Bu, “React Native ile yapamıyoruz, native yazalım” noktasına geldiğinizde bile Expo ekosisteminden çıkmadan çözüm üretebilmenizi sağlıyor.
create-expo-module Yeniden Tasarlandı
create-expo-module aracı, SDK 56 ile daha modüler ve esnek hale geldi:
- Yeni
addPlatformSupportkomutu ile var olan bir modüle Android veya iOS desteğini sonradan ekleyebiliyorsunuz. - Modüler şablon sayesinde hangi özelliklerin scaffold edileceğini seçebiliyorsunuz.
- Non-interactive modda daha iyi varsayılanlar ve loglama sunuluyor.
- Windows desteği iyileştirildi.
Kurumsal projelerde, şirket içi SDK'larınızı Expo modülleri olarak paketlemek istiyorsanız bu araç, süreci oldukça hızlandırıyor.
Performans İyileştirmeleri: Android ve iOS Tarafında Neler Değişti?
Android: Kotlin Compiler Plugin ile Hızlı Başlangıç
Expo Modules için yeni Kotlin compiler plugin, reflection tabanlı metadata toplama işlemini build zamanına taşıyor. Bu sayede:
- Soğuk başlangıçlarda yaklaşık %40 hızlanma
- İlk render süresinde yaklaşık %33 iyileşme
Uygulama tarafında ekstra bir değişiklik yapmanıza gerek yok; modülleriniz bu yeni mekanizmadan otomatik faydalanıyor.
iOS: Yeni JSI Katmanı ile Daha Az Köprü Geçişi
iOS tarafında, JavaScript'ten native modüllere çağrı yaparken kullanılan Objective-C++ katmanı kaldırıldı ve Swift/C++ interop ile doğrudan JSI'a bağlanıldı. Sonuç:
- Daha az dil sınırı (JavaScript → Swift/C++)
- Daha düşük çağrı overhead'i
- Daha sade ve bakımı kolay bir native kod tabanı
Özellikle sık sık native modül çağrısı yapan uygulamalarda (örneğin yoğun dosya işlemleri, sensör verileri, medya oynatıcılar) bu fark hissedilir düzeyde.
expo-file-system ve Dosya İşlemleri: Modern API
SDK 56 ile expo-file-system tarafında hem işlevsel hem de ergonomik iyileştirmeler var. File.downloadFileAsync() artık indirme ilerlemesini raporlayabiliyor ve AbortSignal desteği sunuyor. Ayrıca, copy ve move işlemleri için overwrite seçeneği eklendi.
Yeni task tabanlı API'ler:
file.createUploadTask()File.createDownloadTask()
Bu API'ler, uzun süren indirme/yükleme işlemlerinde durdurma, devam ettirme ve ilerleme takibi gibi senaryoları kolaylaştırıyor. Basit senaryolar için File.upload() gibi daha sade yardımcılar da mevcut.
Örnek: İndirme Görevi ile İlerleme Takibi
import { File } from 'expo-file-system';
async function downloadWithProgress(url, destUri) {
const downloadTask = File.createDownloadTask(
url,
destUri,
{},
(progressEvent) => {
const progress =
progressEvent.totalBytesWritten / progressEvent.totalBytesExpectedToWrite;
console.log(`İlerleme: ${(progress * 100).toFixed(2)}%`);
}
);
try {
const result = await downloadTask.downloadAsync();
console.log('İndirme tamamlandı:', result.uri);
} catch (e) {
console.error('İndirme hatası:', e);
}
}
Bu tarz bir yapı, özellikle büyük medya dosyalarıyla çalışan uygulamalarda kullanıcı deneyimini ciddi şekilde iyileştirir.
expo-status-bar ve expo-navigation-bar: Bileşen Bazlı Yönetim
Hem expo-status-bar hem de expo-navigation-bar, artık aynı prop yüzeyine sahip React bileşenleri sunuyor ve birden fazla örnek mount edildiğinde mount sırasına göre birleştiriliyor.
import { useEffect } from 'react';
import { StatusBar } from 'expo-status-bar';
import { NavigationBar } from 'expo-navigation-bar';
export default function App() {
useEffect(() => {
StatusBar.setStyle('auto');
StatusBar.setHidden(false);
NavigationBar.setStyle('auto');
NavigationBar.setHidden(false);
}, []);
return (
<>
<StatusBar style="auto" hidden={false} />
<NavigationBar style="auto" hidden={false} />
</>
);
}
Ayrıca her iki paket için de config plugin seçenekleri hizalanmış durumda; böylece app.json veya app.config.js üzerinden tutarlı bir yapılandırma yapabiliyorsunuz.
Takvim, Medya ve Rehber API'leri: Nesne Tabanlı Yeni Nesil Yapı
expo-calendar, expo-media-library ve expo-contacts için *-next olarak bilinen yeni API'ler artık stabil. Bu yeni API'ler:
- Nesne tabanlı (OO) bir yapı sunuyor.
- Ağır nesneleri tamamen çekmek yerine, ihtiyacınız olan alanları seçerek getirmenize izin veriyor.
- Builder pattern ile daha okunabilir sorgulama ve filtreleme sağlıyor.
Bu, özellikle büyük medya kütüphaneleri veya geniş rehber listeleriyle çalışan uygulamalarda performans ve bellek kullanımını önemli ölçüde iyileştiriyor.
Expo Widgets: iOS İçin Widget ve Live Activity Geliştirme
SDK 55 ile alfa olarak tanıtılan Expo Widgets, SDK 56'da stabil hale geldi. Artık:
- Widget ve Live Activities, React context'e tam erişime sahip.
- Önceden render etme zorunluluğu ortadan kalktı.
- Zaman çizelgesi yönetimi, hata işleme ve plugin yapılandırmaları iyileştirildi.
Örneğin, canlı skor, teslimat takibi veya anlık durum gösteren mini arayüzler geliştirmek çok daha kolay hale geliyor.
expo-router ve React Navigation Ayrılığı
Expo ekosisteminde uzun süredir önemli bir yer tutan React Navigation ile ilişki SDK 56'da yeniden tanımlanıyor. Expo Router artık React Navigation üzerine inşa edilmiyor; bunun yerine, gerekli kısımlarını fork ederek kendi yoluna devam ediyor.
Sonuç olarak:
expo-routerve@react-navigation/*paketlerini aynı projede kullanmak çoğu durumda sorunlu hale gelebilir.- Expo, bu kombinasyonu tespit etmek için
expo-doctoriçine bir kontrol ekledi. - Mevcut projeleri dönüştürmek için
npx expo-codemod sdk-56-expo-router-react-navigation-replacekomutu sunuluyor.
Yeni projelerde, dosya tabanlı routing yaklaşımıyla Expo Router kullanmak, özellikle büyük ekran hiyerarşilerine sahip uygulamalarda yönlendirmeyi daha öngörülebilir hale getiriyor.
Bundler, TypeScript ve Geliştirme Deneyimi İyileştirmeleri
SDK 56, geliştirme ortamında da pek çok iyileştirme getiriyor:
- Daha hızlı bundler warmup:
expo startile sunucunun ayağa kalkma süresi kısaltıldı, özellikle monorepo ortamlarında %30'a varan iyileşmeler görülebiliyor. - watchFolders-free Metro denemesi:
watchFolders'a bağımlılığı azaltarak pnpm ve bun gibi global store kullanan paket yöneticileriyle daha iyi entegrasyon sağlanıyor. - Native Node.js watcher varsayılan hale geldi; Watchman opsiyonel.
- TypeScript 6 desteği ve TypeScript 7 için hazırlık; modül çözümlemesi ve
tsconfig.json pathsile ilgili monorepo sorunları azaltıldı. import.metadesteği ve Hermes v1 için optimize edilmiş transform seti ile daha hızlı bundle oluşturma.
Bu değişiklikler, günlük geliştirme döngüsünde bekleme sürelerini azaltarak ekiplerin daha çok iş mantığına, daha az build sorunlarına odaklanmasını sağlıyor.
Brownfield Senaryoları: Mevcut Native Uygulamaya Expo Gömme
SDK 55 ile gelen brownfield desteği, SDK 56'da daha da güçleniyor. Artık:
- Aynı host uygulama içinde birden fazla izole Expo uygulaması çalıştırılabiliyor.
- Host uygulama, kendi Turbo Module sınıflarını içteki Expo uygulamasına kayıt edebiliyor.
- iOS tarafında React Native framework'leri varsayılan olarak prebuilt kullanılıyor; bu da build sürelerini ciddi oranda kısaltıyor.
Bu, büyük kurumsal yapılarda, mevcut native uygulamaya parça parça React Native/Expo ekranları eklemek isteyen ekipler için oldukça kritik bir yetenek.
Diğer Önemli Değişiklikler ve Dikkat Edilmesi Gerekenler
- Hermes V1 artık varsayılan JavaScript motoru. Daha hızlı açılış ve daha düşük bellek kullanımı sunuyor.
- Metro artık HTTPS (TLS) destekliyor; güvenli yerel geliştirme ortamları oluşturmak daha kolay.
- Minimum Xcode sürümü 26.4, minimum iOS/tvOS 16.4, macOS 13.4 olarak güncellendi; bazı eski cihazlar artık destek dışı.
@expo/vector-iconsyerine@react-native-vector-icons/*paketlerine geçiş teşvik ediliyor; bunun için resmi bir codemod mevcut.expo/fetch,globalThis.fetchiçin varsayılan uygulama haline geldi; daha performanslı ve WinterTC uyumlu bir API sunuyor.expo-file-systemiçindekicopy()vemove()metodları asenkron hale geldi; senkron davranış içincopySync()vemoveSync()kullanılmalı.
SDK 56 Beta ile Yeni Proje Başlatma ve Mevcut Projeyi Yükseltme
Yeni Proje Başlatma
SDK 56 Beta ile yeni bir proje başlatmak için:
# npm
npx create-expo-app@latest --template default@next
# bun
bun create expo-app --template default@next
# pnpm
pnpm create expo-app --template default@next
# yarn
yarn create expo-app --template default@next
Kullandığınız komuta göre ilgili paket yöneticisi otomatik seçilir.
Mevcut Projeyi SDK 56 Beta'ya Yükseltme
- Tüm bağımlılıkları SDK 56 ile hizalayın:
npx expo install expo@next --fix
- iOS için kendi Expo modülleriniz varsa
.podspeciçindeki deployment target'ı güncelleyin:
- s.platforms = { :ios => '15.1' }
+ s.platforms = { :ios => '16.4' }
- Native projeyi temizleyip yeniden oluşturun ve test edin:
npx expo prebuild --clean
npm run ios
npm run android
Yükseltme sürecinde karşılaştığınız sorunları, minimal bir örnekle birlikte Expo'nun issue takip sistemine bildirmeniz, stabil sürüm öncesi ekosistemin olgunlaşmasına katkı sağlar.
Sonuç: Expo SDK 56 Beta'ya Geçmeli misiniz?
SDK 56 Beta, özellikle aşağıdaki profiller için oldukça cazip:
- Performans ve açılış süreleri kritik olan uygulamalar
- Tek kod tabanından Android, iOS ve web hedefleyen projeler
- Widget, Live Activity, medya ve rehber entegrasyonu yoğun olan ürünler
- Mevcut native uygulamaya parça parça React Native/Expo eklemek isteyen kurumsal ekipler
Üretim ortamına geçmeden önce, beta sürümü staging veya test ortamlarında deneyip geriye dönük uyumluluk, performans ve cihaz kapsamını mutlaka doğrulamalısınız. Deneyimli bir ekip veya Kompanse Yazılım gibi Expo/React Native konusunda uzman bir partnerle çalışmak, özellikle büyük ölçekli projelerde geçiş risklerini önemli ölçüde azaltacaktır.
Özetle, Expo SDK 56 Beta; UI, performans, dosya sistemi, router ve native entegrasyon tarafında önemli bir sıçrama sunuyor. Doğru planlama ve test süreciyle, bu yeniliklerden erken faydalanmak projelerinize hem teknik hem iş değeri tarafında ciddi avantajlar sağlayabilir.