zero width jschear

iOS focus app


I’m working on an app to solve a tiny frustration I have with iOS.

iOS’s new-ish “focus” feature lets you create a notification allow- or deny-list while in a “focus” mode. Meanwhile, “Screen Time” lets you block applications entirely, based on daily time limits or a nightly “Downtime” mode.1

But what I’d like to do is allow-/deny-list entire apps on demand (a la SelfControl — which helped me get through college), all from control center. There are a few apps that fill this gap, but they’re all subscription based. Fair enough, get paid, but I don’t need a ton of features and slick UI here.

Most of my iOS experience has been focused on developer productivity and CI — so these are some notes on getting started in app development in 2023.

Tooling

I’ve been moving towards managing all of my development tooling with nix, but Xcode can’t be installed via nix (as far as I can tell — I imagine there are licensing issues), and Xcode really wants to manage the entire Swift toolchain. So no nix flakes here.

At a previous job I used bazel to build a large iOS codebase, but that feels overkill for a project with single-digit source files. Plus, .pbxproj merge conflicts aren’t too bad when you’re developing solo.

Code formatting

swift-format is nice. I built it from source and threw it in ~/bin.

To format all swift code in a directory (-in place, -recursively):

$ swift-format -i -r .

SwiftUI

I’m watching a few videos from a Stanford course to get up to speed on SwiftUI and how it fits into general app architecture.

Footnotes

  1. I do not envy the folks who had to figure out how to reconcile the overlapping concepts of “Do Not Disturb”, “Sleep”, “Screen Time” and “Downtime” with “Focus.” There’s a default “Sleep Focus,” which is a pretty funny way of describing what sleep is all about.