macos-programmer — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited macos-programmer (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<skill_scope skill="macos-programmer"> Related skills:
swift-programmer — Swift language fundamentals and Swift 6 concurrencysoftware-engineer — General software engineering principles and system architecturetest-driven-development — Testing philosophy and practicesThis skill covers macOS-specific development patterns, platform APIs, and decision frameworks. It applies when developing Mac apps, working with Cocoa/AppKit code, or making SwiftUI vs AppKit decisions. </skill_scope>
<core_philosophy> Hybrid by default. Production Mac apps commonly combine SwiftUI and AppKit: SwiftUI for most view content, AppKit where the platform's window, text, and event systems are exposed only there. Where the line falls varies by app; the case studies in <swiftui_vs_appkit_decision> show teams landing at different points, and each macOS release moves some formerly AppKit-only capability into SwiftUI (see <recent_changes>). Treat AppKit fallback as expected work rather than a failure of SwiftUI, and re-check the boundary when the deployment target moves.
Platform Identity: macOS is not iOS with a bigger screen. Multiple windows, menu bars, keyboard navigation, document-based architecture, and precise window management are first-class citizens. Respect macOS conventions; don't port iOS patterns blindly. </core_philosophy>
<swiftui_vs_appkit_decision> The Ground Truth from Production Apps:
SwiftUI maturity differs between iOS and macOS. Two 2023 accounts from Mac apps in development show the shape of the gap. Ghostty (then in private beta) rewrote its SwiftUI app and window lifecycle management in AppKit (+802/-239 lines) when non-native fullscreen, which requires subclassing NSWindow, proved impossible in pure SwiftUI; its views stayed SwiftUI.[^ghostty-devlog] Multi.app moved to SwiftUI but still needed "some access to NSEvents, text input, and tweaking the first responder that just aren't possible with pure SwiftUI," and wrote that SwiftUI bugs on older macOS left them "approaching the cusp of dropping support entirely" for those versions.[^multi-swiftui] Both are dated; re-read the boundary against the current release before applying them.
Use SwiftUI When:
NSViewRepresentable where a control or behavior isn't available in SwiftUIUse AppKit When:
List falling behind NSTableView; measure on the current OS, since a macOS 26 change to NavigationLink "improves performance of many NavigationLinks in lazy containers like List"[^macos26-notes]The Hybrid Shape (Common in Production):
Ghostty's arrangement after its rewrite: AppKit owns the app and window lifecycle and SwiftUI supplies the views.[^ghostty-devlog] The bridging mechanisms are NSHostingController (SwiftUI inside AppKit) and NSViewRepresentable (AppKit inside SwiftUI).
<swiftui_limitations> SwiftUI Limitations on macOS (as of macOS 26; re-check each release):
NSEvent, first-responder manipulation, and some text-input behavior is AppKit-only[^multi-swiftui]List performance with large data sets can lag NSTableView; the gap is workload-dependent and narrowed in macOS 26, so measure rather than assumeCapabilities that have moved into SwiftUI recently, such as styled text editing with AttributedString and Find Bar control in TextEditor on macOS 26, are listed in <recent_changes>. </swiftui_limitations>
Decision Pattern:
Production Mac App
├── AppKit: NSApplication, NSWindow, NSWindowController, NSDocument
├── SwiftUI: View content where appropriate
└── Bridge: NSHostingController, NSViewRepresentable</swiftui_vs_appkit_decision>
<platform_differences>
Coordinate Systems:
NSView) origin: bottom-left, Y increases upwardisFlipped to return true for iOS-style coordinatesLayer Backing:
wantsLayer = trueWindows vs Views:
Text System:
NSTextView included, in macOS 13;[^wwdc22-10090] touching textView.layoutManager switches that view to TextKit 1 compatibility mode ("if you explicitly call the layoutManager property on a text view or text container, the framework reverts to a compatibility mode")[^textkit-compat]NSLayoutManager during a migration), select it when creating the view rather than by triggering the fallback later, which discards the TextKit 2 layout; macOS 26 continues to extend TextKit 2 (e.g., includesTextListMarkers)[^macos26-notes]Background Colors:
drawsBackground propertybackgroundColor like iOSMouse vs Touch:
updateTrackingAreas()); SwiftUI views use .onHoverNSEvent provides precise cursor position and modifier keys</platform_differences>
<window_management>
NSWindow Lifecycle (10.13 SDK Change):
isReleasedWhenClosed defaults to true for NSWindow (false for NSPanel) and "is ignored for windows owned by window controllers";[^released-when-closed] for a window your own code owns and references, set it to false, or closing the window over-releases it under ARC.
AppKit's release notes state the current rule: "If your application is linked on macOS 10.13 SDK or later, NSWindows that are ordered-in will be strongly referenced by AppKit, until they are explicitly ordered-out or closed."[^appkit-rn-window] The condition is the SDK the app is linked against, not its deployment target; an app built against an older SDK keeps the old behavior even when running on newer macOS.
Window Style and Collection Behavior:
Style masks combine but have limitations:
canBecomeKey or canBecomeMain is true" (subclass and override)[^stylemask-borderless]fullSizeContentView "opts in to layer-backing"[^stylemask-fullsize]Collection behavior controls Spaces/Exposé/fullscreen:
.canJoinAllSpaces: Visible on all spaces (like menu bar).moveToActiveSpace: "When the window becomes active, move it to the active space instead of switching spaces"[^collection-behavior].fullScreenPrimary: Can be fullscreen window.fullScreenAuxiliary: Shown with fullscreen window.stationary: Unaffected by Exposé, visible on desktopPattern for an overlay that appears on every space:
window.collectionBehavior = [.canJoinAllSpaces, .stationary]Collection behavior governs Spaces and Exposé membership, not stacking order or fullscreen coexistence; set the window level separately and test with a fullscreen app and Stage Manager before relying on it.
Multi-Window Document Architecture:
NSDocumentController (singleton)
↓ manages
NSDocument instances (one per document)
↓ manages
NSWindowController instances (one per window)Modern Document Best Practice:
override class var autosavesInPlace: Bool { true }Enables autosave in place and the system's version browsing and storage. Asynchronous saving is a separate opt-in (canAsynchronouslyWrite(to:ofType:for:)), and the document must still unblock user interaction itself. </window_management>
<responder_chain>
The Complete Action Message Responder Chain:
nextResponder in that chain, then the key window itselfNSDocument (if different from the delegate)NSApplication tries to respondNSApplication.delegateNSDocumentController (which does not inherit from NSResponder)[^event-architecture]Critical Insight: App delegate is NOT part of nextResponder chain—you can never reach it through iteration. It's used as a fallback when current key window's responder chain returns nil.
NSViewController Integration (macOS 10.10+):
Before 10.10, an NSViewController was not in the responder chain by default; code patched nextResponder by hand. From 10.10, AppKit inserts the view controller into the chain immediately after its view: "The view's nextResponder is then set to be the viewController, and viewController's nextResponder is set to be the previously saved nextResponder."[^appkit-rn-1010]
Menu Validation Performance:
NSMenu updates EVERY menu item on EVERY user event (mouse move, keypress). This is a performance killer for large menus.
How it works:
validateMenuItem: or validateUserInterfaceItem:, call it and use return valueOptimization:
menu.autoenablesItems = falsemenuItem.isEnablednil target routes the action and the validation query through the responder chain; set an explicit target only when you want to bypass that lookup</responder_chain>
<swiftui_appkit_integration>
NSHostingController (Essential Bridge Pattern):
// Embedding SwiftUI in AppKit
let swiftUIView = MySwiftUIView()
let hostingController = NSHostingController(rootView: swiftUIView)
// macOS 13+ sizing control
hostingController.sizingOptions = [.intrinsicContentSize]NSViewRepresentable:
updateNSView runs whenever SwiftUI updates this represented view, so guard assignments whose setter has side effects: assigning NSTextView.string resets the selection (observed on macOS 26; it does not post textDidChange). Propagate edits back to the binding through a Coordinator, or the bridge is one-way.
struct TextViewRepresentable: NSViewRepresentable {
@Binding var text: String
func makeCoordinator() -> Coordinator { Coordinator(text: $text) }
func makeNSView(context: Context) -> NSTextView {
let view = NSTextView()
view.delegate = context.coordinator
return view
}
func updateNSView(_ nsView: NSTextView, context: Context) {
context.coordinator.text = $text // keep the coordinator on the current binding
if nsView.string != text { // guard: assigning resets the selection
nsView.string = text
}
}
final class Coordinator: NSObject, NSTextViewDelegate {
var text: Binding<String>
init(text: Binding<String>) { self.text = text }
func textDidChange(_ notification: Notification) {
guard let view = notification.object as? NSTextView else { return }
text.wrappedValue = view.string // edits flow back to SwiftUI
}
}
}State Management with `@MainActor @Observable` (macOS 14+):
Gotcha, toolchain-dependent: built with Xcode 26 or earlier, "A State property always instantiates its default value when SwiftUI instantiates the view," so Apple's guidance is to "avoid side effects and performance-intensive work when initializing the default value";[^swiftui-state] an @Observable model declared as @State in a frequently re-instantiated view is allocated on each instantiation. Built with Xcode 27 (beta 6 as of September 2026), @State is a macro and "objects held in state are only ever initialized one time, when the view is first created," which removes the cost but also rejects some initializer patterns that used to compile; read TN3211 before migrating.[^tn3211] For SwiftUI view state, keep the observable type on the main actor; see swift-programmer for the general @MainActor @Observable rule.
Solution for app-wide state: declare the main-actor observable model in the App struct, which SwiftUI instantiates once. Apple's alternative for a view-local model is to create it in a .task modifier, "which is called only once when the view first appears";[^swiftui-state] that is once per appearance of a given identity: it runs again if the view disappears and reappears, or if its identity changes, so guard the creation if it must happen once per state lifetime.
@MainActor
@Observable
class AppModel {
// App state and actions.
}
@main
struct MyApp: App {
@State private var appModel = AppModel() // Declare here
var body: some Scene {
WindowGroup {
ContentView().environment(appModel)
}
}
}Multi-Window Management:
// WindowGroup - Multiple instances
WindowGroup { ContentView() }
// Window - Single unique instance
Window("Stats", id: "stats") { StatsView() }
// UtilityWindow (macOS 15+) - Floating palette
UtilityWindow("Palette", id: "palette") { PaletteView() }
.keyboardShortcut("u")Menu Bar & Commands:
.commands {
CommandMenu("Custom") {
Button("Action") {}
.keyboardShortcut("x", modifiers: [.command, .shift])
}
}
// Focus values for multi-window menus
@FocusedValue(\.messageState) var messageState</swiftui_appkit_integration>
<sandboxing>
Sandboxing Strategy:
Access Methods:
~/Library/Containers/{bundle-id}Security-Scoped Bookmarks (Critical Pattern):
// Save bookmark
let bookmarkData = try url.bookmarkData(options: .withSecurityScope)
// Restore and use
var isStale = false
let url = try URL(resolvingBookmarkData: bookmarkData,
options: .withSecurityScope,
bookmarkDataIsStale: &isStale)
guard url.startAccessingSecurityScopedResource() else {
throw CocoaError(.fileReadNoPermission)
}
defer { url.stopAccessingSecurityScopedResource() }
if isStale {
// Re-create and re-save the bookmark while access is active; creating one needs access to the file.
let fresh = try url.bookmarkData(options: .withSecurityScope)
save(fresh)
}
// Access fileRules:
startAccessingSecurityScopedResource() on the resolved URL, not the originalNSOpenPanel/NSSavePanel URLs; the system starts access on those for youEntitlements to Know:
com.apple.security.app-sandbox: Enable App Sandboxcom.apple.security.files.user-selected.read-write: User-selected filescom.apple.security.files.bookmarks.app-scope: App-scoped bookmarkscom.apple.security.network.client: Outgoing network connectionscom.apple.security.network.server: Incoming network connections</sandboxing>
<code_signing>
Process (checked against Apple's notarization documentation, September 2026):
--deep:codesign --force --options runtime --timestamp \
--entitlements App.entitlements \
--sign "Developer ID Application: Your Name (TEAMID)" \
App.app
codesign --verify --deep --strict --verbose=2 App.app # --deep is for verificationditto -c -k --keepParent App.app App.zipnotarytool store-credentials:xcrun notarytool submit App.zip --keychain-profile "notarytool-password" --waitstapler against each item that you added to the archive. Then create a new ZIP file containing the stapled items for distribution."[^notarization-workflow]xcrun stapler staple App.app
xcrun stapler validate App.app
ditto -c -k --keepParent App.app App.zip # the distributed archive must contain the stapled appRules:
--deep (man codesign marks it "DEPRECATED for signing as of macOS 13.0"), because it applies the outer entitlements and flags to nested code. --deep remains the right flag for --verify.notarytool replaced altool, which Apple stopped accepting on November 1, 2023; the @keychain: password syntax was altool's, and notarytool uses --keychain-profile or a literal --password.Common Failures:
--options runtime</code_signing>
<architecture_patterns> For general architecture philosophy, see the `software-engineer` skill. This section covers macOS-specific architectural considerations.
Primary Patterns (Choose One):
What it is:
When to use:
Reality check:
What it is:
When to use:
Reality check:
Pattern:
@MainActor
@Observable
class User {
var name: String = ""
var email: String = ""
func save() {
// Business logic here
}
}
struct ProfileView: View {
@State private var user = User()
var body: some View {
Form {
TextField("Name", text: $user.name)
Button("Save") { user.save() }
}
}
}What it is:
When to use:
Reality check:
What it is:
When to use:
Reality check:
NavigationStack with a NavigationPath held in an observable model), with navigation policy still yours to writeComplementary Pattern (Add When Needed):
What it is:
When to add Coordinator:
SwiftUI Reality:
NavigationStack and NavigationSplitView driven by a NavigationPath or selection value, .sheet(), and on macOS separate Window/WindowGroup scenes (.fullScreenCover() is not available on macOS)Pattern (AppKit/UIKit):
App uses MVC or MVVM for view/logic organization
+
Coordinator manages navigation between screensOther Concerns:
Patterns like Repository (data access), networking layers, and business logic extraction emerge on a case-by-case basis during actual project design. Don't prematurely abstract. </architecture_patterns>
<performance>
Profiling with Instruments:
Essential templates:
Best practices:
Main Thread Optimization:
Keep the main thread for UI updates and input handling. Blocking work moves off it; work that is already async and suspends (e.g., URLSession requests) can be initiated from the main actor without blocking it. Offload with @concurrent or a detached task (see swift-programmer):
Layer-Backed View Optimization:
A layer-backed view that draws with draw(_:) usually gets the redraw policy NSViewLayerContentsRedrawDuringViewResize (the SDK header: "Generally, the default value is NSViewLayerContentsRedrawOnSetNeedsDisplay if the view responds YES to -wantsUpdateLayer. Otherwise, the value is usually NSViewLayerContentsRedrawDuringViewResize"),[^nsview-header] which objc.io notes "might be detrimental to animation performance" because it triggers drawing on each frame of a resize.[^layer-redraw]
For views whose content doesn't depend on their size, change to:
view.layerContentsRedrawPolicy = .onSetNeedsDisplayWith this policy the view redraws only when you call setNeedsDisplay, so invalidation becomes your responsibility; content that depends on the view's size must invalidate on resize (or keep the default policy).
When to Enable Layer-Backing:
Leave Layer-Backing Off When:
</performance>
<testing> For general testing philosophy and TDD principles, see the `test-driven-development` skill.
Swift Testing vs XCTest:
Swift Testing (Xcode 16+):
@Test, #expect, #require)XCTest:
Distribution: put most coverage in unit tests of models and logic, integration tests where components meet (e.g., API clients), and UI tests only for the flows whose breakage would ship a broken app, because UI tests are the slowest and most brittle tier.
Accessibility Testing:
VoiceOver on macOS differs from iOS:
Testing workflow:
</testing>
<anti_patterns>
Over-Engineering Simple Apps:
@Observable model in the environment sufficesIgnoring macOS UI Conventions:
<swiftui_limitations>)</anti_patterns>
<distribution>
Mac App Store:
Direct Distribution:
Tendency, not rule: tools that need APIs the sandbox forbids, or their own licensing, go direct; apps that benefit from App Store discovery and trust go there. Many ship both. </distribution>
<decision_summary>
SwiftUI vs AppKit:
TextEditor's surface, data sets where profiling shows List behind NSTableView, window behavior SwiftUI doesn't expose: AppKit for that partArchitecture Pattern:
State Management:
@MainActor @Observable models injected with .environment(_:) and read with @Environment; @EnvironmentObject pairs with the older ObservableObject protocol and is for code that still uses it@MainActor @Observable types rather than one singletonCross-Platform:
</decision_summary>
<recent_changes> Baseline: February 2025. This section assumes trained knowledge of macOS development through that date — the reliable-knowledge cutoff of Claude Haiku 4.5, the oldest among the current Claude models[^claude-models] — and lists what has changed since that bears on this skill's guidance. Treat anything older (macOS 15 and Xcode 16 included) as known.
Additions, by release:
NSGlassEffectView and NSGlassEffectContainerView in AppKit and matching SwiftUI APIs;[^liquid-glass-guide] styled text editing in SwiftUI with AttributedString,[^styled-text-guide] and Find Bar control in TextEditor (findNavigator(isPresented:));[^macos26-notes] a SwiftUI WebView backed by an observable WebPage;[^webkit-guide] animated Window resizing from a SwiftUI transaction;[^macos26-notes] NavigationLink producing a single view in lazy containers, improving List performance;[^macos26-notes] an "Enhanced Security" helper-extension template for isolating untrusted-data handling.[^xcode26-notes] These move the SwiftUI/AppKit boundary in <swiftui_vs_appkit_decision>.@State becomes a macro with lazy initial-value evaluation; see the gotcha in <swiftui_appkit_integration> and TN3211.[^tn3211]Behavior changes, deprecations, and things being moved away from:
Text interpolation, for localization correctness.[^macos26-notes]Text, TextEditor, and TextField is now derived per paragraph from string content rather than layout direction on macOS 26.[^macos26-notes]swift-programmer for the concurrency consequences.</recent_changes>
<resources>
Local Documentation:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/share/doc/swift/diagnostics//Applications/Xcode.app/Contents/PlugIns/IDEIntelligenceChat.framework/Versions/A/Resources/AdditionalDocumentation/ (e.g., AppKit-Implementing-Liquid-Glass-Design.md, SwiftUI-Styled-Text-Editing.md, SwiftUI-WebKit-Integration.md)Apple Official:
Expert Blogs:
Books:
Open Source Examples:
Community:
</resources>
Embrace Hybrid Solutions: Well-regarded Mac apps blend SwiftUI and AppKit. Use each framework where it excels. Don't force SwiftUI where AppKit is superior.
Leverage Platform Strengths: macOS isn't iOS with a bigger screen. Multiple windows, menu bars, keyboard navigation, document architecture—these are first-class citizens. iOS developers transitioning to Mac: unlearn iOS assumptions.
Test Relentlessly: Swift Testing for unit tests, XCTest for UI automation. Profile with Instruments regularly. VoiceOver-test every release.
Stay Pragmatic: The perfect architecture that ships beats the theoretical ideal that doesn't. Balance theoretical purity with practical delivery. Ship working software, iterate based on real problems, refactor when justified by pain.
Final Wisdom: The best Mac apps feel like Mac apps. They embrace platform conventions, leverage macOS strengths, and don't feel like iPad apps in disguise. Build for Mac users, not iOS users with keyboards. Master the frameworks, respect the platform, ship great software.
<sources> [^ghostty-devlog]: Mitchell Hashimoto. 2023. Ghostty Devlog 002 (August 5, 2023). Retrieved September 5, 2026 from https://mitchellh.com/writing/ghostty-devlog-002
[^multi-swiftui]: Multi.app. 2023. Moving to SwiftUI from macOS Cocoa (April 5, 2023). Retrieved September 5, 2026 from https://multi.app/blog/moving-to-swiftui-from-macos-cocoa-or-ios-cocoa-touch
[^mv-pattern]: Mohammad Azam. 2022. SwiftUI Architecture — A Complete Guide to the MV Pattern Approach. https://betterprogramming.pub/swiftui-architecture-a-complete-guide-to-mv-pattern-approach-5f411eaaaf9e
[^layer-redraw]: objc.io. AppKit for UIKit Developers. Issue #14. https://www.objc.io/issues/14-mac/appkit-for-uikit-developers
[^swiftui-state]: Apple Inc. State. SwiftUI Documentation. Retrieved September 5, 2026 from https://developer.apple.com/documentation/swiftui/state
[^wwdc22-10090]: Apple Inc. 2022. What's new in TextKit and text views (WWDC22 session 10090), session transcript. Retrieved September 5, 2026 from https://developer.apple.com/videos/play/wwdc2022/10090/
[^released-when-closed]: Apple Inc. isReleasedWhenClosed. AppKit Documentation. Retrieved September 5, 2026 from https://developer.apple.com/documentation/appkit/nswindow/isreleasedwhenclosed
[^subscriptions]: Apple Inc. Offer auto-renewable subscriptions. App Store Connect Help. Retrieved September 5, 2026 from https://developer.apple.com/help/app-store-connect/manage-subscriptions/offer-auto-renewable-subscriptions/
[^stylemask-borderless]: Apple Inc. NSWindow.StyleMask.borderless. AppKit Documentation. Retrieved September 5, 2026 from https://developer.apple.com/documentation/appkit/nswindow/stylemask-swift.struct/borderless
[^stylemask]: Apple Inc. styleMask. AppKit Documentation. Retrieved September 5, 2026 from https://developer.apple.com/documentation/appkit/nswindow/stylemask-swift.property
[^stylemask-fullsize]: Apple Inc. NSWindow.StyleMask.fullSizeContentView. AppKit Documentation. Retrieved September 5, 2026 from https://developer.apple.com/documentation/appkit/nswindow/stylemask-swift.struct/fullsizecontentview
[^nsview-header]: Apple Inc. NSView.h, comment on layerContentsRedrawPolicy. macOS 26.5 SDK, System/Library/Frameworks/AppKit.framework/Headers/NSView.h.
[^appkit-rn-1010]: Apple Inc. AppKit Release Notes for OS X 10.10 (older notes), "NSViewController" section. Retrieved September 5, 2026 from https://developer.apple.com/library/archive/releasenotes/AppKit/RN-AppKitOlderNotes/
[^textkit-compat]: Apple Inc. NSTextView, overview. AppKit Documentation. Retrieved September 5, 2026 from https://developer.apple.com/documentation/appkit/nstextview
[^appkit-rn-window]: Apple Inc. AppKit Release Notes for macOS 10.13, "NSWindow Lifecycle Changes." Retrieved September 5, 2026 from https://developer.apple.com/library/archive/releasenotes/AppKit/RN-AppKit/
[^collection-behavior]: Apple Inc. NSWindow.CollectionBehavior.moveToActiveSpace. AppKit Documentation. Retrieved September 5, 2026 from https://developer.apple.com/documentation/appkit/nswindow/collectionbehavior-swift.struct/movetoactivespace
[^event-architecture]: Apple Inc. Event Architecture, "Action Messages" (responder chain of a document-based application). Cocoa Event Handling Guide (archived). Retrieved September 5, 2026 from https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html
[^security-scoped]: Apple Inc. startAccessingSecurityScopedResource(). Foundation Documentation. Retrieved September 5, 2026 from https://developer.apple.com/documentation/foundation/url/startaccessingsecurityscopedresource()
[^notarization-workflow]: Apple Inc. Customizing the notarization workflow. Security Documentation. Retrieved September 5, 2026 from https://developer.apple.com/documentation/security/customizing-the-notarization-workflow
[^sequoia-gatekeeper]: Apple Inc. 2024. Updates to runtime protection in macOS Sequoia (August 6, 2024). Apple Developer News. Retrieved September 5, 2026 from https://developer.apple.com/news/?id=saqachfa
[^wwdc24-10179]: Apple Inc. 2024. Meet Swift Testing (WWDC24 session 10179), session transcript. Retrieved September 5, 2026 from https://developer.apple.com/videos/play/wwdc2024/10179/
[^small-business]: Apple Inc. App Store Small Business Program. Retrieved September 5, 2026 from https://developer.apple.com/app-store/small-business-program/
[^macos26-notes]: Apple Inc. 2025. macOS 26 Release Notes, SwiftUI and TextKit sections. Retrieved September 5, 2026 from https://developer.apple.com/documentation/macos-release-notes/macos-26-release-notes
[^xcode26-notes]: Apple Inc. 2025. Xcode 26 Release Notes (SceneKit deprecation 147454720; Instruments deprecations 148596828; Enhanced Security extension template 141308470). Retrieved September 5, 2026 from https://developer.apple.com/documentation/xcode-release-notes/xcode-26-release-notes
[^liquid-glass-guide]: Apple Inc. 2025. Implementing Liquid Glass Design in AppKit. Bundled with Xcode 26 at /Applications/Xcode.app/Contents/PlugIns/IDEIntelligenceChat.framework/Versions/A/Resources/AdditionalDocumentation/AppKit-Implementing-Liquid-Glass-Design.md
[^styled-text-guide]: Apple Inc. 2025. Styled Text Editing in SwiftUI. Bundled with Xcode 26 at .../AdditionalDocumentation/SwiftUI-Styled-Text-Editing.md
[^webkit-guide]: Apple Inc. 2025. SwiftUI WebKit Integration. Bundled with Xcode 26 at .../AdditionalDocumentation/SwiftUI-WebKit-Integration.md
[^claude-models]: Anthropic. 2026. Models overview, "Compare models" table, row "Reliable knowledge cutoff." Claude API Documentation. Retrieved September 5, 2026 from https://platform.claude.com/docs/en/models/overview
[^tn3211]: Apple Inc. 2026. TN3211: Resolving SwiftUI source incompatibilities for State and ContentBuilder, section "How @State evolved to support laziness." Apple Technotes. Retrieved September 5, 2026 from https://developer.apple.com/documentation/technotes/tn3211-resolving-swiftui-source-incompatibilities-for-state-and-contentbuilder </sources>
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.