For the past few months, I have worked on a platform for restaurants to reach their customers through the app stores. For nearly every restaurant owner and operator, the point of friction lies in the payment processor. Even when offering my app for free, and not taking any money from customer transactions, it was difficult to find willing partners. There are so many payment processors with widely differing services, operators always have a favorite that they are unwilling change from. It was even difficult to convince restaurants to have multiple payment processors. …


It’s great to write tests. But I think developers (myself included) are confused by the reward behind test integrations. In practice it is easy to write test syntax, today Xcode will launch a simulator and generate code from a guided app session. With the generated code as a friendly route, iOS developers can easily add assertions to the session.

When it comes to writing tests, semantics are more important than syntax. However, often I find myself losing the motivation behind making my code unit-testable. That motivation is to save time, I want to know if some change to the code-base will break ‘working’ features. With every assertion, there has to be a strong assumption that implies the apps’ health. …


Apps often have views that are snippets of some larger datasource. When the user taps on the snippet, the app transitions to a new screen with more relevant data. Cross-platform using Flutter we can achieve this behavior with a Hero. Setting up a Hero widget is a straight-forward declaration of the transition between two views. Heroes are great tappable list items. After I click a transit station below, the Hero animates from the small list item to a bigger detailed view of the corresponding station.

Image for post

My approach to creating a hero was to wrap the cell in a SizedBox with a GestureDetector on top. As it stand the SizedBox will stretch to fit the contents of the cell, which makes it an ideal widget for assisting the animation. After the GestureDetector registers a tap, the hero is resized and a new screen is pushed on top. …


Apps are great at gripping the attention of users. On iOS there are five app-states; and developers are able to create experiences using the current context. If an app is in the background, the developer could opt to fetch some data for the next time the user enters the foreground. Because notifications are held by the device and are outside of the app sandbox; it allows developers to talk to the user even while an app is out of the foreground.

Image for post

One thing to get out of the way will be the two types of notifications, there are remote notifications; often called push notifications. And there are local notifications that are not received through APN but rather scheduled by the developer on device. Local notifications are created by the device while push notifications are created by some server. …


Image for post

When I began iOS development, there was only one package manager. But now developers have the option to choose between Cocoapods, Carthage, and SwiftPM. Each has their own principles and implementation.

There exist some differences that are important to understand. One of those differences is between centralized and decentralized managers. When creating a CocoaPod, we submit to an ecosystem of pods and developers. Other developers are able to look around published CocoaPods online. This is a centralized system of package management. In the past, it has taken a few hours after publication to find my pod.

When developing a Carthage framework or Swift package, the manifest file is declared on top of the library. Other developers are NOT able to look online at existing SDKs that declare support. Instead developers build libraries from their reference to some manifest. For now Carthage is the only decentralized manager with shorthand for GitHub hosted libraries. But Carthage also requires an additional manual installation step when compared to SwiftPM. …

John Blanchard

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