Chuyển đến nội dung chính

tapflow: stream simulator tự host cho cả nhóm

tapflow là lựa chọn tự host thay cho Appetize và BrowserStack: nó stream iOS Simulator và Android emulator đang chạy trên máy Mac của bạn lên bất kỳ trình duyệt nào. 530★, giấy phép MIT, cập nhật lần cuối 2026-08-28.

tapflow là gì?

Nhóm Flutter nào rồi cũng đụng cùng một bức tường. Lập trình viên mobile muốn chạy app lúc nào cũng được. Còn tất cả những người khác — designer đang kiểm tra bố cục, PM muốn so hai bản build, lập trình viên backend muốn xem cái gì thật sự đã lên sandbox — đều phải đi nhờ, lần nào cũng vậy.

Các cách giải quyết thông thường đều có giá của nó. Máy thật tốn tiền, tốn độ phủ phiên bản hệ điều hành và tốn cả một buổi chiều của ai đó. Appetize và BrowserStack tốn phí thuê bao buộc phải upload bản build nội bộ lên bên thứ ba. Phát Xcode cho cả nhóm thì tốn một chiếc Mac và cả bộ toolchain cho mỗi người.

Câu trả lời của tapflow là tận dụng lại những chiếc Mac bạn đã có. Nó gồm ba phần:

  1. một relay (Linux hoặc macOS) đồng thời phục vụ dashboard trên cùng một cổng
  2. một agent macOS điều khiển simulator hoặc emulator, kết nối ra ngoài tới relay — không cần mở firewall vào trong, và không cần WebDriverAgent vì nó tiêm sự kiện chạm iOS trực tiếp
  3. một dashboard trên trình duyệt cho tất cả những người còn lại

Vì sao điều này quan trọng với nhóm Flutter

Lời hứa của Flutter là một nhóm phát hành cho cả hai nền tảng. Trên thực tế, khâu QA vẫn kẹt ở người sở hữu máy Mac. tapflow dời nút thắt đó đi mà không đưa bản build ra khỏi hạ tầng của bạn.

Phần stream được suy tính kỹ hơn mức bạn chờ đợi ở một dự án v0.x. Cả hai nền tảng đều stream H.264 qua bộ giải mã hai tầng — WebCodecs khi ở ngữ cảnh bảo mật, bộ giải mã WASM khi chạy HTTP thường — cố tình bỏ qua Media Source Extensions để bộ đệm của thẻ media không nằm trên đường giải mã. Dự án công bố số đo độ trễ của chính mình: p50 khoảng 11–17 ms từ lúc giải mã đến lúc hiển thị với bộ giải mã phần mềm, cộng thêm thời gian đi về của mạng. Trình duyệt cũ thì lùi về JPEG thay vì báo lỗi.

Xung quanh luồng stream là những thứ một quy trình QA thật sự cần: chạm, vuốt và pinch được chuyển tiếp trực tiếp; thanh công cụ deeplink; App Center nhận file .app.zip.apk rồi theo dõi bản build qua các trạng thái Backlog / In Progress / Done / Rejected; bản ghi phiên giữ khoảng 72 giờ rồi tự xóa; chỉ số CPU và RAM theo từng agent để biết máy Mac nào đang quá tải; và phân quyền Admin, Developer, QA, Viewer kèm link mời và personal access token.

Bắt đầu

npm install -g tapflow

Trên chiếc Mac sẽ chạy agent, cài các thành phần cần thiết cho simulator:

tapflow setup

Rồi khởi động relay và agent cùng lúc:

tapflow start

