Implementing Barcode Generation in Mobile Apps
The warehouse asks to print labels directly from a phone, retail wants to generate QR receipts offline, logistics needs Code128 for waybills. We've handled such tasks dozens of times over many years. Recently, a retail client asked to rewrite generation: their previous library did not support Code128 with Cyrillic, leading to unreadable barcodes on half of their batches. A mistake at the library selection stage turns months of work into rewriting the module. One client saved $1.4k–1.9k on reprinting defective labels after implementing our solution. Another cut logistics costs by $720–1k per month by automating code generation for all products. In this article, we'll share which libraries and approaches actually work.
We use Swift 5.9, Kotlin 1.9, and Jetpack Compose for modern UIs. For legacy projects, UIKit and View System. We always adhere to Apple Human Interface Guidelines and Material Design.
Which Barcode Formats Are Necessary?
Linear codes — EAN-13, UPC-A, Code128, Code39 — differ in checksum algorithms. EAN-13 is mandatory for retail, while Code128 is for courier services. Two-dimensional — QR and Data Matrix.
Library Comparison
| Format | iOS | Android | Flutter |
|---|---|---|---|
| EAN-13 | ZXingObjC | ZXing | barcode_widget |
| Code128 | CoreImage (native) | ZXing | barcode_widget |
| QR | CoreImage | ZXing | barcode_widget |
| Data Matrix | CoreImage | ZXing | barcode_widget |
ZXing is the standard for Android, wrapper for iOS. CoreImage is faster but doesn't support EAN. For Flutter, barcode_widget draws via Canvas without native code.
Typical Errors and Their Consequences
-
Scaling blur: on iOS,
CGAffineTransformwithout interpolation; on Android,Bitmap.createScaledBitmapwith filter false. Ignoring this breaks scanning on 30% of devices. -
Contrast: explicitly set
fgColor/bgColor. Transparent background QR fails under poor lighting. - Minimum QR size with M correction — 150×150 dp. We guarantee operability on devices with 8 MP cameras.
How We Implement On-the-Fly Generation
Barcodes are often dynamic: String.format("ORDER-%06d", orderId) → encoding → render. For batch generation, we use background threads (DispatchQueue.global() / Executors.newFixedThreadPool(4)). Show progress.
Performance Comparison: Generating 1000 Code128
| Library | Time (ms) | Sharpness |
|---|---|---|
| ZXing (Android) | 340 | High |
| CoreImage (iOS) | 980 | Medium |
| barcode_widget (Flutter) | 720 | High |
ZXing generates Code128 3x faster than CoreImage for 1000+ codes. So for batches we choose ZXing.
Saving and Printing
Generate Bitmap/UIImage, save via FileProvider or UIActivityViewController. For Bluetooth printers (Zebra ZPL), pass ZPL string — clarity at any DPI. The importance of this approach is that raster images on low-DPI thermal printers turn into a blob.
Why Library Choice Is Critical
According to Apple documentation, CoreImage supports only some formats. For EAN-13, you must use ZXingObjC. On Android, ZXing is a universal solution but requires ProGuard/R8 configuration to prevent class obfuscation. The Flutter package barcode_widget renders vector barcodes, ensuring sharpness at any scale, but is slower than native generation.
Cyrillic in Code128 is a separate problem. Code128 encoding uses character sets A, B, C. Cyrillic is not in any of them — you must transliterate to Latin-1 or use Unicode escape. The ZXing library automatically selects the appropriate table, but for Cyrillic data a manual flag is needed. We always test on real devices with Russian barcodes.
What's Included in the Work
- Analysis of formats and accuracy requirements.
- Library selection considering platform and offline mode.
- Module implementation (encoding, render, export).
- Testing on 5+ real devices.
- Printer integration or batch printing.
- Documentation and code review.
- 2 weeks of support after delivery.
Timelines
Implementation of 2-3 formats with preview screen and sharing — 1 day. With printer integration — 2-3 days. Contact us for precise estimation — pricing is individual.
Why Trust Us?
Long-term mobile development, 50+ projects with barcode integration. Compliance with App Store Review Guidelines Section 4.2 and 5.1. Certified developers. Order a barcode module development — we'll solve the task on the first try.







