Serving iOS Binaries Directly to User Devices

A Tidbit: installing the app you’ve been building on an iPhone can be tricky. If you’ve never run into this problem, I can tell you a quick solution. You need a server to host your IPA, a hand-crafted manifest.plist to tell the phone info about the IPA, and an href link that’ll start a call to the manifest via Apple’s itms-services:// protocol. The manifest needs to expose info about the ipa’s location on the server, its bundle identifier, bundle version, and title (most complete ones looks something like this).

A Problem: how do you scale that process so that any…


Uploading Large Arbitrary Files in Chunks Into An S3 Object Store via RESTful API

Self Storage, CC BY-SA 3.0 <https://creativecommons.org/licenses/by-sa/3.0>, via Wikimedia Commons

Our hybrid cloud presents an S3-like storage solution, but does not furnish an S3 CLI like AWS does. In order to make use of the buckets, we needed a bound app (such that it handled credentials, auth, etc). We wrote a simple gateway API (called 3direct, because I like bad wordplay) in Kotlin, and complemented it with a java jar we wrote to upload the files (we called it Pitching Machine, because the whole project has baseball-themed names). It works pretty well, but the initial setup posed a risk: the API’s cloud instances only had allowances for 2GB of memory…


Credit: CC0 Public Domain

So, I work at a big company. Because my team builds and deploys all the iOS apps for our entire line of business, we’ve gotten a hold of 40 separate build nodes we’ve hooked into our Jenkins. We literally have more build real estate than we know what to do with. The downside? When I arrived on the team, we were maintaining those servers completely by hand. No shared configuration management, no automated reloads, nothing.

Most pertinent to this piece, though, was that we were managing signing certificates and provisioning profiles manually. Anyone who’s worked on multiple macs to build…


While working with React/Redux lately, I stumbled into a little bit of a problem: I had no idea how mergeProps worked. As an optional argument to redux’s connect function, it’s easy to forget about its existence entirely. So, I wanted to jot down some quick notes on how to use it before I forgot them.

MergeProps is used by redux to bundle together the mapStateToProps and mapDispatchToProps functions specified in your containers. If you don’t invoke mergeProps in the connect function, it’ll use the default mergeProps, which creates a generic object which contains propsFromState, propsFromDispatch, and propsFromParentComponents. …


The more I dug into the Go tutorial, the more I wanted to try using it out in the real world. Obviously, this is in no way motivated by my fear of the Concurrency section of the tutorial. While I’m planning to build a much larger app with it soon, I wanted to get my hands dirty building something small first. After some consideration, I settled on a Quote Generator.

Choosing a Framework

Seeing as how I was striking out into a new language for this app, I figured I should try and make everything else as familiar as possible. My initial hope…


So, I like to over-engineer things. I’ve been working through Go’s Tutorial, and I’d been stuck on the Maps exercise. It asks you to count up the number of times a word appears in a string, constructing a map to store the numbers each individual word shows up. I had thought, “Ok, they mentioned you could check if an element was already in the slice in the previous example. Great!”

func WordCount(s string) map[string]int {
m := make(map[string]int)
words := strings.Fields(s) …


Geomys bursarius, or the plains pocket gopher. Alternatively, Me, in my natural habitat, expressing concern about learning a new compiled language.

Personal story time! I started studying web development at Flatiron exactly two years ago. Though I’d done work with other languages before, the entirety of that course was in Ruby and JavaScript. Two languages, I’m sure you’re aware, not exactly known for static typing or needing compilation. I have, for most of the past two years, looked longing at the wild west of JS development, always afraid to jump back into learning, you know, low-level crunchy languages. Imagine my surprise when I decided a few weeks ago to start teaching myself Go.

One of the through lines for the past…


Recently, I ended up taking on the task of setting up at rest encryption for a DynamoDB we were going to use on our project. By the time I volunteered, we had decided on using the aws-dynamodb-encryption-java library. Amazon’s own examples in the documentation seemed fairly straight-forward, so we figured it would be fairly simple.

Either I love over-complicating things, or it maybe was not so simple. Initially, we tried to rig a solution invovling envelope encryption. …

Harrison Lavin

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store