About Me

All Posts

2020

September

Effect of Swift Extension and Libraries On Build Time

written by Andrew Wagner on

Does separating code into extra extensions and/or modules have a meaningful impact on compile times?

more...

August

Developing an Algorithm Case Study: Area encircled by multiple paths on a 2D plane

written by Andrew Wagner on

While toying around with an app idea I came across the need to develop my own algorithm and therefore return to Data Structures and Algorithms techniques I learned in college. Here is the problem, my process, and my solution.

more...

2019

September

JSON Encoder Change in Swift 5.1

written by Andrew Wagner on

While updating my app for the iOS 13 SDK, I came across a change in JSONEncoder that broke some of the logic in my code. It now supports encoding top-level values.

more...

Swift Quiz – Boolean Expression

written by Andrew Wagner on

What is the value of result after doing: let result = false && true || true

more...

Singletons and Shared Instances in Swift

written by Andrew Wagner on

A couple very common programming patterns, especially in the Apple world, are Singleton and Shared Instance. People often confuse the two and there's also controversy around them. Let's clear these things up.

more...

Careful with Fancy KVO Callback

written by Andrew Wagner on

Be warned: there may be a bug in the fancier version of Key Value Observering. I discovered it while implementing a progress callback in my Decree web request library.

more...

Keyboard Field Prompt

written by Andrew Wagner on

I walk through how I solved the question: How do I display a text field directly above the keyboard to prompt the user for some text?

more...

August

Decree – A Declarative URL Request Framework

written by Andrew Wagner on

Decree allows you to make HTTP requests in a clear and type-safe way by declaring web services and endpoints. It supports all Apple platforms as well as Linux. It is the culmination of a technique I've developed over many projects. Some of those projects even include both a frontend and backend implemented in Swift that get to share a single source of endpoint declarations.

more...

July

A Lesson From Nature: Complexity from Simplicity

written by Andrew Wagner on

I recently came across a video showing an “Amazing Crabs Shell Exchange” and realized that it was a perfect example from nature of how seemingly complex (or “amazing”) behavior can emerge from simple governing desires. This is directly applicable to programming. Lets explore how.

more...

2017

April

App Case Study - Love Laugh Read Books

written by Andrew Wagner on

A look at the interesting technical challenges I ran into while developing this app.

more...

January

5 Core iOS Competencies to Be a Great Hire

written by Andrew Wagner on

A list of core skills that are necessary in almost every app. If you can do all of these things reliably, you are well on your way to being a great hire as an iOS developer

more...

Deploying Server-Side Swift

written by Andrew Wagner on

There are many ways you could choose to host a Swift website or web service, but here I share what has worked well for me.

more...

Deploying Server-Side Swift

written by Andrew Wagner on

There are many ways you could choose to host a Swift website or web service, but here I share what has worked well for me.

more...

5 Core Swift Competencies Before You Get a Job

written by Andrew Wagner on

A list of skills, beyond just the ability to get the job done, every Swift developer should know before they get paid to develop.

more...

Filling Holes in Swift on Linux

written by Andrew Wagner on

The hardest part of developing Server-Side Swift is the incomplete nature of Foundation including some pretty critical basic functionality. After I thought up this technique, the problems I ran into changed from mountains to mole hills.

more...

Learning Swift, Server-Side Swift, and the Future

written by Andrew Wagner on

I have been extremely busy so I haven't made the time to write any blog posts. In this post I give a brief overview of what I have been up to and what are my short-term plans for the future.

more...

2016

April

The Most Difficult Thing I've Ever Done - Writing a Technical Book

written by Andrew Wagner on

An in-depth discussion of my experience writing a technical book about learning Swift.

more...

2014

August

Practical Use for Curried Functions in Swift

written by Andrew Wagner on

An practical example of how curried functions in Swift can be useful for implementing a logger

more...

July

Swift KVO Substitute: Observable Variables

written by Andrew Wagner on

My attempt to implement a KVO replacement purely in Swift

