It’s been a couple years since I looked at the options for Mobile Continuous Integration (CI) for iOS apps. Last time I did this, I decided on BuddyBuild, who has since been bought by Apple. Unfortunately BuddyBuild is no longer accepting new customers, and they discontinued free plans and Android support in March of 2018. I hope this means that Apple will offer their own hosted CI solution soon, and with any luck it will go as well as the acquisition of TestFlight did. There was no news at this year’s WWDC, so for now we must find something else.
I’ve been using a second generation MacBook for a little over a year now, and in many ways I love it. The performance is good enough most of the time, and the portability has helped me get a lot more done because of how easy it is to carry the MacBook and use it in a variety of places.
All that said, I had enough performance and stability issues that I was eager to upgrade when the third generation model was announced at WWDC. While I have no issues upgrading my iPhone every year, it’s been very unusual for me to want to upgrade a Mac that often. I decided to try the MacBook Escape1 alongside the latest MacBook because I want to be sure I’ll still be happy with my Mac this time next year.
I’ve been cleaning up my Vim config this week, and I noticed some strange errors while doing an interactive rebase in my dotfiles repository.
Error detected while processing modelines: line 1: E518: Unknown option: <some text from the first commit message>
I’ve been enjoying having the new Apple Music service in iTunes quite a bit, but one thing has been driving me crazy: the keyboard controls don’t work anymore. Except they do.
My friend Bill and I have been working on a podcast about learning iOS development, and it’s finally here. We recorded several episodes before we figured out enough of the recording and hosting process to release anything, so there’s already a decent backlog. New episodes should continue to come out every Friday.
Check it out at The Initiative.
If you run VPN on your router, you may have had cases where you want Internet traffic to bypass the VPN. Most solutions I’ve found use some form of a script originally found on LinksysInfo. However these approaches are IP based, which can be a problem if those IPs change, or if the service you’re accessing uses a CDN. If your router is running firmware that supports ipset, you can use dnsmasq and iptables to solve this problem.
I recently integrated Warden into a web service I’ve been building with Sinatra. Unfortunately doing so completely broke some of my tests. I spent a while trying to figure out how to stub out the Warden object before I discovered that Warden already provides support for testing. Awesome. While I could load my config.ru in the test, there are other things in there that I’d rather not deal with while testing. I came up with the following approach, which lets me more or less test the web service in isolation.