Lệnh đó in ra URL của relay (mặc định http://localhost:4000). Mở lên, tapflow sẽ chuyển bạn tới /setup để tạo tài khoản admin đầu tiên — hoặc dùng tapflow admin init trên server không có giao diện. tapflow doctor kiểm tra lại các điều kiện tiên quyết khi có gì đó bất thường.

Bỏ qua tapflow setup trên máy Linux chỉ chạy relay; nó chỉ cần Node 22+ và khoảng 512 MB RAM.

Khi nào nên dùng tapflow?

  • những người không phải lập trình viên trong nhóm cần thử bản build Flutter mà hiện tại thì không thể
  • bạn đang trả tiền cho Appetize hay BrowserStack chủ yếu để dùng simulator, chứ không phải máy thật
  • chính sách công ty hoặc hợp đồng với khách nói rằng bản build nội bộ không được upload lên cloud của bên thứ ba
  • bạn muốn một LLM agent hoặc một job CI điều khiển simulator qua MCP hoặc REST

Điểm còn hạn chế

Agent chỉ chạy trên macOS, và mãi sẽ như vậy — nó điều khiển simulator của Xcode và Android emulator trên máy Mac. Relay chạy ở đâu cũng được; máy làm việc thật thì không.

Dự án đang ở v0.x và nói thẳng điều đó. Nhóm bảo trì hứa mặc định giữ tương thích ngược và ghi chú các thay đổi phá vỡ trong changelog, nhưng đó là một lời hứa, chưa phải một bề dày thành tích.

Và nó nói rõ mình không phải device farm, cũng không thay thế Appium. Nó chỉ kèm một trình chạy flow tối giản; việc ghép WebDriverAgent hay Appium nằm ngoài phạm vi theo chủ ý. Nếu kế hoạch QA của bạn phụ thuộc vào những đặc thù của phần cứng thật — camera của một hãng cụ thể, modem thật, hiện tượng giảm xung do nóng — thì luồng stream simulator sẽ không tìm ra các lỗi đó, dù độ trễ có tốt đến đâu.

Các lựa chọn đáng so sánh

Câu hỏi thường gặp

tapflow có phải device farm không?

Không. Nó stream simulator và emulator chạy trên chính những chiếc Mac bạn đang sở hữu, chứ không quản lý một dàn điện thoại thật. Dự án nói rõ điều đó — nó chỉ làm cho simulator đang chạy trở nên truy cập được từ trình duyệt, không hơn.

Bản build Flutter của tôi có bị upload đi đâu không?

Không. tapflow được thiết kế để tự host. File binary, luồng stream thiết bị và bản ghi phiên đều nằm trên relay do bạn vận hành. Đó chính là lý do chính để chọn nó thay vì Appetize hay BrowserStack.

Cả nhóm có cần máy Mac không?

Chỉ những máy chạy agent. Relay chạy trên hệ điều hành nào có Node 22+ cũng được, còn người QA chỉ cần một trình duyệt hiện đại — không Xcode, không Android Studio, không Flutter SDK.

AI agent có điều khiển được tapflow không?

Có. @tapflowio/mcp-server phơi bày khả năng điều khiển simulator dưới dạng công cụ MCP cho Claude Code và các agent khác, và có endpoint REST chụp ảnh tại /api/v1/sessions/:sessionId/screenshot dùng cho CI.

Tài nguyên & liên kết


Thuộc FlutterCook — hướng dẫn thực hành về các thư viện, UI kit và ứng dụng Flutter mã nguồn mở tốt nhất. Xem xu hướng GitHub hoặc hướng dẫn YouTube.


Bài viết gốc đăng tại FlutterCook. Bản trên đó là bản được cập nhật mới nhất.

Nhận xét

Bài đăng phổ biến từ blog này

5 concepts every Flutter dev should know

  Phụ lục: State management architecture Testing IDE Shortcuts Platform channel Maintaining a project Tôi đã làm việc với Flagship trong một thời gian dài, và đây là những điều mà tôi phát hiện ra là điều cần phải có đối với bất kỳ nhà phát triển Flagship nào, về tổng thể nó sẽ khiến bạn trở thành một nhà phát triển Flagship giỏi trong thời gian dài. 1. State management architecture Đây là một trong những chủ đề quan trọng nhất trong cộng đồng thiết bị rung, nó khá quan trọng nếu bạn muốn duy trì một dự án rung kích thước trung bình hoặc lớn. Nó sẽ giúp tạo một dự án suôn sẻ và thêm các tính năng mới một cách hoàn hảo.  2. Testing Đây là một chủ đề duy nhất mà tôi không hiểu tại sao nó lại quan trọng trước đó trong sự nghiệp của tôi, nhưng khi tôi tiến lên trong sự nghiệp của mình và có kinh nghiệm với nhiều dự án và vấn đề xảy ra trong môi trường sản xuất. Tôi đã nhận ra một cách khó khăn, tại sao điều này lại quan trọng như vậy. Nếu bạn vẫn muốn có thêm lý do để cân nhắc thử...

Thiết kế giao diện với DotNetBar (Phần 1)

Đây là phiên bản DotNetBar hỗ trợ C# và Visual Basic https://www.dropbox.com/s/wx80jpvgnlrmtux/DotNetBar.rar  , phiên bản này hỗ trợ giao diện Metro cực kỳ “dễ thương” Các bạn load về và cài đặt, khi cài đặt xong sẽ có source code mẫu của tất cả các control. Để sử dụng được các control của DotNetBar các bạn nhớ add item vào controls box. Thiết kế giao diện với DotNetBar, giao diện sẽ rất đẹp. Link các video hướng dẫn chi tiết cách sử dụng và coding: http://www.devcomponents.com/dotnetbar/movies.aspx Hiện tại DotNetBar có rất nhiều công cụ cực mạnh, trong đó có 3 công cụ dưới đây: DotNetBar for Windows Forms Requires with Visual Studio 2003, 2005, 2008, 2010 or 2012.   DotNetBar for WPF Requires with Visual Studio 2010 or 2012 and Windows Presentation Foundation.   DotNetBar for Silverlight Requires with Visual Studio 2010 or 2012 and Silverlight. Dưới đây là một số hình ảnh về các control trong DotnetBar.   Metro User Interface  controls with Metro Tiles, toolba...

Announcing Flutter 2

  Phụ lục: Flutter on the web Flutter 2 on desktops, foldables, and embedded devices The growing Flutter ecosystem Dart: The secret sauce behind Flutter Flutter 2: Available now Hôm nay, chúng tôi sẽ công bố Flutter 2: một bản nâng cấp lớn cho Flutter cho phép các nhà phát triển tạo các ứng dụng đẹp, nhanh chóng và di động cho bất kỳ nền tảng nào. Với Flutter 2, bạn có thể sử dụng cùng một cơ sở mã để gửi các ứng dụng gốc cho năm hệ điều hành: IOS, Android, Windows, macOS và Linux; cũng như trải nghiệm web nhắm mục tiêu các trình duyệt như Chrome, Firefox, Safari hoặc Edge. Flutter thậm chí có thể được nhúng vào ô tô, TV và thiết bị gia dụng thông minh, mang đến trải nghiệm di động và lan tỏa nhất cho thế giới điện toán xung quanh. Mục tiêu của chúng tôi là thay đổi cơ bản cách các nhà phát triển nghĩ về việc xây dựng ứng dụng, bắt đầu không phải với nền tảng bạn đang nhắm mục tiêu mà là với trải nghiệm bạn muốn tạo. Flutter cho phép bạn tạo ra những trải nghiệm tuyệt đẹp trong đó ...