2 puan yazan joduchan 10 시간 전 | Henüz yorum yok. | WhatsApp'ta paylaş

Mobil uygulama geliştiren bir ekipteyseniz bunu muhtemelen en az bir kez yaşamışsınızdır. Test cihazları her zaman yetersizdir ve OS sürümlerini dengeli biçimde kapsamak da zordur. Simülatör kullanalım deseniz bu kez Xcode ya da Android Studio gerekir; bu yüzden mobil geliştirme ortamı olmayan ürün yöneticileri, tasarımcılar ve backend geliştiriciler gibi ekip üyeleri daha en baştan erişememiş olur. "Sandbox'a deploy edilen şeye bir bakmam lazım, uygulamayı nasıl kuruyorum?" gibi istekler her geldiğinde mobil geliştiricinin yaptığı işi bırakıp yardımcı olması gerekir.

Appetize ve BrowserStack’i de değerlendirdik. Ancak (1) ekip büyüdükçe hızla artan ücretler ve (2) uygulama binary’sinin harici bir buluta yüklenmesi bizi rahatsız etti; bu yüzden eldeki boş bir Mac ile kendimiz yaptık.

Ortaya çıkan şey tapflow oldu — ekipteki herkesin tarayıcı üzerinden iOS simülatörü ve Android emülatörüyle mobil QA yapabilmesini sağlayan açık kaynaklı, self-hosted bir araç. İzleyen tarafın hiçbir şey kurmasına gerek yok; sadece tarayıcıyı açması yeterli. Self-hosted olduğu için uygulama verileri de ekipteki Mac’in dışına çıkmıyor.

Geliştirirken en zorlandığımız nokta özellikler değil, gecikme (latency) oldu. Ekran yarım vuruş bile gecikse herkes bir kez scroll yapıp kapatıyor. Üstelik simülatör ekranı agent → relay → tarayıcı render pipeline yolundan geçtiği için her aşamada gecikme birikiyor. Bu yol üzerindeki gecikmeyi azaltırken toparladıklarımız şöyle:

  • MSE’yi bıraktık. <video> medya buffer’ı yapısal olarak ~235ms gecikme bindirdiği için bunu WebCodecs (secure context) / WASM tinyh264 (düz HTTP) 2 katmanlı yapıyla değiştirdik. SPS’te reorder=0 tanımlayarak decode→present süresini 267ms’ten 2.5ms’ye indirdik. (localhost tek saat ölçümü)
  • 4 decoder’ı (tinyh264/FFmpeg/openh264) benchmark ettik ama sonunda tinyh264’da kaldık — FFmpeg durgun ekranda daha iyi olsa da scroll sırasında her seferinde geride kaldı ve bundle boyutu da 11 kat büyüktü. Darboğaz decoder değil, yük ve aktarım tarafındaydı.
  • Android SW encoding’i Mac’in HW encoding’iyle iyileştirdik. Emülatörde HW H.264 encoder olmadığı için scrcpy, SW encoder’a takılıyor (22–29fps). Raw frame’leri gRPC ile host’a çıkarıp Mac VideoToolbox ile encode ettik → 59fps (downscale). (varsayılan 30fps capture, gerçek cihazlarda scrcpy kullanılmaya devam ediyor)
  • WDA olmadan iOS touch (CoreSimulator HID API’ye doğrudan enjeksiyon), Mac Agent ise yalnızca relay’e outbound bağlantı açıyor (inbound firewall kuralı gerekmiyor).
Reklam

Sınırlamalar: iOS agent yalnızca macOS’ta çalışıyor, touch işlemi Private API kullandığı için macOS güncellemeleriyle bozulabilir, henüz v0.x, gerçek cihaz desteği yok.

npm install -g tapflow  
tapflow start   # → http://localhost:4000  

MIT lisansı
GitHub: https://github.com/jo-duchan/tapflow
Dokümantasyon: https://www.tapflow.dev

Simülatör erişim sorunları yaşamış olanlar ya da düşük gecikmeli streaming / Private API yaklaşımı hakkında görüşü olanlar, yorumlarınızı bekliyorum.

Henüz yorum yok.

Henüz yorum yok.