Yapay zeka ile mobil uygulama yapmanın en kısa yolu, bir kodlama ajanına React Native ve Expo ile proje kurdurmak, kodu Expo Go ile kendi telefonunda anında denemek ve backend için Supabase ya da Firebase gibi hazır bir servis kullanmaktır. Ekranları, veriyi ve girişi ajan yazar; sen telefonda test eder, hataları ona geri verir ve mağaza adımlarını yürütürsün. Yayın için Apple ve Google’ın geliştirici hesapları ve inceleme süreçleri ayrıca gerekiyor.
Bu yazıda sıfırdan mağazaya giden yolu adım adım anlatıyorum: hangi teknolojiyi neden seçtiğimi, ajana verdiğim ilk istemi, telefonda nasıl test ettiğimi, giriş ve bildirimleri, yayını ve ajanların en çok nerede tökezlediğini.
Önce gerçekçi beklenti
Vibe coding ile web sitesi yapmak ile mobil uygulama yapmak arasında bir fark var: web’de kod çalışıyorsa iş biter, mobilde ise kodun üstünde bir de platform katmanı vardır. Derleme araçları, imzalama sertifikaları, izinler, mağaza kuralları. Ajan kodun büyük kısmını rahatça yazar; platform tarafında ise senin gözün ve elin gerekiyor.
İyi haber şu: doğru araçları seçersen platform katmanının çoğunu ilk haftalarda hiç görmezsin.
Hangi teknoloji: Expo, Flutter ya da native
Üç ana yol var.
| Seçenek | Dil | Neden seçilir | Dikkat |
|---|---|---|---|
| React Native + Expo | TypeScript | Expo Go ile telefonda anında deneme, bulut derleme, ajanların en çok örnek gördüğü dil | Özel native kütüphanelerde Expo Go yetmez, geliştirme derlemesi gerekir |
| Flutter | Dart | Tek kod tabanı, tutarlı görünüm, güçlü araçlar | Dart’a daha az örnek var; telefonda deneme için de yerel kurulum gerekir |
| Native (Swift / Kotlin) | Swift, Kotlin | Platformun tüm imkanları, en iyi performans | İki ayrı uygulama, Xcode ve Android Studio şart |
Yeni başlayan biri için önerim net: React Native + Expo. Sebebi teknik üstünlükten çok geri bildirim hızı. Ajan bir şeyi değiştirir, sen telefonu sallamadan ekranda görürsün. Bu döngü ne kadar kısaysa vibe coding o kadar iyi işler.
Flutter da kötü bir seçim değil; Dart biliyorsan ya da ekipte Flutter varsa onunla git. Native ise ancak kamera işleme, ağır grafik ya da derin platform entegrasyonu gibi bir gerekçen varsa mantıklı.
Adım 1: Kurulum
İhtiyacın olanlar:
- Node.js (LTS sürümü) ve bir paket yöneticisi
- Bir kodlama ajanı: Claude Code, Codex, Gemini CLI ya da benzeri bir kodlama ajanı
- Telefonuna Expo Go (App Store ya da Google Play’den)
- Git: ajanın her adımını geri alabilmek için
Projeyi kendin başlatmanı öneririm; ajanın sıfırdan iskelet kurması bazen eski şablonlarla sonuçlanıyor:
npx create-expo-app@latest gunluk
cd gunluk
git init && git add -A && git commit -m "ilk iskelet"
npx expo start
Terminalde bir QR kod çıkar. iPhone’da kamerayla, Android’de Expo Go içinden okutursun; uygulama telefonunda açılır. Bilgisayar ve telefon aynı Wi‑Fi ağında olmalı. Ağ sorun çıkarırsa npx expo start --tunnel dene.
Adım 2: Ajana ilk istem
İlk istem, ajanın sonraki tüm kararlarını şekillendirir. Belirsiz bırakırsan kendi tercihleriyle doldurur. Şuna benzer bir şey yazıyorum:
Bu bir Expo (React Native, TypeScript) projesi. Basit bir alışkanlık
takip uygulaması yapıyoruz.
Ekranlar:
1. Bugün: alışkanlık listesi, her birinin yanında tamamla düğmesi
2. Ekle: ad ve günlük hedef ile yeni alışkanlık
3. Geçmiş: son 30 günün takvim görünümü
Kurallar:
- Gezinme için expo-router kullan, mevcut app/ klasörüne uy.
- Şimdilik veriyi cihazda tut (AsyncStorage). Backend sonra gelecek.
- Paket eklerken npx expo install kullan, npm install değil.
- Expo Go'da çalışmayan native paket ekleme; gerekirse önce sor.
- Her adımdan sonra npx tsc --noEmit çalıştır ve hataları düzelt.
- Bitirince değiştirdiğin dosyaları listele.
İki satır özellikle önemli. npx expo install, paketi Expo SDK sürümüne uygun sürümle kurar; ajanlar bunu sık sık atlar. “Expo Go’da çalışmayan paket ekleme” kuralı da seni erkenden native derleme dünyasına düşmekten korur.
Adım 3: Telefonda test ve yineleme
npx expo start çalışırken ajan dosyaları değiştirdikçe uygulama telefonda kendiliğinden yenilenir. Döngü şöyle:
- Telefonda dene, neyin yanlış olduğunu not al.
- Ajana somut yaz: “Ekle ekranında klavye kaydet düğmesini kapatıyor, iPhone’da.”
- Kırmızı hata ekranı çıktıysa metni olduğu gibi kopyala ve ajana yapıştır. Ekran görüntüsü de verebilirsin; çoğu ajan görsel okuyabiliyor.
- Çalışan her adımı commit et.
Hem iOS hem Android’de dene. Aynı kod iki platformda farklı davranabilir: güvenli alan boşlukları, klavye davranışı, geri tuşu, gölgeler. Elinde tek telefon varsa bilgisayarda Android emülatörü ya da (Mac’te) iOS simülatörü kullan.
Adım 4: Backend: Supabase ya da Firebase
Veriyi cihazlar arasında paylaşmak ve kullanıcı hesabı açmak istediğinde bir backend gerekir. Kendi sunucunu yazmak yerine hazır bir servis seç:
- Supabase: PostgreSQL tabanlı. Veritabanı, giriş, dosya depolama ve gerçek zamanlı güncellemeler. SQL bildiğin ya da sonradan bilmek istediğin bir yapı.
- Firebase: Google’ın servisi. Firestore belge veritabanı, giriş, bildirimler. Mobil ekosistemle sıkı entegre.
Ajana tek seferde değil, katman katman yaptır:
Supabase'e geçiyoruz. Önce sadece şunu yap:
1. supabase/migrations altında habits ve completions tablolarını
oluşturan bir SQL dosyası yaz. Her satırda user_id olsun.
2. İki tabloda da Row Level Security aç; kullanıcı yalnızca kendi
satırlarını okuyup yazabilsin.
3. Uygulama kodunu henüz değiştirme. SQL'i göster, ben uygulayacağım.
Burada RLS kısmını atlama. Supabase’de mobil uygulamaya gömülen anahtar herkese açıktır; seni koruyan şey anahtarın gizliliği değil, veritabanındaki kurallardır. Firebase’de de aynı rolü security rules oynar.
Adım 5: Giriş (auth)
E‑posta ile giriş en basitidir; Supabase ve Firebase ikisi de hazır verir. Google ile giriş ve Apple ile giriş daha fazla ayar ister: geri dönüş adresleri (redirect URI), uygulama şeması ve platform konsollarında kayıt.
Bir not: App Store kurallarına göre uygulamanda üçüncü taraf bir sosyal giriş seçeneği sunuyorsan, belirli istisnalar dışında Apple ile giriş ya da eşdeğer gizlilikte bir seçenek de beklenebiliyor. Kuralları yayından önce güncel haliyle kontrol et.
Ajana girişi şöyle istiyorum:
Supabase Auth ile e-posta + şifre girişi ekle.
- Oturum yoksa kullanıcıyı giriş ekranına yönlendir.
- Oturumu expo-secure-store ile sakla.
- Çıkış düğmesini Ayarlar ekranına koy.
- Hata mesajları Türkçe ve anlaşılır olsun.
Google ve Apple girişini şimdi ekleme.
Adım 6: Bildirimler
Push bildirimleri mobilin en çok vakit yiyen kısmıdır. Expo’da expo-notifications paketiyle başlarsın:
npx expo install expo-notifications expo-device
Bilmen gerekenler:
- Yerel bildirimler (“her akşam 21:00’de hatırlat”) sunucu gerektirmez ve en kolay olanıdır. Alışkanlık uygulaması için çoğu zaman bu yeter.
- Uzak push bildirimleri için bir push token alınır, sunucunda saklanır ve oradan gönderilir. iOS tarafında Apple Developer hesabı ve push yetkisi gerekir.
- Bildirim davranışını gerçek cihazda test et; simülatörler ve Expo Go’nun bu konudaki desteği sınırlı olabilir ve zamanla değişiyor.
Ajandan önce yerel bildirim iste, çalıştığını gör, sonra uzak bildirime geç.
Adım 7: Derleme ve mağazalar
Expo Go geliştirme içindir; mağazaya gerçek bir uygulama dosyası gönderirsin. Expo’nun bulut servisi EAS bunu senin için derler:
npm install -g eas-cli
eas login
eas build:configure
eas build --platform android
eas build --platform ios
Bulut derlemenin büyük avantajı, Xcode ve Android SDK kurulumuyla uğraşmaman. iOS derlemesini Mac’in olmadan bile alabilirsin.
Apple tarafı:
- Apple Developer Program’a yıllık ücretli üyelik.
- App Store Connect’te uygulama kaydı, ekran görüntüleri, açıklama, gizlilik politikası adresi ve “App Privacy” bölümündeki veri beyanı.
- Önce TestFlight ile kendine ve birkaç kişiye dağıt, sonra incelemeye gönder.
- İnceleme reddi olağandır. Sık sebepler: çöken uygulama, eksik gizlilik metni, işlevi zayıf “web sitesi sarmalayıcı” uygulamalar, hesap açılıp silinemeyen uygulamalar.
Google tarafı:
- Google Play Console’a tek seferlik ücretli kayıt ve kimlik doğrulama.
- Mağaza girişi, içerik derecelendirme anketi, veri güvenliği formu.
- Yeni kişisel geliştirici hesaplarında üretime çıkmadan önce belirli süre ve sayıda test kullanıcısıyla kapalı test şartı olabiliyor; güncel kuralı konsolda kontrol et.
eas submit komutu derlemeyi iki mağazaya göndermeyi kolaylaştırır, ama mağaza formlarını yine sen doldurursun. Bu formları ajana yaptırmak yerine kendin oku; uygulamanın topladığı veriyi doğru beyan etmek senin sorumluluğun.
Ajanların en çok zorlandığı yerler
Bu kısım, mobil vibe coding’de en çok zamanı kaybettiğim yerlerin listesi.
Native derleme hataları
Gradle, CocoaPods, Xcode sürümleri, Android SDK seviyeleri. Bu hatalar uzun, karışık ve ortama özgüdür. Ajan senin makinendeki Xcode’u göremez; tahmin eder. Yapabileceklerin:
- Tam hata çıktısını ver, ilk satırları değil. Asıl sebep çoğu zaman en altta ya da ortadadır.
- Mümkün olduğunca EAS Build kullan; ortam sabit olur.
- Ajanın
ios/veandroid/klasörlerini elle düzeltmesine izin verme. Expo’da bu klasörler genelde config’ten üretilir; kalıcı değişiklikapp.jsonya da config plugin ile yapılmalı.
İmzalama ve sertifikalar
iOS’ta sertifika, provisioning profile ve bundle identifier; Android’de keystore. Ajan bu konuda kendinden emin ama yanlış talimatlar verebilir. EAS’in kimlik bilgilerini yönetmesine izin vermek en sorunsuz yol. Android keystore’unu kaybedersen aynı uygulamaya güncelleme yayınlamak ciddi bir dertleşir; yedeğini al.
Sürüm uyumsuzlukları
Ajan, eğitildiği dönemdeki bir paketin API’sini kullanır; senin projendeki sürüm farklı olabilir. npx expo install --check uyumsuz paketleri gösterir. Ajana “önce package.json’daki sürüme bak, sonra o sürümün dokümanına göre yaz” demek işe yarıyor.
Yalnızca bir platformda test
Ajan iOS’ta çalışan bir düzeni yazar, Android’de taşar. Her özelliği iki platformda da gör.
Her şeyi tek seferde istemek
“Giriş, bildirim ve ödeme ekle” dediğinde üçü de yarım kalır. Her seferinde tek özellik, arada commit.
Güvenlik: mobilde özellikle önemli
Mobil uygulamaya koyduğun her şey kullanıcının cihazına iner ve açılıp okunabilir. Bu yüzden:
- Uygulama paketine gizli anahtar koyma. Expo’da
EXPO_PUBLIC_ile başlayan ortam değişkenleri pakete gömülür, yani herkese açıktır. Supabase’inservice_roleanahtarı, ödeme sağlayıcısının gizli anahtarı ya da bir yapay zeka API anahtarı asla uygulamada olmamalı; bunlar sunucu tarafında (örneğin bir edge function içinde) durur. - Sırları
.envdosyasında tut ve.env’nin.gitignore’da olduğunu kontrol et. - API anahtarlarını sohbete yapıştırma. Ajana anahtarın kendisini değil, hangi ortam değişkeninden okunacağını söyle.
- Veritabanı kurallarını test et. İkinci bir hesapla giriş yapıp birinci hesabın verisini görebiliyor musun, dene.
- Ajanın çalıştırdığı komutları oku. Özellikle
eas,git push, silme ve veritabanı komutlarını onaylamadan önce.
AgentVera ile bu süreç
Yukarıdakilerin hepsini düz bir terminalle yapabilirsin. Ben mobil projede birkaç ajanı yan yana çalıştırmayı seviyorum ve bunu AgentVera ile yapıyorum:
- Ayrı worktree’lerde ayrı ajanlar. Örneğin Claude Code bir git worktree’de Supabase şeması ve edge function’lar üzerinde, Codex başka bir worktree’de ekranlar üzerinde çalışır. Git paneli her dalın değişikliklerini gösterir.
- Izgarada bir terminal.
npx expo startbir panelde açık kalır, Metro’nun çıktısını ajanların yanında görürsün; editör ve terminal paneli bunun için. - Birleştirmeden önce inceleme. Otomatik kod incelemesi ajanın turunu ikinci bir modele kontrol ettirir; diff’i yine de kendin okumalısın.
- Veritabanı. Supabase’in Postgres bağlantısını veritabanı yöneticisine ekleyip ajanın yazdığı tabloları ve verileri kontrol edebilirsin.
- Token takibi. Uzun hata çıktıları bağlamı hızla şişirir; token kullanımını panelde görürsün.
AgentVera telefona derleme yapmaz, mağazaya göndermez; o kısım Expo ve mağaza konsollarında.
Kısa kontrol listesi
- Expo projesi kendi elinle oluşturuldu, git’e ilk commit atıldı
- İlk istemde ekranlar, kurallar ve
npx expo installşartı yazılı - Her özellik iki platformda telefonda denendi
- Supabase’de RLS ya da Firebase’de security rules açık ve test edildi
- Uygulama paketinde hiçbir gizli anahtar yok
- Android keystore yedeklendi
- Gizlilik politikası ve mağaza veri beyanları hazır
Sonuç
Yapay zeka ile mobil uygulama yapmak artık gerçekçi bir hedef; ama iş “uygulamayı yaz” demekle bitmiyor. Expo ile başla, Expo Go ile her değişikliği telefonunda gör, backend için hazır bir servis kullan, özellikleri tek tek ekle ve platform adımlarını (imzalama, mağaza formları, inceleme) kendin sahiplen. Ajanın yazdığı kodu incelemek için yapay zeka kod incelemesi yazısına, paralel çalışma için git worktree ile paralel geliştirme yazısına bakabilirsin.