Mobile apps
Mobile Toolbox: Cross-Platform, Packaging and Device Testing
Decide one codebase or two before deciding packaging and release. Cross-platform saves labor, not every cost.
The core mobile trade-off is shared-code ratio versus native capability needs. This list runs from cross-platform frameworks through build and release, device debugging, and file transfer, in project order.
Shortlist(6)
- flutter · 深度导读卡 ¥3.9BSD-3-Clause · Dart · ★181.0k
A self-rendered cross-platform UI approach for products that need visual consistency.
- react-native · 深度导读卡 ¥3.9MIT · C++ · ★126.9k
A native-component-adjacent cross-platform option, suited to existing React teams.
- expo · 深度导读卡 ¥2.9MIT · TypeScript · ★53.3k
Standardizes build and preview, solving 'cannot even run it' before optimizing.
- fastlane · 深度导读卡 ¥2.9MIT · Ruby · ★42.4k
Release automation for signing, screenshots and store submission — repetitive actions worth fixing.
- rustdesk · 深度导读卡 ¥3.9AGPL-3.0 · Rust · ★128.1k
Remote assistance for reproducing device issues, far more efficient than screenshot descriptions.
- localsend · 深度导读卡 ¥2.9Apache-2.0 · Dart · ★97.2k
LAN file transfer for quickly distributing builds between test devices.
List native capabilities first
List features that must call native APIs — push, background location, Bluetooth, payments — then check whether your cross-platform choice covers them. Gaps become long-term maintenance debt.
Make builds repeatable
The same code must produce the same package on any machine. Signing files, environment variables and version numbers belong in a controlled process.
Cover low-end devices
Good simulator performance does not imply good device performance. Cover at least one low-end Android and one older iPhone, watching memory and launch time.
Common pitfalls
Common traps: accepting in simulators only, losing signing certificates, store screenshots diverging from the real UI, and treating hot updates as a release channel.
Alternatives
If the product lives in a mobile browser, a PWA may be simpler than a native package; go native when background capabilities and system integration are needed.