My Ultimate Developer and Power Users Tool List for macOS Sierra (2017 Edition)

This is the latest installment of my must have must have list of tools and utilities as a macOS and iOS developer. The idea for this list was shamelessly ripped off from Windows developer Scott Hanselman whose list has long been an enjoyable read when he updates it.

There have been significant changes since I last did one of these. I’ve tried to mark anything new in bold.

Hardware

Since I last updated this in 2013, my hardware has changed significantly.

I am still maintaining a dual Mac setup. My daily driver is a Late 2015 27" Retina 5K iMac with a 1TB SSD and 32GB of RAM. After nearly five years, I replaced my old 2010 iMac that was starting to show its age when compiling Swift. Swift eats hardware for breakfast, lunch, dinner, and fourth meal. I’d say this was Apple’s genius plan to sell more Mac hardware, but they can’t be bothered to update their hardware lineup regularly so there went that theory.

At home I am using my 15" Retina MacBook Pro with a 1TB SSD and 16GB of RAM. This is one of the new Touch Bar models and it’s fine. I somehow have been able to survive without a physical escape key or a row of function keys. I assume this makes me lose some sort of geek cred. Sorry, nerds.

I used to be a big Dropbox user, but I’ve moved all of my files over to iCloud Drive because it’s good enough. I take advantage of the Shared Desktop and Shared Documents functionality of macOS Sierra. Photos are stored in iCloud. Calendar and Contacts too. It works, usually. There wasn’t anything wrong with Dropbox, but it was just another thing I was paying money for that wasn’t super necessary when there’s a good enough alternative baked into the OS now.

In terms of accessories and upgrades:

  • I use a Das Keyboard. I love it. The Das Keyboard doesn't make me a better developer, writer or person. It just feels satisfying to use.
  • On the left side of my iMac I use a Magic Trackpad 2 for swiping and gesturing between full-screen apps and Mission Control. I am a big user of multitouch gestures in Sierra, so I am incredibly comfortable using the trackpad.
  • On the right side of my iMac I use a Logitech MX Master to do all my pointing and clicking. It has more buttons than I have fingers, but somehow I have found a way to map a unique action to each one.
  • Time Machine backups are handled by a 4TB LaCie d2 Thunderbolt 2 drive. It's fairly quiet and is one of the few external drives I've found that doesn't have a horrific design. The blue light has a piece of duct tape over it though because it was distracting.
  • I connect to the Internet through my Netgear Nighthawk X8. It has four giant antennas on the back and looks like it may take off at any point. I am interested in trying something like Eero in the future, but for now the Nighthawk works.

Software

I am really hard on software. This is for a variety of reasons, but I think it is because I build it myself. I have always envisioned that directors and actors can sometimes lose focus during a movie as they judge the decisions others made in their productions. I feel like I do the same thing with software. I loathe poor and/or non-native user interfaces and cherish simple tools. These are applications I constantly rely on.

The Essential Five

  • Dash - I know Apple keeps trying to improve the documentation viewer that ships with Xcode, but I am still a loyal Dash user. Not only does it work with Apple’s documentation, but having other languages I may be using accessible as well is a big win.
  • 1Password - One of the first tools I install. I store not only passwords, but also things like Amazon access keys, SSH credentials, and a variety of other things I need to secure with 1Password. Hopefully it’s more secure than the DNC email servers.
  • OmniFocus - I don't know how I ever stayed organized before OmniFocus on my three screens. It's my brain. With my work tasks, I tend to take what I am currently working on and break it down into separate OmniFocus projects that I can focus on as a daily task. It’s easier than tracking everything in Asana or whatever bug reporter of the week my clients are interested in.
  • Atom - The last time I wrote one of these posts, I was a devout Sublime Text user. Before that I was a BBEdit user. Now? Atom from GitHub. I use Atom for any non-Xcode related development tasks I have as well as looking at log files and other random bits of text.
  • Tower - I can use Git via the command line if I have to, but I don’t see any reason to when there’s a powerful app like Tower there to do hide all the weirdness from me. I probably use this app more than any other third-party app on my Mac.

