Blog
-
JSONValue: JSON-shaped values without Any
A dependency-free Swift enum for dynamic API fields, query rows, and test fixtures
May 19, 2026
-
SafeEnum: resilient enum decoding for Swift
A small Swift package for decoding backend-driven enums without breaking on unknown values.
April 29, 2026
-
SSLPinning: fingerprint-based server trust with user decision flow
Verify server certificates by fingerprint, handle unknown hosts with a user decision loop, and keep the logic out of your networking stack.
April 27, 2026
-
From zero to an App Store Connect app record
Instructions for a partner team: which portal steps to complete, what files and access to send so we can archive signed iOS and tvOS IPAs, then how you upload builds with Transporter.
April 17, 2026
-
RequestResponse: describe HTTP requests, keep transport separate
Build URLRequests and decode responses from typed request descriptions — no bundled URLSession client, retries, or logging. Ideas from kean/Get. CI and version tags on GitHub Actions.
April 16, 2026
-
App Store screenshots and previews without a designer
Simulator captures, resize png with sips, resize mov with ffmpeg.
April 14, 2026
-
List, row, and detail: Named, typealiases, and extensions
Keep list rows thin with a small protocol, constraint aliases, and conformance on the types you already have.
April 11, 2026
-
SwiftUI List: selection, editMode, and NavigationLink together
Own edit mode, keep a non-nil selection binding, and turn off link hit testing while editing so multi-select stays predictable.
April 10, 2026
-
Hello, world!
Why this blog exists.
March 10, 2026