As a new member of the ISV Engineering team, I am excited to work with ISV partners and the Zebra developer community. We are growing in every aspect of the business and it’s an exciting time to be part of this Zebra community. In today’s blog, I’d like to share some common issues related to iOS MFi White Listing for mobile printers.


Zebra mobile printers (iMZxxx series, QLnxxx series and ZQxxx series) are part of the Made For iPhone program, a requirement that hardware accessories must meet to interact with iOS apps. If an iOS application uses the Link-OS Multiplatform SDK to interact with Zebra printer over Bluetooth, it must be white listed before it can be submitted to the Apple App Store for approval. The iOS App White Listing FAQ outlines the process for white listing. One of the steps in the process is to submit the application through Testflight (preferred) or HockeyApp to Zebra ISV team for review and testing, to ensure it provides the proper user experience with Zebra printer through your app. The Best Practices in Creating a Printing Application for Zebra Printers gives a holistic view of techniques available for application developers to employ for best user experience in printing.


Here are a few key points from the out-of-the-box experience and error status handling perspectives.


1. The factory default settings are different in different types of printers. The device.languages setting of factory default, for example, is the line print (line_print) in iMZxxx series and ZQ500 series, while it is default to ZPL in the other series of mobile printers out of the box. Quite often, the application assumes ZPL setting without setting the device.languages through the application explicitly before sending ZPL print jobs. This causes a bad user experience when seeing garbage like prints on an iMZxxx series or ZQ500 series out of the box, as device.languages setting is line_print in factory default.


2. Printer status handling is also important for the user experience. The Link-OS SDK provides getCurrentStatus: API for application to check the status of printer before and after sending a print job to the printer. This API returns the PrinterStatus object to indicate the current status of the printer, including isReadyToPrint, isPaperOut, isHeadOpen, isReceiveBufferFull, etc. We’ve often seen the applications submitted for white listing failed to check the basic status of isPaperOut and isHeadOpen. The applications kept sending jobs to the printer when there was no paper or the print head was open. For a good user experience, instead, an error message should pop up indicating the specific error state of the printer, so the user can correct the error state. The status handling with proper error message can greatly improve the user experience. This is not only a benefit for users, but also can benefit both the app developers and Zebra.


Hope the above helps and happy coding.