Go ile Mobil Uygulama Geliştirmek: Flutter + Go Mobile Deneyimi Siber Güvenlik

Go ile Mobil Uygulama Geliştirmek: Flutter + Go Mobile Deneyimi

Go Mobile ile Flutter arka ucu kullanarak cross-platform mobil uygulama geliştirme deneyimim. Protobuf, platform kanalları ve Swift/Kotlin entegrasyon

Son bir yıldır Digital Carrot uygulamasını Go Mobile ile geliştiriyorum ve genel olarak olumlu bir deneyim yaşadım. Bu makale, süreç boyunca öğrendiklerimi bir araya getiren bir kaynak olarak hazırlandı. Go Mobile'ı seçme nedenim kısa ve öz: Go'yu seviyorum ve kullanmak istedim. Uzun cevap ise Digital Carrot'un cross-platform bir uygulama olması ve Go'nun güçlü sistem kütüphanelerinden (Expr, Goja gibi) faydalanma isteğiydi. Go Mobile, uygulamanın tüm iş mantığını yönetiyor; UI tarafında ise Flutter kullanıyorum.

Flutter ile Go arasındaki iletişim Protobuf mesajları üzerinden gerçekleşiyor. Protobuf, Go ve Dart taraflarında otomatik olarak yapılandırılmış sınıflar/structlar oluşturmayı sağladığı için JSON manuel dönüşümlerinden kurtarıyor. Flutter, platform kanalları aracılığıyla Swift/Kotlin koduna binary Protobuf mesajları gönderiyor; native kod bu mesajı Go'ya iletiyor, Go işleyip yanıtı aynı yoldan geri döndürüyor. Bu yapı, tüm API çağrıları için tek bir platform kanalı kullanmamı sağladı; böylece her fonksiyon için üç ayrı kod tabanında değişiklik yapma zahmetinden kurtuldum.

Go'dan native koda (Swift/Kotlin) mesaj göndermek ise Go Mobile'ın en az belgelenmiş kısımlarından biri. Bunun için Go'da bir interface tanımlıyorum, Go Mobile otomatik olarak Objective-C veya Kotlin interface'i oluşturuyor, ve bu interface'i Swift veya Kotlin'de implemente edip Go'ya geri veriyorum. Örneğin, ekran süresi yönetimi için IosMethods interface'i tanımladım; Swift tarafında bu interface'i implemente eden bir sınıf oluşturup Go'ya iletiyorum. Bu sayede Go, native API'lere (ekran süresi, sağlık verileri gibi) erişebiliyor.

Go Mobile ile sunucu tarafı arasındaki uyum da büyük bir avantaj. Digital Carrot'un senkronizasyon sunucusu da Go ile yazıldığı için, testler sırasında istemci kodunu doğrudan sunucu testlerine import edebiliyorum. Docker gibi karmaşık test ortamlarına gerek kalmadan, Mac'te go test komutuyla 20 saniyeden kısa sürede testler çalışıyor. Ayrıca iş mantığı ve sunum katmanı arasında güçlü bir ayrım sağlanıyor; Flutter sadece UI ve platform izinleriyle ilgilenirken, tüm iş mantığı Go'da kalıyor.

Bu yaklaşımın dezavantajları da yok değil. Go Mobile'ın dökümantasyonu sınırlı ve topluluk desteği Flutter veya React Native kadar geniş değil. Protobuf tanımlamaları ve platform kanalları ek bir karmaşıklık getiriyor. Ayrıca, Go Mobile'ın native kodla iletişimi sadece ilkel veri tiplerini destekliyor; bu da Protobuf gibi serileştirme araçlarını zorunlu kılıyor. Yine de benim gibi Go severler için bu zorluklar göze alınabilir. Eğer siz de Go ile mobil uygulama geliştirmeyi düşünüyorsanız, Flutter + Go Mobile ikilisi sağlam bir seçenek.

Kaynak: davidsobsessions.com

Paylaş: