In 2001, Rob Malda reacted to the first iPod with, "No wireless. Less space than a nomad. Lame." This might be the worst hot-take in the history of tech, but I wonder if it'll be dethroned by the reactions to Apple's AI offerings on| Sandofsky
If you like one of my newer essays and then looked into the old ones, you'll find a lot of programming minutiae. Let's talk about the vibe shift.| Sandofsky
Occasionally an activity within your app requires multiple screens. Consider uploading a photo to Instagram: pick a photo, pick the filter, and add a description. When the user taps a photo in the first screen, it might look like: func userDidPickPhoto(_ photo:Photo){ let filter = FilterViewController() filter.photo = photo navigationController?| Sandofsky
From time to time, people ask me how to learn iOS development. So here we go. Before you start, be serious about your goal. Are you trying to prototype a concept, get funding, and then hire someone else to deal with it? Are you a "generalist" who needs| Sandofsky
The first time I look at a legacy project, I scan for warning signs. I’ve covered singletons, excessive observers, and today I'll talk about "Manager" classes. I have to reiterate these are guidelines, not rules, and among guidelines, this one isn't critical.| Sandofsky
In my last post, I explained why you should prefer delegates over observers. The former encourages a tree-like data flow, while the latter leads to a cat's cradle. If you're sure you need an observer, Cocoa lets you choose between Notification Center and KVO. Which should| Sandofsky
A well structured app consists of simple objects with well-defined responsibilities talking to each other. When you design an object, you might think of an object's properties, and the actions they take, but it's just as important to decide how they'll communicate. Cocoa provides| Sandofsky
Singletons are not an anti-pattern, but they are an abused pattern. They're popular among beginners because they're convenient. Down the line they add complexity and cause maddening bugs. Let's start with the positive. Every so often, you have an object that should be represented| Sandofsky
The worst question in software is, "When will it be done?" because it never correlates with, "When should we ship?" These questions involve guesswork, but a little science goes a long way. We'll define Done as, "When outstanding tickets reach zero." Graph| Sandofsky
As you flesh out an app, the first place you dump behavior is the controller. As Colin Campbell said, "iOS architecture, where MVC stands for Massive View Controller". Say we build an app that displays recent popular news stories: override func viewWillAppear(animated:Bool) { super.viewWillAppear(animated) let| Sandofsky
There are little details in app architecture that may not be obvious, but make a big difference over time. We'll start with modal view controllers, then step back for the larger lesson. Say you have a view controller that displays the user's profile. There's| Sandofsky
If I offer you $50 today or $100 one year from now, you'll take the $50. Yet if I offer $50 in five years or $100 in six years, you'll pick $100, which seems irrational given the difference is still one year. Economists call this Hyperbolic Discounting. Given two similar| Sandofsky
I've been thinking a lot about how social networks die. Will Twitter decline like MySpace, or collapse like Digg?| Sandofsky
Two days after his company's downfall, Austen Allred wrote: I wish people could see how ugly it is to be envious, and how obvious it is to those around you when that's what's happening. There's not much uglier than trying to tear someone down because they achieved what you wish| Sandofsky
On the failure of Humane and why you can't build Apple with Venture Capital.| Sandofsky