React Native ile uygulama geliştirirken genelde testlerimi Android emülatör veya fiziksel bir Android cihaz üzerinde yapıyorum. Geçtiğimiz günlerde projeyi iOS (iPhone) üzerinde test etmek istediğimde Android tarafında sorunsuz çalışan uygulamanın iOS tarafında açılmadığını fark ettim.
Karşılaştığım hata ekranı tam olarak şuydu:
“There was a problem running the requested app.”
Unknown error: The Internet connection appears to be offline.
exp://192.168.1.101:8081
Sorunun Tespiti
İlk başta sorunun internet bağlantısından veya sunucudan kaynaklandığını düşündüm. Ancak modem arayüzünü ve bilgisayarı kontrol ettiğimde internette bir kesinti yoktu. Daha da ilginci, aynı saniyede Android cihazımdan projeyi açtığımda (QR kodu okuttuğumda) uygulama sorunsuz çalışıyordu ve sunucuya erişebiliyordu.
Sorun kodda değildi, sunucuda değildi. Sorun spesifik olarak iPhone’un, bilgisayarımdaki yerel sunucuyu (localhost:8081) görememesiydi.
Biraz araştırma yaptığımda sorunun Apple’ın iOS 14 ve sonrası sürümlerle getirdiği gizlilik özelliklerinden kaynaklandığını anladım. iOS, uygulamaların kullanıcının izni olmadan yerel ağdaki (Local Network) diğer cihazları taramasını ve bağlanmasını engelliyor.
Çözüm: Yerel Ağ İznini Açmak
Bu sorunu çözmek için bilgisayar tarafında veya kod tarafında bir değişiklik yapmanıza gerek yok. Çözüm tamamen iPhone ayarlarında bitiyor.
Takip etmeniz gereken adımlar:
- iPhone’unuzda Ayarlar (Settings) menüsüne girin.
- Uygulama listesinde aşağılara inerek Expo Go uygulamasını bulun.
- Ayarlar içerisinde “Yerel Ağ” (Local Network) seçeneğinin kapalı olduğunu göreceksiniz.
- Bu seçeneği aktif hale getirin.
Bu ayarı açtıktan sonra Expo Go uygulamasını arka plandan tamamen kapatıp tekrar açın. Projenizin QR kodunu tekrar okuttuğunuzda hata almadan uygulamanın yüklendiğini göreceksiniz.
Alternatif Çözüm (Tünel Bağlantısı)
Eğer yukarıdaki yöntem işe yaramazsa veya kurumsal bir ağdaysanız (okul, ofis vb. kısıtlamalar varsa), Expo’nun trafiği yerel ağ yerine internet üzerinden dolaştırmasını sağlayabilirsiniz.
Bunun için projeyi başlatırken şu komutu kullanmanız yeterli:
Bash
npx expo start --tunnel
Bu komut yerel ağ sorunlarını bypass eder ancak bağlantı hızı yerel ağa göre biraz daha yavaş olabilir. Benim tavsiyem ilk yöntemi uygulamanızdır.
Umarım faydalı olur, iyi çalışmalar.
