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

====== fin ======

Related Posts

Yeah. I did it. I bought the longest domain I could.

Well, most of it anyway - I wanted to buy ahugeevergrowingpulsatingbrainthatrulesfromthecentreoftheultraworld.com, but had to settle for ahugeevergrowingpulsatingbrain.thatrulesfromthecentreoftheultraworld.com.

I learned something in the process: there is an upper limit to the number of characters in a domain name. And not just the domain, but each ‘label’ as they are called, being either subdomain, domain, or top level domain (TLD).

63 characters.

I think I broke half of the domain registrars when trying to buy it.

My working setup

Updated June, 2024

Here’s how I currently do my work, both personal and professional.

  • iPad
  • Mac
    • Terminal with Oh-my-zsh for terminal-ly good looks (and shortcuts)
    • Doom Emacs - I wrote about doom emacs for blogging
    • Roon - Can’t work without music!
    • Visual Studio - replaced TextMate and SublimeText and haven’t looked back; strange for me to say that for a Microsoft product (different than say GitHub, which was an acquisition)
    • 1Password - long-time user
    • Trello - Despite the Atlassian acquisition, this is still my go-to for just a general purpose throw it up and track it. Using the Assista bot for time tracking on tickets I drag into the Doing list - it helps a lot with billable work, but also helps me track where my play time goes.
    • yt-dlp - it’s a secret
    • CyberDuck - connect to anything for remote file access/management
    • Homebrew - I see no reason to leave this hardy package manager - it’s just worked under brutal conditions for years and years.
  • Home network
    • Fiber, it’s the only way to fly
    • Unifi network throughout house; wired (by hand, blood, dust, cobwebs, and pink spackle) and wireless
    • Pi-hole - remove all the craptasic stuff out there, network-wide
    • Tailscale - take my networks with me securely (recent addition so lots to learn)
  • SaaS
    • Cloudflare - it’s the only online service that I don’t have a fear of recommending. Yes, there might be some issues from the centralization of the decentralized web, but right now, that’s not a critical path issue.
    • Hugo - The most performant, flexible, and joyous web development platform. This site and my LLC and Synth company are built with it.

Trouble getting `pod install` to work in React Native

Just make sure you have Xcode installed first. That’s it. :) Also: I’m a jackass. #RTFM