The iOS Engineer Toolkit (or how to maintain your sanity)

I used to use the command line for everything. Compiling, writing code in Vim, pushing to git — pretty much everything you’d need to do as an iOS engineer. There’s nothing wrong with that. More power to you if you don’t lose your mind doing all of that, but it just wasn’t my thing.

Part of moving away from the command line involved building my toolbox. There are so many options out there for a software engineer, many of them pretty much identical. It can be hard to decide between this, that, or the other. After wringing my hands and having nightmares about this for an embarrassing amount of time, I’ve finally completed my toolbox. Here’s that list, in no particular order.

XCode

My friends never want to play trivia with me…

Mm, yes. XCode. The IDE of choice for 99-ish percent of iOS Engineers out there, and for a good reason. Want to see a visual representation of what your app will look like? You can! Thinking of running and debugging your app in real time? You do that thing! Want to use all of the UI elements and advanced features that iPhones have to offer? XCode has you covered. The plethora of iOS and MacOS documentation can be found directly within XCode. Your test suite, performance and code analyzer, CPU and memory management — all inside one, 7 to 8 GB download. Beautiful. Plus, it’s heavily supported by Apple themselves. Of course, it has its pitfalls. I have a love-hate relationship with XCode. When it works, it makes me weep with joy. When it doesn’t, my rage is biblical (like, Old Testament/Greek mythology level rage).

GitKraken

A lot of the developers I work with/have met have different opinions on version control (managing how multiple people work on the same project at the same time). In terms of interfacing with Git (the more popular form of version control), there are plenty of different paths to take. I used to use the command line for git. I felt like such a badass, all that green text on a black background. Yes, I was that guy. It was alright for a while, but then I was introduced to GUI interfaces for Git. Specifically, I was introduced to GitKraken by a coworker here at SALIDO, and I’ve never gone back.

Isn’t it pretty?

If you’ve ever used a git client before, it has all the features you’re expecting. You can solo (or isolate) specific branches within your repositories. See commit histories, view tags of releases, start pull requests, use git flow, et cetera. Here at SALIDO, where we’re making changes to our code base and pushing new features almost constantly, GitKraken is essential (and very pretty). It helps you avoid that “I will strangle you” feeling when the other iOS engineer in the office creates merge conflicts or wipes out your code. You know who you are.

Fastlane + CircleCI

Now this is the holy grail among all of my tools. If I had to choose between deploying with Fastlane + CircleCI or writing and testing all of my code in a Google Doc, I’d pick Fastlane+CircleCI every single time.

Remember how I said SALIDO is constantly cranking out super rad new features? Well, that’s where Fastlane helps us out. Fastlane automates our app deployment to our various environments (development, testing, demo, production, et cetera). Normally, doing this from XCode is only kind of a pain. Provisioning profiles make me want to dropkick a baby raccoon (I haven’t, I promise) and sometimes, XCode just refuses to work. That all ends with Fastlane. Get your provisioning profiles in there, specify your deployment environments and you’re good to go! Here’s the cool part:

fastlane production

THAT’S IT! One line in your terminal/command line will deploy your code to production (or whatever environment you specify). I can’t tell you enough how great that is.

Our tests don’t fail. EVER.

Taking it one step further, we can integrate Fastlane with CircleCI. I won’t explain the ins and outs of CircleCI (check out the docs here) but the TL;DR is this: we can test and deploy specific branches just by pushing to a git branch and walking away. This speeds up our production tenfold and lets us enjoy the finer things in life (like Rocket League, of which I am the office champion, thank you very much).

Zeplin

My coworker here at SALIDO (shout out to Anthony Loven) wrote an awesome post about how Zeplin and SALIDO combine to create the awesome interfaces you see on the SALIDO PointOfSale (check out the link below. go read it). Zeplin helps designers in the same way it helps engineers love life a little bit more. It does everything from exporting assets directly into the XCode assets folder, to getting HEX codes for colors, to getting precise measurements and layouts for everything on the screen. It makes my job incredibly more straightforward. Zeplin is a godsend. All hail Zeplin.

Slack

Obviously, Slack isn’t just an engineering/development tool. It’s used for more things than I can count. At SALIDO though, we use it to discuss changes to code, yell at each other when we’ve broken the build, plan our weekly engineering happy hours/team lunches, and log information from the SALIDO platform. It’s efficient, helpful from a technical standpoint, and the giphy integration is, in a word, fantastical.


There’s more to add to this list. We use an assortment of little tools here and there to get the job done. There’s that saying, “There are many ways to skin a cat”, and its very true (and morbid). Whatever gets the job done is awesome, but these are my essentials. Without these, I’d most definitely lose my mind.