Clay Allsopp

RubyMotion - Year One

May 5, 2013

One year ago, this post appeared at the top of Hacker News. It was one of those mysterious moments where the exact thing I was looking for showed up like hours after my cranial lightbulb flickered on and I realized what I had always wanted: "Ruby for iOS. Bingo."

See, I had been exploring projects like Nu and Wax and even hacking around JavaScriptCore, trying to find a different path of doing iOS development. The whole Xcode/Objective-C workflow is fine and had worked for years, but compared to how we build web apps something just didn't sit right. Not so much a "painful" difference that prevented me from getting stuff done, but more of an "awkward" or "uncomfortable" tension that we all kind of go along with because hey, that's how it's gotta be, right?

I guess I wasn't alone in thinking, "Nope, it doesn't have to be like that." I bought RubyMotion on that release day, and I still get that "new software" smell tingling my senses whenever I remember my first attempts at building something for it:

(or yeah, maybe it was just the funky odor of the place I was living back then.)

Anyway, it's now been a year since RubyMotion came to town - what's happened?

I think one good visualization is the commit history for the RubyMotion-Wrappers site, which is a sort of community-curated database of popular RubyMotion projects. I launched it shortly after the release of RubyMotion with 10 initial projects; since then, it's quadrupled in size and continues to have steady growth every week. The community has released libraries for everything from ActiveRecord ports to game engines to rethinking how we structure iOS apps.

According to RubyGems, the most popular RubyMotion projects are SugarCube and BubbleWrap, which have been downloaded more than 50,000 times. That's also a fun metric to use as a proxy for how well HipByte (the company behind RubyMotion) is doing, so I don't think you should worry about them going belly-up any time soon.

We're using RubyMotion in production at Propeller, as are 37signals and several other award-winning apps. HipByte continues to be on-top of their game and releasing updates left-and-right: RubyMotion stands at version 1.35, so an update just about every other week for the past year. They were able to ship iOS 6 support within 24 hours of the beta SDK being released, and I have no fears as to RubyMotion falling being or into deprecation.

And to be honest, my interpretation of RubyMotion's first birthday is a little entangled with what I've been up to this year. I've released more than what most psychologists probably consider a "reasonable" or "healthy" amount of open-source projects for RubyMotion. Plus, I wrote a book on the thing which has been read and enjoyed by way, way more folks than I had ever dreamed it would.

Is RubyMotion helping? Anecdotally, it's empowered a huge swath of developers and companies which, for a rainbow of reasons, weren't able to move forward with Xcode or Objective-C. For everyone else, RubyMotion has brought a strong sense of Test Driven Development over from the Ruby community, a vibe which I always found conspicuously absent in every iOS discussion. The rake-based workflow, rather than pushing buttons and checking boxes in Xcode, gives your projects a build system to hack upon and develop some incredibly useful tools. And, just in-case some code needs to be outside of RubyMotion, you can always bundle any Objective-C project alongside your Ruby code.

Folks still ask about "Rails for iOS," and if RubyMotion is helping create that. A year later, I think it's still unclear what a "Rails for iOS" even looks like or what problems it would solve. Mobile development, RubyMotion or not, is just getting to an age where we've seen enough design patterns in the wild to start making sense of how everything, client and server, fits together. In other words, I don't think we can tackle what "Rails for Mobile" looks like until we've decided out what is a "Basecamp for Mobile" (not to be taken literally).

At the end of the day, if you don't like Ruby, if dynamic typing and no compile-time hints are just not your thing, then RubyMotion won't change your mind. But if you dig Ruby or Python, or maybe feel dissatisfied with Xcode and Objective-C, then maybe give it a try. Personally and professionally, I'm still bullish on the future of RubyMotion - the community, the product, and the company.