Mobile App Development for Warehouse Inventory Management
15,000 items warehouse with manual inventory isn't just slow. It's remainder errors, 1C inconsistency, 3-day inventory cycles. Mobile app with WMS/ERP integration and barcode scanning support closes gap: warehouse worker scans item, data enters system instantly, balances actual in real time.
Scanning: Where It Usually Breaks
First discovery during development — unreliable camera scanning in warehouse conditions. Poor lighting, damaged labels, DataMatrix instead of familiar EAN-13. On Android CameraX + ML Kit Barcode Scanning covers most formats (QR, Code128, Code39, DataMatrix, PDF417), but toning in bright side light causes false triggers.
Solution — hardware scanner via Zebra DataWedge Intent API or Honeywell Mobility SDK. On Zebra TC-series devices (TC21, TC52) DataWedge intercepts scan and sends as ACTION_BARCODE_DATA Intent. App just registers BroadcastReceiver:
private val scanReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val barcode = intent.getStringExtra("com.symbol.datawedge.data_string")
val symbology = intent.getStringExtra("com.symbol.datawedge.label_type")
barcode?.let { viewModel.onBarcodeScanned(it, symbology) }
}
}
Camera scanning remains as fallback for regular smartphones. ZXing here worse than ML Kit — accuracy on PDF417 noticeably lower in real conditions.
Offline Mode and Synchronization
Warehouse app without offline — non-functional app. Receiving zones, far shelves, refrigerated chambers — Wi-Fi coverage unstable.
Architecture: local Room database as source of truth, sync via WorkManager on connection recovery. Conflicts on merge solved by "last write wins" strategy with server timestamp or idempotent operation queue.
Typical issue — transactions during bulk receipt. If user scanned 200 items and app crashed at 150, must either rollback all or continue from break point. Room supports transactions via @Transaction, but "complete operation" boundary must be explicitly defined at business logic level.
Integration with 1C and WMS
REST API 1C via config extension — most common scenario. Exchange format: JSON with typed fields for items, warehouses, documents. Mobile side — Retrofit + OkHttp with interceptor for Basic Auth or OAuth2.
Industrial WMS integration (SAP EWM, Manhattan, Solvo) often through message broker — RabbitMQ or Kafka. Mobile app then works with REST facade hiding ERP specifics.
Critical moment: unit measurement mapping. In 1C "pcs", "pack", "box" — strings, in ERP might be numeric code. Mapping errors give wrong balances, discovered only during inventory.
Typical Warehouse App Features
- Receipt by document with quantity mismatch
- Cell transfers (address storage)
- Order picking (picking) with warehouse routing
- Inventory — full or selective by zones
- Label printing via Zebra ZPL or TSC TSPL on paired Bluetooth printer
- Balance view and movement history by barcode
Stack and Approach
Android — native preferred for Zebra/Honeywell SDK support. Kotlin + MVVM + Room + Retrofit. Cross-platform: Flutter with flutter_barcode_sdk from Dynamsoft (DataWedge intent support) — viable if no hard vendor SDK binding.
iOS rarely used in warehouse scenarios due to limited industrial scanner choice, but possible via AVFoundation + Vision for camera scanning.
Timeline
Basic app (receipt + transfer + inventory + REST integration): 6–10 weeks. Full cycle with custom WMS backend, address storage, printing: 3–5 months. Cost depends on integration volume and device support.







