Search by type and/or title (iPhone)
Enharmonic (self-funded app)
The gogoDocs document reader for iPhone and iPad synchs to a Google Drive account and lets users view files on their account from anywhere, whether or not they are connected to the internet.
- Support for many file types (Google Docs, MS Office, iWork, PDF, Image, Sound, Video).
- Features automated, background downloading and updating of cached files based on user settings (for example, can automatically download the user’s starred files).
- Support for larger PDFs using custom-built PDF reader.
- Allows users to set their documents to starred/unstarred from the phone.
- Successful apps – the iPhone app has been purchased by thousands of customers, and is currently averaging a 4/5 star rating in the App Store.
- Performance Tuned – the greatest challenge developing this application is maintaining a smooth viewing experience while undertaking some heavy tasks such as file downloads and large PDF rendering. Some performance techniques employed:
- PDF Render Queuing – in the custom-built PDF viewer, each page is given its own drawing operation. Drawing operations are placed in a reorder-able queue and each drawing operation is run in a background thread into an offscreen buffer, the contents of which is pushed onto the screen once it’s filled with PDF page content. These operations are prioritized based on which page of the document is currently on screen. When memory becomes scarce, pages are removed from memory dynamically. This PDF viewer is much faster and more stable than the one that is included on the iPhone. In fact, the gogoDocs PDF viewer has been licensed to and is in use by other apps.
- File Download Queuing – file downloads are also queued similarly. When a user chooses a document to view that is already in the download queue, the queue is reordered and the current document download paused so that the user can see the desired document as soon as possible while other document downloads continue in the background.
- Additional background queuing – many other potentially time-consuming operations are split off into the background as needed. This keeps the application as responsive as possible.