Marc Schwieterman

Mobile CI in 2018

5 minute read Published:

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.

MB vs MBP

4 minute read Published:

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.

Modelines in Git Commit Messages

1 minute read Published:

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> 

Return of the Daemon

1 minute read Published:

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.

The Initiative

1 minute read Published:

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.

Bypass VPN by Hostname

3 minute read Published:

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.

Testing in the OSX Sandbox

2 minute read Published:

If you’re running Application Unit Tests, and have just enabled entitlements, you will immediately be greeted with an error similar to the following.

RubyMotion Functional Tests with Storyboards

2 minute read Published:

If you’ve been using RubyMotion, you probably noticed that some new testing features were released today. The video in the announcment post and the documentation are pretty good, so I’m just going to share a few things that I had to do to get things working.

OSX Lion Key Repeat in IntelliJ

1 minute read Published:

I’m mildly obsessed with Vim, so of course I prefer to use similar input methods whenever available. I’ve been working on a Javaish project lately, and I ran into the alternate character feature in OSX Lion, which does not play nice with the IdeaVim plugin for IntelliJ.

Testing Warden-Based Sinatra Apps

2 minute read Published:

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.