more...

Getting Started With Swift

written by Andrew Wagner on

A list of key concepts to know when getting started with Swift and links to resources to stay current with its development.

more...

Uses for Implicitly Unwrapped Optionals in Swift

written by Andrew Wagner on

A list with concrete examples of when and when not to use Implicitly Unwrapped Optionals in Swift.

more...

What is an Optional in Swift

written by Andrew Wagner on

A summary with examples of what an Optional is in Swift

more...

June

7 Cool Features in Swift

written by Andrew Wagner on

Concrete examples for some cool and practical new features in Swift that will improve the daily lives of iOS and OS X programmers.

more...

Swift’s Weird Handling of Basic Value Types and AnyObject

written by Andrew Wagner on

Basic value types like String and Int can be secretly converted to Objective-C types like NSString and NSNumber. This has some interesting effects and implications.

more...

March

Testing Asynchronous Code in Objective-C

written by Andrew Wagner on

Testing asynchronous code in Objective-C can be a real pain unless you make one simple change to the way you program it in the first place.

more...

Better UIAlert Handling and Easier Testing

written by Andrew Wagner on

A more declarative and testable way to display alerts in iOS.

more...

February

Be A Better Indie - 5. Listen to Podcasts

written by Andrew Wagner on

A list with descriptions of the main podcasts that have made me a better developer and keep me informed.

more...

Be A Better Indie - 4. Create a Singular To-Do List

written by Andrew Wagner on

The way that I handle my to-do list so that I stay on task with minimal effort.

more...

Devise: determine unconfirmed, confirmed, or not signed in user

written by Andrew Wagner on

While developing a Rails backend using Devise for user management, I ran into trouble determining a user's status. This is how I solved that problem.

more...

Be A Better Indie - 3. Trim Your Incoming Email

written by Andrew Wagner on

I hate being constantly distracted by incoming emails. To solve this problem I decided to drastically reduce the amount of emails I receive. This is how I did that.

more...

January

Be A Better Indie - 2. Accept, appreciate, and, channel the stress

written by Andrew Wagner on

Being and independent developer can be extremely stressful. It is important that you learn to accept, appreciate, and channel to turn it into something positive.

more...

10 Ways to Be a Better Independent Developer

written by Andrew Wagner on

A series of posts about how to be a better independent developer

more...

Be A Better Indie - 1. Cultivate A Support Structure

written by Andrew Wagner on

No person is an island. It is virtually impossible to be successful in anything that you do without having a good support structure around you.

more...

2013

October

Comfortably Uncomfortable

written by Andrew Wagner on

A look at how pushing through discomfort is exactly where I want to be.

more...

Changes at a Glance

written by Andrew Wagner on

A system to make version control change sets more understandable at a glance.

more...

June

Implicit Animation for CAShapeLayer's Path

written by Andrew Wagner on

A way to make all path changes on a CAShapeLayer be animated automatically.

more...

February

Enforce Good UX Through Reusable Code

written by Andrew Wagner on

My theory on how user experience's and code architecture's interests can converge. Good UX can encourage good code reuse and code reuse can encourage effective UX.

more...

Bind a UITableView to a Property

written by Andrew Wagner on

A library to allow binding a UITableView directly to a to-many property. The library automatically handles insertions and deletions as long as you make sure the to-many property emits KVO notifications.

more...

The 2 Biggest Challenges in Speech UX

written by Andrew Wagner on

Speech is still a relatively new interface. Technology is finally starting to catch up to the dreams that we've had since the invention of the computer itself: dreams of having natural conversations…

more...

January

Objective-C Bindings

written by Andrew Wagner on

An extension to NSObject that adds the allows binding the properties of two different objects together, allowing for much more declarative and understandable code.

more...

Taking the Plunge

written by Andrew Wagner on

How I came to the decision to finally take the plunge and go independent.

more...

UX and Agile

written by Andrew Wagner on

Discusses a high level way that we can integrate UX designers better into Agile software practices.

more...