Mobilde "on-device AI" iki farklı ekosistem demek: Android'de Google'ın Gemini Nano modeli (AICore + ML Kit GenAI API'leri), iOS'ta ise Apple'ın kendi Foundation Models framework'ü (Apple Intelligence'ın parçası). İkisi aynı model değil, aynı SDK'yı da paylaşmıyor — ama ikisi de aynı sorunu çözüyor: cihazda, internete veri göndermeden, düşük gecikmeli LLM çıkarımı. Bu yazı her iki platformun gerçek API'lerini, Flutter/React Native'de bunları nasıl birleştirebileceğini ve pratik kullanım senaryolarını kapsıyor.
💡 Pro Tip: On-device AI, verinin cihazdan çıkmadan işlenmesi demek — sağlık, finans, kişisel mesajlaşma gibi hassas verilerde önemli bir tercih sebebi. Karşılığında cloud modellere göre daha küçük/daha az yetenekli bir model kullanmış oluyorsun; bu yüzden çoğu production sistem "basit görev cihazda, karmaşık görev cloud'da" şeklinde hybrid çalışıyor.
İçindekiler
- Gemini Nano Nedir
- Android: AICore ve ML Kit GenAI API'leri
- iOS: Apple Foundation Models
- Flutter'da Platform Channel Yaklaşımı
- React Native'de Native Module Yaklaşımı
- Model Boyutları: Nano-1 ve Nano-2
- Cihaz Gereksinimleri
- On-Device vs Cloud: Ne Zaman Hangisi
- Use Case'ler
- Sonuç
Gemini Nano Nedir
Gemini Nano, Google'ın Gemini model ailesinin en küçük, cihaz üzerinde çalışacak şekilde tasarlanmış üyesi. Google'ın Gemini 1.0 teknik raporuna göre iki boyutta eğitildi: Nano-1 (1.8B parametre) ve Nano-2 (3.25B parametre), sırasıyla düşük ve yüksek bellekli cihazlar hedeflenerek. Model, daha büyük Gemini modellerinden distillation ile türetilip 4-bit quantization ile cihaza sığacak hale getiriliyor.
Önemli bir nokta: Gemini Nano yalnızca Android'de, Android'in AICore sistem servisi üzerinden çalışıyor. Google'ın iOS için resmi bir Gemini Nano SDK'sı yok; iOS'ta cihaz-içi LLM çıkarımının resmi yolu Apple'ın kendi Foundation Models framework'ü (aşağıda detaylı).
Android: AICore ve ML Kit GenAI API'leri
Gemini Nano, Android'de AICore sistem servisinin içinde çalışır; model dağıtımını, güncellemelerini ve güvenlik filtrelemesini AICore yönetir, input/output verisi cihazda kalır. Uygulamalar modele iki yoldan biriyle erişir: ML Kit GenAI API'leri (Summarization, Proofreading, Rewriting, Image Description ve genel amaçlı Prompt API resmi olarak Beta aşamasında, Speech Recognition ise Alpha — henüz GA değil) ya da daha düşük seviyeli, deneysel Google AI Edge SDK. Pratikte çoğu uygulama ML Kit GenAI'yi kullanıyor. Örnek: metin özetleme.
1// build.gradle (app)2dependencies {3 implementation("com.google.mlkit:genai-summarization:1.0.0-beta1")4 implementation("org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.10.2")5}1import com.google.mlkit.genai.summarization.Summarization2import com.google.mlkit.genai.summarization.SummarizationRequest3import com.google.mlkit.genai.summarization.SummarizerOptions4import com.google.mlkit.genai.common.FeatureStatus5import kotlinx.coroutines.guava.await6 7class SummarizationService(context: Context) {8 private val options = SummarizerOptions.builder(context)9 .setInputType(SummarizerOptions.InputType.ARTICLE)10 .setOutputType(SummarizerOptions.OutputType.ONE_BULLET)11 .setLanguage(SummarizerOptions.Language.ENGLISH)12 .build()13 14 private val summarizer = Summarization.getClient(options)15 16 suspend fun summarize(text: String): String {17 // UNAVAILABLE / DOWNLOADABLE / DOWNLOADING / AVAILABLE18 val status = summarizer.checkFeatureStatus().await()19 if (status == FeatureStatus.UNAVAILABLE) return ""20 21 val request = SummarizationRequest.builder(text).build()22 return summarizer.runInference(request).get().summary23 }24 25 fun close() = summarizer.close()26}checkFeatureStatus() ListenableFuture döndüğü için .await() uzantısını kotlinx-coroutines-guava paketinden almak gerekiyor (gms Task için kullanılan kotlinx-coroutines-play-services burada işe yaramaz). checkFeatureStatus() her zaman kontrol edilmeli: model cihazda henüz indirilmemiş olabilir (DOWNLOADABLE), indiriliyor olabilir (DOWNLOADING) ya da cihaz hiç desteklemiyor olabilir (UNAVAILABLE). AICore modeli tüm uygulamalar arasında paylaşır, yani her uygulama kendi kopyasını indirmek zorunda değil. Yukarıdaki örnek sadeleştirilmiş: production'da DOWNLOADABLE durumunda doğrudan runInference çağırmak yerine, Google'ın resmi örneğindeki gibi summarizer.downloadFeature(callback) ile indirmeyi açıkça başlatıp onDownloadStarted/onDownloadProgress/onDownloadCompleted callback'leriyle kullanıcıya ilerleme göstermek önerilen yöntem.
iOS: Apple Foundation Models
iOS'ta Google'ın değil, Apple'ın kendi modeli devrede: Foundation Models framework'ü, WWDC 2025'te duyuruldu ve iOS 26 ile geliştiricilere açıldı. Bu, Gemini Nano'nun iOS portu değil — tamamen ayrı, Apple'ın kendi eğittiği model.
1import FoundationModels2 3func summarize(_ text: String) async throws -> String? {4 let model = SystemLanguageModel.default5 6 switch model.availability {7 case .available:8 break9 case .unavailable:10 return nil // Cihaz desteklemiyor ya da Apple Intelligence kapalı11 }12 13 let session = LanguageModelSession {14 "Sen metinleri 2 cümlede özetleyen bir asistansın."15 }16 17 let response = try await session.respond(to: text)18 return response.content19}SystemLanguageModel.default.availability kontrolü zorunlu — model yalnızca Apple Intelligence açık ve desteklenen cihazlarda kullanılabilir; aksi halde .unavailable dönüyor ve fallback (cloud API ya da özelliği gizleme) gerekiyor.
Flutter'da Platform Channel Yaklaşımı
Bu yazının yayın tarihinde iki platformu birden saran resmi bir Flutter paketi yok. Gerçek yol: MethodChannel ile native tarafa (Android: Kotlin + ML Kit GenAI, iOS: Swift + Foundation Models) inmek:
1// lib/on_device_ai.dart2import 'package:flutter/services.dart';3 4class OnDeviceAI {5 static const _channel = MethodChannel('on_device_ai');6 7 Future<String?> summarize(String text) async {8 try {9 return await _channel.invokeMethod<String>('summarize', {'text': text});10 } on PlatformException {11 return null; // Cihaz desteklemiyor -> cloud fallback'e düş12 }13 }14}Native handler Android'de yukarıdaki SummarizationService'i, iOS'ta FoundationModels çağrısını sarmalıyor. Cloud fallback için Firebase AI Logic'in resmi Flutter paketi kullanılabilir (eski google_generative_ai paketi pub.dev'de deprecated işaretli, yerine bu öneriliyor):
1# pubspec.yaml — cloud fallback (Gemini API, on-device değil)2dependencies:3 firebase_ai: ^3.11.04 firebase_core: ^4.7.0React Native'de Native Module Yaklaşımı
Bu yazının yayın tarihinde (18 Nisan 2026) iki platformu birden saran hazır bir React Native paketi yoktu (sonraki gelişme için Güncelleme bölümüne bak). Aynı sonucu almanın yolu kendi Native Module / Turbo Module'ünü yazmak:
1// NativeOnDeviceAI.ts — Turbo Module spec2import type { TurboModule } from "react-native";3import { TurboModuleRegistry } from "react-native";4 5export interface Spec extends TurboModule {6 summarize(text: string): Promise<string | null>;7}8 9export default TurboModuleRegistry.getEnforcing<Spec>("OnDeviceAI");Native tarafta Android implementasyonu ML Kit GenAI'yi, iOS implementasyonu FoundationModels'ı sarmalar — Flutter örneğindeki gibi. Tek bir "Gemini Nano" API'si yok; iki farklı native API'yi ortak arayüz arkasında birleştiriyorsun.
Model Boyutları: Nano-1 ve Nano-2
Varyant | Parametre | Hedef |
|---|---|---|
Nano-1 | 1.8B | Düşük bellekli cihazlar |
Nano-2 | 3.25B | Yüksek bellekli cihazlar |
Bu rakamlar Google'ın Gemini 1.0 teknik raporunda (Aralık 2023) açıklandı. Hangi cihazda hangi varyant koştuğu dokümante edilmiyor — checkFeatureStatus() en güvenilir kontrol yöntemi.
Cihaz Gereksinimleri
Android
ML Kit GenAI API'leri, destek listesi sürekli genişleyen bir cihaz seti üzerinde çalışıyor; Google, ML Kit GenAI dokümantasyonunda özellik bazında resmi cihaz listeleri yayımlıyor (Summarization/Proofreading/Rewriting/Image Description ve Prompt API için ayrı listeler), ayrıca özelliğin "cihazın donanımına ve o cihaza indirilmiş modellere göre" değişebileceğini belirtip checkFeatureStatus() ile çalışma zamanında kontrol edilmesini öneriyor (API ayrıca Android 8.0 / API 26+ ve kilidi açılmamış bootloader gerektiriyor). Liste zamanla genişlediği için onu ezbere almak yerine her zaman bu runtime kontrolüne güvenmek daha doğru.
iOS
Apple Intelligence / Foundation Models, Apple Silicon Neural Engine gerektiriyor:
- iPhone 15 Pro / Pro Max (A17 Pro) ve sonrası
- iPhone 16 serisi (A18) ve sonrası
- iPad (M1 ve üstü çip; ayrıca iPad mini, A17 Pro çip)
- Mac (Apple Silicon, M1 ve üstü)
Desteklenmeyen cihazlarda SystemLanguageModel.default.availability değeri .unavailable dönüyor; kodun bunu kontrol edip cloud fallback'e geçmesi gerekiyor.
On-Device vs Cloud: Ne Zaman Hangisi
Gemini Nano / Foundation Models ile cloud modelleri (Gemini Flash/Pro, GPT vb.) aynı eksende karşılaştıran resmi bir Google/Apple benchmark tablosu yok — bu yüzden burada yüzde ya da latency rakamı verilmiyor. Genel trade-off: on-device ücretsiz, offline, veri cihazdan çıkmıyor, ama küçük model olduğu için karmaşık akıl yürütmede ve uzun bağlamda cloud'un gerisinde kalıyor; cloud daha güçlü ama maliyetli, internet gerektiriyor, veri sunucuya gidiyor. Karar vermeden önce kendi use case'in için gerçek bir kalite testi yapmak, genel ifadelere güvenmekten daha doğru.
Use Case'ler
- On-Device Chat Özeti — mesajlaşma geçmişinden özet çıkarma, cloud'a göndermeden. Privacy-sensitive uygulamalar için uygun.
- Offline Çeviri — network olmadığında (uçak, zayıf sinyal) çalışan çeviri.
- Content Moderation — kullanıcı içeriğini sunucuya göndermeden cihazda ön-tarama (spam/toxic tespiti).
- Smart Reply / Yazım Önerisi — ML Kit GenAI'nin Rewriting/Proofreading API'leri ve Apple'ın yazma araçları bu kategoriye giriyor.
- Görsel Açıklama — ML Kit GenAI'nin "Image Description" API'si, erişilebilirlik amaçlı görsel açıklama üretimi için tasarlandı.
- Fiş/Belge Anlama — fiş, kartvizit, belge gibi görsel içerikten yapılandırılmış veri çıkarımı.
ALTIN İPUCU
Bu yazının en değerli bilgisi
Bu ipucu, yazının en önemli çıkarımını içeriyor.
Easter Egg
Gizli bir bilgi buldun!
Bu bölümde gizli bir bilgi var. Keşfetmek ister misin?
Okuyucu Ödülü
Aşağıdaki örnek gerçek bir paket değil; Android (ML Kit GenAI) ve iOS (Foundation Models) native implementasyonlarını ortak bir arayüz arkasında nasıl birleştirebileceğini gösteren bir iskelet:
// shared/ai-service.ts — ortak arayüz, native taraf platforma göre değişirinterface AIService { isAvailable(): Promise<boolean>; summarize(text: string): Promise<string | null>;} class HybridAIService implements AIService { async isAvailable(): Promise<boolean> { try { return await NativeOnDeviceAI.isAvailable(); } catch { return false; } } async summarize(text: string): Promise<string | null> { if (await this.isAvailable()) { return NativeOnDeviceAI.summarize(text); } // Cloud fallback — kendi backend'in ya da resmi Gemini API SDK'sı üzerinden return CloudGemini.generate({ prompt: `Summarize: ${text}` }); }} export const ai = new HybridAIService();NativeOnDeviceAI, yukarıdaki Turbo Module spec'ini native tarafta implemente eden senin kendi kodun — hazır bir paket değil.
External Resources:
Sonuç
Gemini Nano ve Apple'ın Foundation Models'ı, aynı problemi (cihazda, offline, privacy-first LLM çıkarımı) iki ayrı model ve iki ayrı API ile çözüyor. Android'de bu iş AICore + ML Kit GenAI API'leri üzerinden, iOS'ta Apple'ın kendi Foundation Models framework'ü üzerinden yürüyor. Cross-platform (Flutter/React Native) bir uygulama yazıyorsan, tek bir "Gemini Nano her yerde çalışır" paketi aramak yerine, iki native implementasyonu kendi platform channel/native module katmanında birleştirmen gerekiyor.
Güncelleme (Ekim 2026)
react-native-gemini-nanonpm paketi ilk kez 19 Mayıs 2026'da yayımlandı (bu yazıdan sonra), güncel sürüm 0.1.10, kendini "Android & iOS Turbo Module" olarak tanımlıyor. iOS tarafında gerçekte çalışan model Gemini Nano değil Apple'ın Foundation Models'ı olmalı (resmi bir Gemini Nano iOS SDK'sı hâlâ yok) — kullanmadan önce iOS implementasyonunu kaynak koddan doğrula.- Android'de ML Kit GenAI'nin desteklediği cihaz listesi genişlemeye devam ediyor (yeni Pixel/Galaxy nesilleri dahil). Üretimde listeyi ezbere yazmak yerine
checkFeatureStatus()'a güven.
İlgili yazılar: Gemini 2.5 Pro, AI iOS Features, Firebase AI Logic.
Etiketler
iOS Geliştirme Haberleri
Haftalık Swift tips, SwiftUI tricks ve iOS best practices. Spam yok, sadece değerli içerik.
Onay e-postasındaki bağlantıyı açıp “Aboneliğimi onayla” düğmesine bastığında aboneliğin başlar. Bültende açılma/tıklama istatistikleri tutulur; dilediğin an tek tıkla ayrılabilirsin. Gizlilik
