William Ratke

Tonic Tutor: iOS App

The original version of Tonic Tutor didn't work well on mobile, and the games used Flash so they didn't work on tablets or phones, so in 2013 I started to learn Objective C with the intention of creating an iOS version of Tonic Tutor. I spent the next couple of years learning and working on the app, replicating every feature the web application had when I had time outside of other projects. When Swift launched in 2014, I rewrote what I'd worked on, though XCode did help with that to some degree. I preferred the cleaner syntax that Swift offered, and the reality of being a developer is that tech moves quickly, so sometimes you're required to pivot as gracefully as you can when the ground shifts underneath you.

While XCode offers a way to build interfaces visually, I preferred to build them programmatically with some help from the Cartography framework. Swift didn't support JSON natively at the time, so I also used the SwiftyJSON framework to make parsing JSON easier. I used Carthage to manage both frameworks which made it trivial to update them. Since this was such a large app with dozens of different controllers and views, most of the views were built on a customized version of the UIViewController which I used to create subclasses that would inherit the parent's functionality, allowing me to modify them as needed. It's essential to minimize duplicate code as much as possible and be vigilant against cutting corners which become larger problems further down the road, especially on projects of this size.

I launched the app in the Apple app store in 2016 which was extremely exciting after spending so long working on it. It was a gigantic project for a single developer to work on alone. The app was free to download, and it worked with the free and upgraded versions of the web application. All a teacher or student had to do was grab an key generated on the web application and enter it in the app to link accounts. No data was stored locally on the app, everything was synced with the server using a custom API I created in CakePHP that used JSON to send data back and forth. A teacher could make a change on the app and see the same change on the web application almost instantly. It wasn't 100% complete: I launched with 10 of the 44 games implemented and planned to update the app with games as they were completed. Teachers and students were thrilled to have an iOS version of the web application, it had something many users had been asking for since it launched in 2010.

Later in 2016 I ran into issues with Apple after they changed their policy on subscriptions. Originally, subscriptions in iOS were limited to very simple things like subscriptions to electronic magazines, but they increased their functionality and required developers to offer the same options within an app if they linked to a web application that offered subscriptions. Unfortunately, the subscription system they offered was very rudimentary and it wasn't really possible to offer the same subscription plans in the app as I did on the web application (where everything is managed by Chargify). I'd had success communicating with Apple and resolving issues before and after this incident, but they wouldn't make any exceptions in this case and there was no workaround. I made the decision to abandon working on the app and remove it from the store. It was disappointing, but the investment I made in learning and building this app was useful in building standalone versions of some Tonic Tutor games and the Checkified app I worked on with Julie Bruno. A walled garden like the Apple App store is a double-edged sword: you can leverage a huge built in pool of consumers, but you ultimately have no control and you're left at the mercy of the company that controls that marketplace.

Designed by: William Ratke

Technology: Swift, Objective C, XCode, Carthage, Cartography, SwiftyJSON, JSON, Custom API, Illustrator, Photoshop, Git

Tonic Tutor iOS: Menu
Tonic Tutor iOS: Student Menu
Tonic Tutor iOS: Notifications
Tonic Tutor iOS: Stickers