ब्राउज़र में iOS/Android सिम्युलेटर QA वातावरण बनाना — हमने MSE क्यों छोड़ा
(github.com/jo-duchan)अगर आप मोबाइल ऐप बनाने वाली टीम में हैं, तो आपने यह समस्या कम-से-कम एक बार ज़रूर झेली होगी। टेस्ट डिवाइस हमेशा कम पड़ते हैं, और अलग-अलग OS versions को बराबरी से कवर करना भी मुश्किल होता है। लेकिन अगर सिम्युलेटर इस्तेमाल करना चाहें, तो Xcode या Android Studio चाहिए होता है, इसलिए प्रोडक्ट प्लानर, डिज़ाइनर, सर्वर डेवलपर जैसे वे टीम सदस्य जिनके पास मोबाइल डेवलपमेंट environment नहीं है, उनके लिए शुरुआत करना ही मुश्किल हो जाता है। हर बार जब "sandbox में deploy किया हुआ एक बार देखना है, ऐप कैसे install करूँ?" जैसी request आती है, तो मोबाइल डेवलपर को अपना काम रोककर मदद करनी पड़ती है.
हमने Appetize और BrowserStack भी देखे थे। लेकिन (1) टीम का आकार बढ़ने के साथ तेज़ी से बढ़ती कीमत और (2) ऐप binary को external cloud पर upload करने वाली संरचना — इन दोनों वजहों से हमने बचे हुए Mac का इस्तेमाल करके इसे खुद ही बना लिया।
इसी तरह बना tapflow — एक open source self-hosting tool, जिससे टीम का कोई भी सदस्य ब्राउज़र में iOS सिम्युलेटर और Android emulator के साथ मोबाइल QA कर सकता है। देखने वाले को कुछ भी install करने की ज़रूरत नहीं, बस ब्राउज़र खोलना है, और self-hosting होने की वजह से ऐप data भी टीम के Mac के बाहर नहीं जाता।
इसे बनाते समय सबसे मुश्किल चीज़ feature नहीं बल्कि latency थी। स्क्रीन आधी बीट भी पीछे रह जाए, तो लोग एक बार scroll करके तुरंत बंद कर देते हैं। ऊपर से सिम्युलेटर स्क्रीन agent → relay → browser render pipeline से गुजरती है, इसलिए हर हिस्से में latency जुड़ती जाती है। इस path की latency कम करते हुए हमने ये बातें व्यवस्थित कीं:
- हमने MSE छोड़ दिया।
<video>media buffer संरचनात्मक रूप से ~235ms की देरी जोड़ रहा था, इसलिए उसे WebCodecs (secure context) / WASM tinyh264 (plain HTTP) 2-tier से बदल दिया। SPS में reorder=0 घोषित करके decode→present को 267ms→2.5ms किया। (localhost single-clock measurement) - 4 decoders (tinyh264/FFmpeg/openh264) का benchmark किया, लेकिन आखिर में tinyh264 ही रखा — FFmpeg static screen में बेहतर था, लेकिन scroll में हर बार हार गया, और bundle भी 11 गुना बड़ा था। Bottleneck decoder नहीं बल्कि load/transfer था।
- Android SW encoding को Mac के HW encoding से बेहतर बनाया। emulator में HW H.264 encoder नहीं होता, इसलिए scrcpy SW encoder पर अटक जाता है (22–29fps)। raw frames को gRPC से host पर निकालकर Mac VideoToolbox से encode किया → 59fps (downscale)। (default 30fps cap, real device के लिए scrcpy यथावत)
- WDA के बिना iOS touch (CoreSimulator HID API direct injection), और Mac Agent relay से सिर्फ outbound connection बनाता है (inbound firewall rules की ज़रूरत नहीं)।
सीमाएँ: iOS agent केवल macOS के लिए है, touch Private API पर आधारित है इसलिए macOS update में टूट सकता है, अभी v0.x है, और real devices समर्थित नहीं हैं।
npm install -g tapflow
tapflow start # → http://localhost:4000
MIT license
GitHub: https://github.com/jo-duchan/tapflow
दस्तावेज़: https://www.tapflow.dev
अगर आपने सिम्युलेटर access की समस्या झेली है, या low-latency streaming / Private API approach पर आपके विचार हैं, तो उनका स्वागत है।
अभी कोई टिप्पणी नहीं है.