WWDC 2016 5 Minute Update: Opening Up iOS, Xcode Extensions, Apple...
A very brief summary of changes & impressions from WWDC 2016 Day One.Opening up iOSThe most notable changes to iOS were the addition of many APIs and Extension points. Apple wants to allow...
View ArticleReal World Flux Architecture on iOS
About half a year ago we started adopting the Flux architecture in the PlanGrid iOS app. This post will discuss our motivation for transitioning from traditional MVC to Flux and will share the...
View ArticleBridging Existentials & Generics in Swift 2
We are back to another episode of discussing generics, protocols with associated types and some type system limitations in Swift 2. This time we will dive into an interesting workaround that the...
View ArticleBroken Toolchain Post Mortem
Dependency managers, IDEs, continuous integration, automated tests - all these tools are created to supercharge a developer team’s productivity. While modern development tools are amazing in many ways,...
View ArticleDeclarative API Design in Swift
In my first real job as an iOS developer I built an XML parser and a simple layout engine - both had in common that they had a declarative interface. The parsers was driven by a .plist file that mapped...
View ArticleApple Isn't Doomed Quite Yet
The outcry in the Apple community after the latest Apple event has been huge. For many of its loyal customers it seems that the last bit of the remaining magic of the Jobs era has vanished.I personally...
View ArticleUnderstanding Data Race Detection by Implementing it in Swift
TL;DR: In order to learn more about how Thread Sanitizer’s data race detection works I’ve implemented a very simple version in Swift. You can find it on GitHub.We all know concurrency is hard. It’s...
View ArticleWhy I don't Believe in Uber's Success
I wanted to write this blog post for well over half a year. I don’t believe Uber will be a successful business. I’ve been making my points in individual conversations over and over again - with this...
View ArticleBridging Swift Types to Objective-C
At PlanGrid we started adopting Swift prior to the 1.0 release. Despite the tooling problems you’re probably familiar with, we’re still excited Swift users and have written almost all new code since...
View ArticleSurprises in Profiling Multi-Core Performance with Instruments
Short version: When profiling code that should run on multiple cores in parallel, CPU utilization of multiple cores isn’t a good indicator as a single thread might utilize multiple cores at (almost)...
View ArticleSafely migrating millions of database records across thousands of devices
This is a cross post of a piece that original appeared on the PlanGrid R&D blogAt PlanGrid we recently shipped a major release for our iOS app that required a data migration of our core record...
View ArticleStill no Silver Bullet? Thoughts on how to achieve a magnitude improvement in...
Fred Brooks’ Essay “No Silver Bullet” is now over 30 years old. He famously proclaimed to not see any (then) current development that would bring an order of magnitude improvement to the productivity...
View ArticleCompile Time vs. Run Time Type Checking in Swift
At some point, when learning how to use Swift’s type system, it is important to understand that Swift (like many other languages) has two different forms of type checking: static and dynamic. Today I...
View ArticleA Simple Undo/Redo Implementation in Swift
NSUndoManager is a powerful API, but it is geared towards Objective-C code and relies on runtime features. This post demonstrates a simpler alternative that is better suitable for idiomatic Swift...
View ArticleAnother Small UIKit Debugging Adventure
Working with closed source APIs sometimes requires us to use advanced debugging techniques to track down issues that cannot be explained by our application code alone.This week I had an interesting...
View ArticleQuick Thoughts on Prototyping Software
It’s almost the end of July and I’ve tried to keep up a schedule of blogging at least once a month. So I decided to pull a topic from the long pile of potential blog posts I’ve accumulated:...
View ArticleModeling one-to-many in SQlite using the JSON1 extension
I’m currently reading a great book on designing data intensive applications. In the earlier chapters of the book the author (one of the main contributors to Apache Kafka) discusses the history of...
View ArticleWhen You Can't Avoid Email
Don’t get me wrong, Email is a great tool and an evergreen in everyone’s communication stack. I use it, among many other things, to stay in touch with friends, receive food delivery confirmations and...
View ArticleAutomatic serialization in Objective-C
Recently I worked on a tutorial that required me to serialize a large amount of objects. This is a common use case in many games - if the user quits the game and reopens it you want to restore the...
View ArticleObjective-C: Accessing backing iVars of properties in subclasses
Most Objective-C developers have a fairly good understanding of properties and instance variables and how these two work together.Today I want to discuss an interesting case that will force you to...
View Article