• 19 Mar

    RubyMotion Success Story: Inktera

    Page Foundry created Inktera as a platform for authors, publishers and booksellers to take control of their online presence. More than just an ebook store, Inktera links the website, blogs, Facebook and Twitter profiles, and more - allowing you to build native Apple iOS and Android apps in just a few minutes!


    We sat down with Dan McFarland to talk about Inktera and their experience using RubyMotion. 

    What is Page Foundry’s goal?

    Page Foundry was founded with a very simple vision: Deliver the most robust digital content platform available. Page Foundry has been able to empower global organizations like ASUS, local businesses (authors, publishers and local booksellers) and others to connect with their customers in really meaningful ways.

    How does the Inktera platform accomplish this?

    The vision for the Inktera platform was very simple: help businesses acquire customers by offering a suite of branded digital content services that extend our customer’s brands, services and core values. The platform has evolved into a very robust offering that includes the ability to quickly and easily launch ebookstore apps. By quickly and easily we’re talking days - possibly even hours in some cases - not weeks or months.

    What unique features does Inktera provide?

    The app is completely unique in that it offers in-app purchasing for ebooks. No apps, other than Apple’s own iBooks app, offer this feature. The Inktera iOS app connects directly to the Inktera cloud which manages the reader’s library, stores their bookmarks, notes, and personalization features.

    The framework for the Inktera iOS app is completely customizable by Page Foundry customers via the Inktera platform. They can add social media features, select which types of books to offer, set featured items, etc.

    How do you apply the different interface customizations on the device?

    The only real difference we consider is iPad vs iPhone with the use of UISplitViewController in the former. BubbleWrap’s Device.ipad? is the only convenience method we use for the detection. All layouts are done programmatically without NIBs.

    We made use of LayoutManagers-Fork to get over an initial learning curve and because we were familiar with Android’s LinearLayouts. After understanding iOS’s views more, we used it because it was a similar way to lay interface objects out without trying (or having) to use DSL’s for them.

    What RubyMotion tools did you take advantage of? (gems? editors?)

    We have been using RubyMine since version 4.0. The latest 5.0 version finally added code completion of iOS core methods/selectors/constants which saves us one trip to Xcode’s Docs. We made a decision to not over do gem usage to avoid using something we couldn’t understand/appreciate. Our gem list is:

    gem 'cocoapods'
    gem 'motion-cocoapods'
    gem 'bubble-wrap'
    gem 'motion-testflight'

    SugarCube and TeaCup look very interesting and we’ll probably incorporate them now that we have our first app under our belts.

    How did RubyMotion speed up your development?

    After checking our SCM, our project went from first RubyMotion check-in to Ready for Sale in 10 man weeks. Considering we had no prior iOS, C, Objective-C experience, we project this would not have been possible without RubyMotion or a significant amount more in human resource / development investment dollars.

    RubyMotion was not easier than Android mainly due to our prior experience with Java. Android ADT makes creating flexible layouts very intuitive and storing the layouts in XML makes understanding structures easier. That said, the RubyMotion and iOS networking libraries with caching blow Android out of the water. RubyMotion also makes doing network on the main thread almost impossible so keeping the application responsive was a non-issue. RubyMotion certainly makes iOS development easier if the developers have Ruby experience. For Java developers Android is hard to beat. $199.99 to avoid writing method calls like arrays is priceless.

    How does the iOS app integrate with the rest of the Inktera platform?

    The iOS app integrates through a private Restful API. All networking between the two uses ASIHTTPRequest.

    What was the biggest challenge during development?

    There’s a tie for the biggest challenge. The first challenge was the integration of Adobe’s RMSDK. The RMSDK project is composed of a dozen other projects and has a very specific build process. The first weeks were spent getting RubyMotion to be able to call into all of RMSDK. This is not a trivial task. The second challenge was memory management. The team was constantly stumbling on situations where retain cycles were getting created by trivial and routine code. Saving things in instance vars helped, but then we had to remember to unset them.

    What is it like using RubyMotion on an application so complex?

    Overall, we could not have built what we built without RubyMotion given our time constraints and desired investment. We are a Ruby shop so being able to stay in that mind set and leverage existing skills was critical to expediting the process. RubyMotion doesn’t magically remove crash logs or the need to understand iOS concepts, but having readable code that we could write from REPL console helped the project grow with confidence.


Want to stay in touch?

Follow us on Twitter