Developer Tools

  • Xcode - If you write macOS, iOS, tvOS, or watchOS applications, you spend most of your life in Xcode and Instruments. I am no different.
  • Appfigures - Manually fetching iTunes sales reports is tedious. Appfigures is a low-cost Web service that will import your reports and send you a daily sales email. I also like to funnel our reviews into a Slack channel so we are more aware of what users are saying.
  • Base - Core Data generates a SQLite database under the hood. I'm constantly inspecting the database contents using this application. It's lightweight and easy to use.
  • Charles - Sometimes I want to snoop the traffic that is going through an iPhone app. Setting up Charles makes it pretty easy to do just that.
  • Color Picker: Must have. Choose whatever color you want and then it will output a UIColor or NSColor for you.
  • Git: I am now exclusively on Git for version control. Thanks, GitHub.
  • HockeyApp - I am using Hockey for handling crash reports. Microsoft bought them a few years ago and continues to improve the service with other features, but I find the crash reporting to be the only indispensable function. At least until I can learn to trust iTunes Connect.
  • Hyper - I am using more Electron apps by the year it seems. Hyper is a replacement for Terminal built on Electron. I don’t do anything special with it over the bundled Terminal app. I just like how it looks. I am such a Mac user.
  • Kaleidoscope - I have never been a fan of the bundled merging tools with Xcode. Kaleidoscope is vital to my workflow when running diffs on my Git commits. It’s too bad this is seemingly abandonware. It’s a great app that I plan to keep using until it no longer launches.
  • Patterns: I don't think I will ever fully grasp Regular Expression syntax. Patterns makes it easier for me to fumble around trying to build and test a regex compared to doing sample finds in Sublime Text.
  • QuickRadar - The RadarWeb UI still sucks. QuickRadar makes me more likely to file bugs because it is in my Dock, it can cross-post to OpenRadar, and it has never crashed or lost a bug report while I was trying to submit it.
  • Realm Browser - Core Data is trash. I’d use Realm for every app if I could. Since Realm uses a custom format for its database you need an app to inspect it. For SQLite you use Base. For Realm, you use this.
  • Paw - I keep a Paw document for each API that I interact with so that I can quickly test out API calls to see what the JSON returned is.
  • Sketch - If you work with a designer they are most likely using Sketch. Keeping a copy nearby so you can inspect files is handy. I also use it for my super rudimentary design on this site.
  • Slender - If you're using Xcode I bet you have a few assets in your Xcode project that are no longer in use. Those kilobytes are wasting your customers' bandwidth and yours. Slender analyzes your Xcode project and finds those assets that are no longer in use so you can safely delete them.
  • Slack - If you work for a startup, you are contractually required to use Slack at this point.
  • VS Code - If you take all the disdain I have for Xcode and inverted it, you’d have my affection for Visual Studio Code. A powerful programmer IDE that gets meaningful monthly updates and has a vibrant, useful plugin community? I’m in love.
  • xScope - I use xScope to detect colors on various UI elements, check alignment of controls and to measure the distance between objects. If you (or your designers) are meticulous about your UI, it's an essential utility.

User Tools

  • Acorn - Acorn is my favorite image editor for the Mac. It's fast, intuitive and looks pretty neat too.
  • Backblaze - While I primarily rely on Time Machine for my backups, I also subscribe to Backblaze to offload the contents of my hard drive to the Internet for when I am burglarized for the third time this decade.
  • iStat Menus - Since Swift enjoy eating CPUs for breakfast, I like to have a quick way to see how taxed my system is during compilation. iStat sits in my menu bar and gives me all the essential info I need.
  • OmniOutliner Pro - When I am doing more complex writing projects than a blog post, I outline the entire thing in OmniOutliner. The ability to have drop-down fields is one of my secret weapons. Love that.
  • Pastebot - I never thought I would be one of those clipboard manager people, but Pastebot is so simple that I converted. The ability to sync my clipboard over iCloud is honestly what won me over. It’s like Handoff’s copy/paste support, but reliable.
  • PDF Expert - Preview is a fine PDF viewer, but I’ve come to adore PDF Expert because of its editing capabilities and super easy signing of documents.
  • Rocket - If you’ve adapted to using Slack for throwing emojis out, Slack brings that functionality to your Mac. Now I can easily throw out a 💯without a few keystrokes.
  • Soulver: Soulver is the best calculator app on the planet. There is no debate.
  • The Unarchiver - A file extraction utility is somewhat of an unsung hero, but when you need it, it's good to have a utility that is robust and can fit almost any bill. The Unarchiver does that and does it well.
  • TunnelBear - Since the United States Congress seems keen to allow ISPs to sell all my data without my consent, I tend to run a VPN as much as possible these days. TunnelBear is my preferred one for the last few years. It doesn’t hurt that their branding is adorable.
  • Twitter for Mac - You probably use Tweetbot, but I actually prefer the official Twitter client for desktop tweeting. Sorry to all those offended.
  • Ulysses - I wrote this entire post in Ulysses. In fact, I do most of my writing in Ulysses these days. It’s both a fantastic Mac and iOS app.
Read more about. . .

Showing Debug and Info Logs in the macOS Sierra Console

This is one of those "it's obvious in hindsight" problems I ran into recently.

At the day job, we have been migrating all of our logging code from Aspen to Apple's new Unified Logging System. This has been a win for the most part: we got to terminate a third-party dependency, while also getting some advanced features such as log filtering based on a category or subsystem.

The problem I ran into last week was trying to debug a background session issue on my iOS device. We use the different logging levels provided by os_log to help keep users logs a bit less chatty than just spitting out print or NSLog statements everywhere. By default, the new Console app in macOS Sierra only shows logs that match the error level (or have no level at all). I needed to see our debug and info log information.

If you watch the WWDC video on the new logging system they show you a few Terminal commands you can run to adjust your logging level on the Mac. It doesn't really show you how to adjust that for an iOS device plugged into your Mac, however.

Long story short, there's no Terminal command. There's two options in the "Action" menu on the Console. Just select "Include Debug Messages" or "Include Info Messages" and you are good to go.

Turn on info and debug messaging in the Sierra Console

