iOS / macOS Developer
Posts
Swift is for the Eloi. The framework you live in and the machine humming under the floor were built by the same hands, twelve years apart. John Harper built Core Animation (codename "LayerKit"), demoed it on the Mac in 2006, then came back to build SwiftUI. We just stopped looking down.
https://aleahim.com/blog/morlocks-built-swiftui/
#SwiftUI #iOSDev
Cupertino v1.2.0 hits 92% rank-1 on canonical Apple API lookups, up from 52% in v1.1.0. Observable, AsyncSequence, EnvironmentObject, ForEach, DateFormatter and 11 others climbed to rank 1.
No vectors, no reranker. SQLite FTS5 with BM25F field weighting, AST extraction at index time. McNemar p ≤ 1e-5. Zero regressions across 110 paired queries.
The YAML was fine. The actual problem was one stray key, eleven levels deep, that OpenAPIKit rejected and Yams wrapped in a DecodingError pointing nowhere useful. The real error was three layers in.
I lost an afternoon. Then a morning the next week. Then I built OpenAPIDoctor: a typed validator and auto-repair CLI for OpenAPI 3.0/3.1, on OpenAPIKit, tested across 594 YAML files.
#Swift #OpenAPI
Three days ago I shipped cupertino v1.0.2 with "all 13 audits return zero."
Today v1.1.0 removes 7,095 silently-bad rows. The audit was walking one out of six source directories. A 3 a.m. SQL query found one HTTP 403 page indexed as Apple's DocC documentation. Pulling that thread unraveled 13 ways Apple's CDN lies to crawlers.
If your audit returns zero, audit your audit.
Recently I shipped cupertino v1.0.1 with "verified zero duplicate pairs across 405,782 rows."
Today v1.0.2 removed 128,142 of those rows. They had been duplicates the whole time.
The v1.0.1 verification query was structurally incapable of seeing the bug: URIs carry a hash suffix computed before lowercasing, so GROUP BY LOWER(uri) was lowercasing two already-different strings.
Full write-up:
https://aleahim.com/blog/cupertino-v1-0-2/
Cupertino v1.0 "First Light" is out.
Ask an LLM what Swift's Task does and you can still get a Mach kernel essay. Cupertino serves Apple's docs to the model over MCP, ranked correctly.
https://aleahim.com/blog/cupertino-first-light/
#Swift #MCP #LLM
Cupertino v0.10 — my AI documentation server now indexes all 307 Apple frameworks. 302,424 pages.
Found 5 bugs in the crawler. Best one: it was only discovering ~20 frameworks from Apple's
homepage. Fed it Apple's own technologies.json and the whole library opened up. Even
OpenGLES. Deprecated, but completionism has no room for judgment.
First community contributions too. Feels good.
aleahim.com/blog/cupertino-10-release/
iRelay: a Swift daemon that turns iMessage into a remote AI coding terminal.
Send a text from your phone → Mac runs Claude Code → result comes back as iMessage.
iRelay: a Swift daemon that turns iMessage into a remote terminal for Claude Code.
Send a message from your phone, your Mac picks it up, runs the agent, and replies with the result. No
SSH, no VPN — just iMessage.
Built it in a day, used it from the couch.
Cupertino v0.9 is out! 🍎
Now works with 8 AI tools
https://aleahim.com/blog/cupertino-09-release/
#Swift #MCP #AI #AppleDeveloper #iOS #macOS
Shipped Cupertino v0.8.0 🍎
Now with SwiftSyntax under the hood. Search "@Observable" and actual @Observable classes rank first, not random text mentions.
Also: 4 new semantic search tools, major refactoring, and 7x more tests.
Cupertino v0.7.0 is out 🍎
302,424 pages of Apple documentation, now searchable by AI.
What's new:
• OS version filtering — search for iOS 17+ APIs only
• HIG support — design guidelines, not just code
• Unified search — one tool, 8 sources
• Teasers — AI learns where to dig deeper
Kernel docs went from 25K to 40K pages. The complete Apple crawl is done.
Cupertino v0.5.0 is out 🍎
234,331 Apple docs. 287 frameworks. Nearly doubled the database.
The 5-day deep crawl finally finished. Kernel alone has 25K pages - IOKit, BSD, Mach APIs. The stuff you can never find when you
need it.
Raw docs are noise. Curated docs are signal.
brew install mihaelamj/tap/cupertino
Cupertino v0.4.0 is out! 🍎
New: Human Interface Guidelines support, framework aliases.
Key discovery: AI agents read tool descriptions once, but read search results every time. If you want agents to use a feature, put hints in the output.
Also learned hard lessons about release engineering and why you commit the version bump BEFORE creating the tag 😅
🚀 New write-up: Extreme Packaging — my approach to modular Swift architecture
I’ve been experimenting with project structures where *every responsibility is its own Swift Package*.
The result: cleaner boundaries, faster builds, and reusable code between iOS & macOS apps.
Full article 👉 https://aleahim.com/ExtremePackaging
#Swift #iOSDev #macOS #SwiftPM #CleanArchitecture #OpenSource #SwiftLang