Keep Calm 3
November 7, 2013
For the last few weeks I’ve been working on a major update to Keep Calm for iOS. Version 3 is available on the App Store today. End users will get the benefit of the following new features:
- Faster: The whole app is now at least 10% faster (in my tests on several different devices) across most features and around twice as fast in core areas such as importing images and saving posters
- More logical: Rather than having to use the toolbar at the bottom of the screen to edit parts of the poster you can now just tap on the crown, text or background to edit it
- More helpful: When you open a new feature for the first time (such as the main grid, the poster view or the text editor) a short alert that you can tap to dismiss will be presented
- Change which lines of text are small: In previous versions of the app all three letter lines were automatically made smaller (this is based on the original Keep Calm and Carry On poster, where the middle ‘and’ line is half the height of the surrounding text) however you now have full control over which lines are made smaller - simply begin a line with a lowercase letter to make it small, and an uppercase letter to make it big
- Share square posters for free: Previously when free users shared a poster to Instagram they would get a lower quality poster that was clipped on either side - maintaining the original aspect ratio. However, now all users can share high quality square posters
- Bug fixes: I’ve aimed to make this version really solid, and there are far fewer bugs than before (it has been very rewarding going through Crashlytics and marking bugs as resolved). Provided that all goes well with this version, v3 will be the last major version with support for iOS 6 (I may do a minor bug fix version before a release that is iOS 7 only)
- New welcome screen: Previously when you first launched Keep Calm you would see a four pane, spinning welcome guide to Keep Calm, however I’ve now reduced this to a far more subtle page that all users will see when first launching Keep Calm 3 (you will see it regardless of whether you had previously opened the app, this is because the App Store automatically updates apps in iOS 7 so users don’t see the what’s new description by default any more)
- Better saving experience: Now when you save a poster to your photos from Keep Calm it will be added to both your Camera Roll and a special ‘Keep Calm’ album
Technical notes
I’ve rewritten the vast majority of both the model and view layers of Keep Calm for this release. The first major part of this was migrating over to a far simpler Core Data model - previously each poster was represented by seven different entities (mostly colours), however I’ve reduced it down to a single poster with five strings and five numbers representing each poster. Much better! This also has huge performance improvements - when changing a colour rather than having to edit three separate attributes in a separate entity only a single 32-bit integer needs to be manipulated now.
Migrating over to the new model was an interesting problem, and unfortunately I had to write a custom migration class that will migrate data over from the old model to the new model, which is done on the first launch of Keep Calm. In my tests this usually happens fairly quickly, and hopefully nobody will lose any of their posters!
Another big change with this version is that I’ve extracted and abstracted a lot of the core code that doesn’t do anything particular with the posters (colour manipulation, image saving, in app purchase, etc) into a new framework that I’m also sharing across Hipster Lab and hopefully my other apps in the future. The framework is fully documented and I hope to open source it under the Apache license at some point soon - it represents around 30% of the code in Keep Calm (but a much smaller percentage in Hipster Lab because there is a lot of custom drawing code there).
Advertising
Because I’m now giving away a previously paid feature - sharing square posters to Instagram - for free I’ve included ads via iAd in Keep Calm. I’ve aimed to make these ads fairly unobtrusive (they only appear at the bottom of the screen where the toolbar used to be). Back in the summer I did something similar on Android and the positive feedback of adding the Instagram feature in far outweighed the negative feedback of the addition of ads.