I sure felt dumb once I figured that out. You win this round, Apple.

Read more about. . .

Improving the iPad By Making it an iMac

Jason Snell on “improving” iOS for the iPad:

Will we see a 20-plus-inch iOS desktop with a windowed interface anytime soon? I doubt it–but I could imagine one existing in the next three or four years. And I have to be honest, I’d be intrigued by the idea of replacing my 5K iMac with one. It just needs to be able to run a bunch of apps at once, and let me arrange them in a way that works for me.

Tabbed interfaces, multiple windows, and a laptop form factor? If he had just mentioned needing a file system, I would have hit BINGO.

Read more about. . .

The Conference Circus

I want to quote this entire article by Pedro Piñera, but I’ll just highlight my favorite part.

By tagging the elite as “experts” in different areas we put them under pressure. Pressure to keep that label and keep being active. I have to be at more conferences, I have to keep proposing more talks, I have to check Twitter or post that I opened a radar about a crash in the last Xcode version that is still beta. As you might guess some people can’t handle that and it leads them to burnout. I’ve heard it from a few developers. I had to stop attending conferences because I got burnout. Moreover, some can’t control the ego. Being part of the elite sets them levels above you. No matter how you approach them, the way they get back to you depends on the levels you are far from them. That’s very bad.

I spent a good chunk of 2010 to 2014 on the Conference Circuit accepting speaking gigs as exciting as a theatre in Australia to a Holiday Inn in the Chicago suburbs. I noticed pretty much the same things as Pedro. You had a pretty good mix of:

  1. Person who does nothing but conference talks year round. They talk about writing software more than actually writing software.
  2. Person who is incredibly unprepared and will just eat shit in front of their audience. This is the worst person of all.
  3. Person who is speaking for the first-ish time and has new and interesting ideas to share.

I’d much rather attend a conference with the third person than the first two. I want to learn from people in the trenches, not someone who makes their living collection frequent flyer miles going from conference to conference. When I stopped doing the conference circuit, I was worried I was spending way too much time becoming #1.

Now, I do one conference a year: 360iDev. Moreover, I will only do 360 if I have something new to share. I did three separate years worth of Auto Layout talks, each with a unique set of content for anyone that came annually. This last year I instead opted to do a talk on application architecture, because I had spent so much of the summer of 2016 digging into the guts of the application I work on most of the day and trying to imagine how to rearchitect it for its next 5 years of growth. Instead of just trying to sell more copies of the Auto Layout book by rehashing an old Auto Layout talk, I opted to take my newest learnings and share them with the audience. It takes me a week to prepare my presentation, but I hope everyone that leaves my room learns something and doesn’t feel like their time was wasted.

Fighting Back

Like most people in my bubble, the US Elections didn’t exactly go how I planned.

There’s been a lot of handwringing about how to best fight back against an administration that you and other like-minded folks are staunchly against. While I’m all for a good bit of slacktivism as much as the next guy, I’m trying to extend my anti-Trump rhetoric beyond just a safety pin and a few angry tweets.

Staying Informed

I admit that I have tuned out much of the news and politics over the last decade. As the right has gone farther right (and the left farther left), I have been left on an island in the center feeling unrepresented. Sticking my head in the sand and ignoring the issues hasn’t exactly worked out that well, so now I’m focused and paying attention.

Keeping up with the daily news of what happens in Washington, locally in Denver, and even globally is more important than ever.

The Affordable Care Act is flawed, but it’s also the only way I have been able to get healthcare in the last few years. I’ve long been rejected for individual coverage because I take anti-depressants. I’m otherwise a healthy, fit 34 year old. But my one $25 a month prescription was grounds for Anthem, United, or whomever to reject me. For all its flaws, Obamacare fixed that for me. If Donald Trump and his party want to repeal the ACA, they damn well better have a better solution. I’ll be paying attention and ready to judge that.

Supporting The Press

Beyond just paying attention to the news, I’m putting my money towards journalism more directly than just eyeballs through ads. I’ve subscribed to both the New York Times for my national news coverages and the Denver Post for local coverage.

The approximately $20 a month this costs me won’t pay anyones salary, but my hope is that if newspapers have a bit more money to work with, they can focus on keeping our leaders honest instead of just keeping their lights on.

Supporting Your Causes

I am not much for protesting, a bit too busy to work a phone bank, and way too socially awkward to run around trying to collect signatures or whatever people with outgoing personalities do. I am however able throw a little money at problems.

I have long been a financial supporter of the EFF, but my donations to other causes have either been nonexistent or one-off as I felt necessary. No more. I’m now a recurring supporter of the causes I care about and want to help protect.

  • The ACLU is already gearing up for many a battle with a Trump administration that will likely look to trample over our freedoms at every turn.
  • The [Natural Resources Defense Council][nrdc] is prepared to protect our planet and hopefully prevent the new administration from undoing decades worth of forward progress against climate change.
  • I’m supporting Planned Parenthood, both because I agree with their mission, but also because I know it drives my Fox News watching relatives nuts.

You don’t have to support these, but if you are able, I’d recommend finding a group that you do align with, and supporting them however you can.