So the last couple weeks we’ve been working on rewriting our very first nontrivial app to act like a decent citizen of iOS 7. Which remained essentially unchanged architecturally from late 2008 up until last month, save for the grafting in of IAP to download content instead of ship separate apps in early 2010. Have you taken an iOS 2 architectured app and rewritten it for iOS 7? Makes you really, seriously, appreciate just how far and fast this business of ours is moving, that’s for sure. So in the spirit of those tool posts people like making, let’s list the third party goodies we used, none of which existed when this product was written, just for a get-off-my-lawn chuckle at how hard things were in those sadly primitive days five whole years ago. And to point out some nicely iOS 7 savvy convenience pods that might have escaped you thus far.
1) mogenerator and Core Data reduced the data management code by three full orders of magnitude. Not to mention that being able to preload all your data with an OS X command line tool and test it at creation time saves multiple weeks’ worth of futzing around tracking down mistypes in your plists like we did back in those iOS 2 days. Ah, automation is wonderful.
2) Urban Airship is of course the unquestioned leader in push notification these days — we’d actually started working with iLime at some point here, remember them? — and it took just a few lines to use it to implement remote unlocking of iTunes Store hosted IAPs; functionality the current version manages with delusions of adequacy via a Google App Engine backend and our own content hosting. All of which we will be absolutely enthralled to send packing.
3) Flurry likewise for analytics. We’d almost got around to successfully integrating Pinch Media — remember them? — at some point, but ran into some kind of link problem or something that we forget now and didn’t bother holding up shipping for. And never got back to. Add four years, and why, it’s just amazing how free and easy analytics are to drop in, isn’t it now?
4) Speaking of free and easy, wow does Crashlytics ever rock. Remember when dropping in PLCrashReporter was bleeding edge state of the art crash management? This project does.
5) And finally getting around to our post title here, CocoaPods takes in a walk the Best Damn Hero Award for Awesomeness Of Expedited Development compared to five years ago. For anybody, but especially for us; twenty years of making a living mostly out of porting from Windows before this iPhone thingy happened along has trained us to crank up our compiler warnings to self-righteously OCD level — why yes, everything we write for our own projects does compile just fine with
-Weverything, how about you? — and
-Werror in release builds too. Which makes it always a time sucker to integrate other people’s code. CocoaPods sidesteps that nicely, as well as real problems, and even sorts acknowledgements for you. What’s not to like, indeed. Bonus mention to CocoaControls for including CocoaPod savviness in their likewise intrinsic awesomeness.
Here’s the pods that we’re linking into the version shipping off to the Apple approval gauntlet soon as we pull all the non-code stuff together:
pod 'AFNetworking', '~> 2.0.3’
Pretty sure most everybody uses AFNetworking these days for their networking needs, RIP ASIHTTPRequest. The funny part here is that after setting up CocoaPods for the new version’s project thinking “we’ll throw in AFNetworking for one pod to start out with, OBVIOUSLY we’ll be using THAT” we ended up not actually having any networking needs in the 2.0 release — everything that we absolutely had to do ourselves over the network in the first version was replaced by the libraries above or rendered obsolete by free Apple-hosted IAP, and what little remained hasn’t turned out important enough to bother with right now. But we probably will later, so we didn’t bother taking it out. Besides, it gives us a chuckle thinking of all the time spent tracking down networking issues back in the day every time we look at it.
pod 'CTFeedback', '~> 1.0.4’
CTFeedback adds a nice info-providing wrapper around your standard mail feedback writer.
pod 'FastImageCache', '~> 1.2’
FastImageCache is woo-hoo! fast. Got any gallery-type displays? Use it.
pod 'JPNG', '~> 1.2’
nicklockwood / JPNG “is a bespoke image file format that combines the compression benefits of JPEG with the alpha channel support of a PNG file.” And you can use it just like a JPEG where you’re not concerned about alpha, convenient that.
pod 'MRProgress', '~> 0.2.2’
MRProgress has all kinds of looking right at home in iOS 7 progress display options.
pod 'RMStore', '~> 0.4.2’
RMStore in our opinion does by far the best job of actually helping you instead of mostly getting in your way of any of the IAP helpers out there. And does iOS 7 receipt verification! Hosted downloads aren’t integrated into the main distribution yet, but this pull request works just fine for us.
pod 'TDBadgedCell', '~> 2.4.1’
TDBadgedCell does up your cell badges nice, looking fittingly in place in iOS 7.
pod 'TWSReleaseNotesView', '~> 1.2.0’
TWSReleaseNotesView shows release notes — either included with the app or pulled from the store automatically.
pod 'UAAppReviewManager', '~> 0.2.0’
UAAppReviewManager is like your usual review beggar alert, and extra niftiness like affiliate support and OS X support.
pod 'WYPopoverController', '~> 0.1.7'
WYPopoverController is pretty darn sweet for laying out your iPhone + iPad storyboard-based iOS 7 UI with optimal aplomb.
Kinda cool to look at this list of third party goodies that made your 2013 app development faster and better and compare with the “absolutely nothing” that would have made up an empty post on the same topic for the 2008 version of the app, isn’t it now?
Continue Reading →