Music, Tech, & Art

Let's build an iOS app

Ok. It’s time for Creatabu to launch an iOS app and we’re trying to figure out the best path considering we’re a team of two and only have one developer, yours truly, who is not familiar with Objective-C the language you use to build native iOS apps.

So…we’re in a pickle…and this isn’t the first time:

^ We’re like, really into pickles. Our 2014 Burning Man Camp – What Would You Do For A Pickle – shout out to the pickles!

I embarked on buying up a few classes on Udemy and a couple of books to teach myself Objective-C, after all, that’s how I did it to learn Rails to build the current version of Creatabu.

Stepping back for a moment, some context on why I chose Rails for the dot com. A few years back, I was working at Live Nation as a product manager and my boss Ethan Kaplan was spewing out a menagerie of words I had never heard before…like Heroku, Ember, CICD, TDD, gems, rake, etc… Since I wanted to make an impression, I made sure I noted every word and then read each. I uncovered an entirely new universe words stemming from those few. The main thing I took away was that Rails made it easy to build websites, which was important considering we were going to launch an entirely new site for Live Nation, and that Ruby was built to be a fun language to code, as exemplified by a quote from Ruby’s creator:

Often people, especially computer engineers, focus on the machines. They think, “By doing this, the machine will run fast. By doing this, the machine will run more effectively. By doing this, the machine will something something something.” They are focusing on machines. But in fact we need to focus on humans, on how humans care about doing programming or operating the application of the machines. We are the masters. They are the slaves. – Yukihiro “Matz” Matsumoto, creator of Ruby

Ruby is awesome and fun…Rails makes building sites easy…so I dug in and learned it well.

Back to today…a year after building creatabu…and it’s time to look at learning another language. I started taking the classes for Objective-C and let me tell you that the magic and fun disappeared. Of course partly because learning something new is hard…and liking the thing you know is easy, but also because, as I researched, it’s actually pretty difficult. Enough so that Apple released Swift to help alleviate some of the well-documented developer pain.

I asked a number of developers (and then some) friends – Joe & Bennett & Bill & Mark – what gives? Is it really that hard? Was it just because my classes weren’t good? They were kind enough to reply and point me in a couple of directions:

  1. learn Swift, it is an improvement over Objective-C
  2. this video (and other Udacity resources)
  3. this Code School path
  4. stop being such a wimp (my interpretation).

I continued to look around and read for a solid 8 hours…especially looking for people that took the same path, Rails –> Obj-C/Swift. I found a lot of people griping similarly about hitting a wall with iOS dev…at least I knew I wasn’t alone. Eventually I stumbled across RubyMotion – a framework to build native iOS apps using Ruby.

Wait! Say that again? You can build native iOS apps using Ruby!!? No way, too good to be true. So I read for another 8 hours…looking for tears in this silver lining.

Turns out that it’s a pretty solid silver lining – at least from my reading. You get access to all of the iOS SDKs and you keep building in your current workflow (Terminal + Sublime Text in my case, instead of Xcode). The best way to look at RubyMotion is as a transitional framework – a way to use what you know for the hard parts and learn the easy parts of what you don’t know, first. Then, as you transition, you eventually dig in and learn the hard bits that you don’t know. The perfect transition tool.

This is just the beginning for me…looks like I’ve made the decision to build our first iOS app in RubyMotion (pending a book to read and some test apps to build this weekend). I will continue to post as I go through the process so you can follow along.

Here are some of the links I found most useful in evaluating this decision (best to read in the following order):

http://katanacode.com/blog/posts/12-a-review-of-rubymotion-in-2015 - A Review of RubyMotion in 2015 – General background https://signalvnoise.com/posts/3432-why-i-loved-building-basecamp-for-iphone-in-rubymotion - Why I loved building Basecamp for iPhone in RubyMotion – Why Basecamp app was built using RubyMotion https://signalvnoise.com/posts/3743 - Hybrid sweet spot: Native navigation, web content – A bit on how Basecamp app was built using RubyMotion https://signalvnoise.com/posts/3807 - Shipping Basecamp for iOS 2.0 – Why Basecamp app v2 was built without RubyMotion

UPDATE: This video https://www.youtube.com/watch?v=ZV5zCXHIqNY, from the creator of RubyMotion, Laruent Sansonetti: RedDotRuby 2015 - RubyMotion: Cross-Platform Mobile Development the Right Way