{"id":"e43e4182-783a-47d3-a89e-1bf431afe77d","shortId":"MkQFQT","kind":"skill","title":"swift-macos","tagline":"Comprehensive macOS app development with Swift 6.2, SwiftUI, SwiftData, Swift Concurrency, Foundation Models, Swift Testing, ScreenCaptureKit, and app distribution. Use when building native Mac apps, implementing windows/scenes/navigation/menus/toolbars, SwiftData models and quer","description":"# macOS App Development - Swift 6.2\n\nBuild native macOS apps with Swift 6.2 (latest: 6.2.4, Feb 2026), SwiftUI, SwiftData, and macOS 26 Tahoe. Target macOS 14+ for SwiftData/@Observable, macOS 15+ for latest SwiftUI, macOS 26 for Liquid Glass and Foundation Models.\n\n## Quick Start\n\n```swift\nimport SwiftUI\nimport SwiftData\n\n@Model\nfinal class Project {\n    var name: String\n    var createdAt: Date\n    @Relationship(deleteRule: .cascade) var tasks: [Task] = []\n\n    init(name: String) {\n        self.name = name\n        self.createdAt = .now\n    }\n}\n\n@Model\nfinal class Task {\n    var title: String\n    var isComplete: Bool\n    var project: Project?\n\n    init(title: String) {\n        self.title = title\n        self.isComplete = false\n    }\n}\n\n@main\nstruct MyApp: App {\n    var body: some Scene {\n        WindowGroup(\"Projects\") {\n            ContentView()\n        }\n        .modelContainer(for: [Project.self, Task.self])\n        .defaultSize(width: 900, height: 600)\n\n        #if os(macOS)\n        Settings { SettingsView() }\n\n        MenuBarExtra(\"Status\", systemImage: \"circle.fill\") {\n            MenuBarView()\n        }\n        .menuBarExtraStyle(.window)\n        #endif\n    }\n}\n\nstruct ContentView: View {\n    @Query(sort: \\Project.createdAt, order: .reverse)\n    private var projects: [Project]\n\n    @Environment(\\.modelContext) private var context\n    @State private var selected: Project?\n\n    var body: some View {\n        NavigationSplitView {\n            List(projects, selection: $selected) { project in\n                NavigationLink(value: project) {\n                    Text(project.name)\n                }\n            }\n            .navigationSplitViewColumnWidth(min: 200, ideal: 250)\n        } detail: {\n            if let selected {\n                DetailView(project: selected)\n            } else {\n                ContentUnavailableView(\"Select a Project\",\n                    systemImage: \"sidebar.left\")\n            }\n        }\n    }\n}\n```\n\n## Scenes & Windows\n\n| Scene | Purpose |\n|-------|---------|\n| `WindowGroup` | Resizable windows (multiple instances) |\n| `Window` | Single-instance utility window |\n| `Settings` | Preferences (Cmd+,) |\n| `MenuBarExtra` | Menu bar with `.menu` or `.window` style |\n| `DocumentGroup` | Document-based apps |\n\nOpen windows: `@Environment(\\.openWindow) var openWindow; openWindow(id: \"about\")`\n\nFor complete scene lifecycle, see `references/app-lifecycle.md`.\n\n## Menus & Commands\n\n```swift\n.commands {\n    CommandGroup(replacing: .newItem) {\n        Button(\"New Project\") { /* ... */ }\n            .keyboardShortcut(\"n\", modifiers: .command)\n    }\n    CommandMenu(\"Tools\") {\n        Button(\"Run Analysis\") { /* ... */ }\n            .keyboardShortcut(\"r\", modifiers: [.command, .shift])\n    }\n}\n```\n\n## Table (macOS-native)\n\n```swift\nTable(items, selection: $selectedIDs, sortOrder: $sortOrder) {\n    TableColumn(\"Name\", value: \\.name)\n    TableColumn(\"Date\") { Text($0.date, format: .dateTime) }\n        .width(min: 100, ideal: 150)\n}\n.contextMenu(forSelectionType: Item.ID.self) { ids in\n    Button(\"Delete\", role: .destructive) { delete(ids) }\n}\n```\n\nFor forms, popovers, sheets, inspector, and macOS modifiers, see `references/swiftui-macos.md`.\n\n## @Observable\n\n```swift\n@Observable\nfinal class AppState {\n    var projects: [Project] = []\n    var isLoading = false\n\n    func load() async throws {\n        isLoading = true\n        defer { isLoading = false }\n        projects = try await ProjectService.fetchAll()\n    }\n}\n\n// Use: @State var state = AppState()          (owner)\n// Pass: .environment(state)                    (inject)\n// Read: @Environment(AppState.self) var state  (child)\n```\n\n## SwiftData\n\n### @Query & #Predicate\n\n```swift\n@Query(filter: #Predicate<Project> { !$0.isArchived }, sort: \\Project.name)\nprivate var active: [Project]\n\n// Dynamic predicate\nfunc search(_ term: String) -> Predicate<Project> {\n    #Predicate { $0.name.localizedStandardContains(term) }\n}\n\n// FetchDescriptor (outside views)\nvar desc = FetchDescriptor<Project>(predicate: #Predicate { $0.isArchived })\ndesc.fetchLimit = 50\nlet results = try context.fetch(desc)\nlet count = try context.fetchCount(desc)\n```\n\n### Relationships\n\n```swift\n@Model final class Author {\n    var name: String\n    @Relationship(deleteRule: .cascade, inverse: \\Book.author)\n    var books: [Book] = []\n}\n\n@Model final class Book {\n    var title: String\n    var author: Author?\n    @Relationship var tags: [Tag] = []  // many-to-many\n}\n```\n\nDelete rules: `.cascade`, `.nullify` (default), `.deny`, `.noAction`.\n\n### Schema Migration\n\n```swift\nenum SchemaV1: VersionedSchema { /* ... */ }\nenum SchemaV2: VersionedSchema { /* ... */ }\n\nenum MigrationPlan: SchemaMigrationPlan {\n    static var schemas: [any VersionedSchema.Type] { [SchemaV1.self, SchemaV2.self] }\n    static var stages: [MigrationStage] {\n        [.lightweight(fromVersion: SchemaV1.self, toVersion: SchemaV2.self)]\n    }\n}\n\n// Apply: .modelContainer(for: Model.self, migrationPlan: MigrationPlan.self)\n```\n\n### CloudKit Sync\n\nEnable iCloud capability, then `.modelContainer(for: Model.self)` auto-syncs. Constraints: all properties need defaults/optional, no unique constraints, optional relationships.\n\nFor model attributes, background contexts, batch ops, undo/redo, and testing, see SwiftData references below.\n\n## Concurrency (Swift 6.2)\n\n### Default MainActor Isolation\n\nOpt entire module into main actor - all code runs on main actor by default:\n\n```swift\n// Package.swift\n.executableTarget(name: \"MyApp\", swiftSettings: [\n    .defaultIsolation(MainActor.self),\n])\n```\n\nOr Xcode: Build Settings > Swift Compiler > Default Isolation > MainActor.\n\n### @concurrent\n\nMark functions for background execution:\n\n```swift\n@concurrent\nfunc processFile(_ url: URL) async throws -> Data {\n    let data = try Data(contentsOf: url)\n    return try compress(data) // runs off main actor\n}\n// After await, automatically back on main actor\nlet result = try await processFile(fileURL)\n```\n\nUse for CPU-intensive work, I/O, anything not touching UI.\n\n### Actors\n\n```swift\nactor DocumentStore {\n    private var docs: [UUID: Document] = [:]\n    func add(_ doc: Document) { docs[doc.id] = doc }\n    func get(_ id: UUID) -> Document? { docs[id] }\n    nonisolated let name: String\n}\n// Requires await: let doc = await store.get(id)\n```\n\n### Structured Concurrency\n\n```swift\n// Parallel with async let\nfunc loadDashboard() async throws -> Dashboard {\n    async let profile = fetchProfile()\n    async let stats = fetchStats()\n    return try await Dashboard(profile: profile, stats: stats)\n}\n\n// Dynamic with TaskGroup\nfunc processImages(_ urls: [URL]) async throws -> [NSImage] {\n    try await withThrowingTaskGroup(of: (Int, NSImage).self) { group in\n        for (i, url) in urls.enumerated() {\n            group.addTask { (i, try await loadImage(url)) }\n        }\n        var results = [(Int, NSImage)]()\n        for try await r in group { results.append(r) }\n        return results.sorted { $0.0 < $1.0 }.map(\\.1)\n    }\n}\n```\n\n### Sendable\n\n```swift\nstruct Point: Sendable { var x, y: Double }              // value types: implicit\nfinal class Config: Sendable { let apiURL: URL }          // final + immutable\nactor SharedState { var count = 0 }                       // mutable: use actors\n// Enable strict mode: .swiftLanguageMode(.v6) in Package.swift\n```\n\n### AsyncSequence & Observations\n\n```swift\n// Stream @Observable changes (Swift 6.2)\nfor await state in Observations(of: manager) {\n    print(state.progress)\n}\n\n// Typed NotificationCenter (Swift 6.2)\nstruct DocSaved: MainActorMessage { let id: UUID }\nNotificationCenter.default.post(DocSaved(id: doc.id))\nfor await n in NotificationCenter.default.notifications(of: DocSaved.self) {\n    refresh(n.id)\n}\n```\n\nFor concurrency deep dives, see concurrency references below.\n\n## Foundation Models (macOS 26+)\n\nOn-device ~3B LLM. Free, offline, private:\n\n```swift\nimport FoundationModels\n\nlet session = LanguageModelSession()\nlet response = try await session.respond(to: \"Summarize: \\(text)\")\n\n// Structured output\n@Generable struct Summary { var title: String; var points: [String] }\nlet result: Summary = try await session.respond(to: prompt, generating: Summary.self)\n```\n\nFor tool calling, streaming, and sessions, see `references/foundation-models.md`.\n\n## Testing\n\n```swift\nimport Testing\n\n@Suite(\"Project Tests\")\nstruct ProjectTests {\n    @Test(\"creates with defaults\")\n    func create() {\n        let p = Project(name: \"Test\")\n        #expect(p.name == \"Test\")\n    }\n\n    @Test(\"formats sizes\", arguments: [(1024, \"1 KB\"), (0, \"0 KB\")])\n    func format(bytes: Int, expected: String) {\n        #expect(formatSize(bytes) == expected)\n    }\n}\n\n// SwiftData testing\nlet container = try ModelContainer(\n    for: Project.self,\n    configurations: ModelConfiguration(isStoredInMemoryOnly: true)\n)\nlet ctx = ModelContext(container)\nctx.insert(Project(name: \"Test\"))\ntry ctx.save()\n```\n\nFor exit tests, attachments, UI testing, see `references/testing.md`.\n\n## Distribution\n\n| Method | Sandbox | Notarization | Review |\n|--------|---------|--------------|--------|\n| App Store | Required | Automatic | Yes |\n| Developer ID | Recommended | Required | No |\n| Ad-Hoc | No | No | Local only |\n\n```bash\nxcodebuild archive -scheme MyApp -archivePath MyApp.xcarchive\nxcodebuild -exportArchive -archivePath MyApp.xcarchive \\\n  -exportPath ./export -exportOptionsPlist ExportOptions.plist\nxcrun notarytool submit ./export/MyApp.dmg \\\n  --apple-id you@example.com --team-id TEAM_ID \\\n  --password @keychain:AC_PASSWORD --wait\nxcrun stapler staple ./export/MyApp.dmg\n```\n\nFor complete distribution guide, see `references/distribution.md`.\n\n## SPM\n\n```swift\n// swift-tools-version: 6.2\nlet package = Package(\n    name: \"MyApp\",\n    platforms: [.macOS(.v14)],\n    targets: [\n        .executableTarget(name: \"MyApp\", swiftSettings: [\n            .swiftLanguageMode(.v6),\n            .defaultIsolation(MainActor.self),\n        ]),\n        .testTarget(name: \"MyAppTests\", dependencies: [\"MyApp\"]),\n    ]\n)\n```\n\nFor build plugins, macros, and Swift Build, see `references/spm-build.md`.\n\n## Liquid Glass (macOS 26)\n\nApps rebuilt with Xcode 26 SDK get automatic Liquid Glass styling. Use `.glassEffect()` for custom glass surfaces, `GlassEffectContainer` for custom hierarchies. Opt out: `UIDesignRequiresLiquidGlass = NO` in Info.plist.\n\n## ScreenCaptureKit\n\nCapture screen content, app audio, and microphone (macOS 12.3+):\n\n```swift\nimport ScreenCaptureKit\n\nlet content = try await SCShareableContent.excludingDesktopWindows(false, onScreenWindowsOnly: true)\nguard let display = content.displays.first else { return }\n\n// Filter: specific apps only\nlet filter = SCContentFilter(display: display, including: [targetApp], exceptingWindows: [])\n\n// Configure\nlet config = SCStreamConfiguration()\nconfig.capturesAudio = true\nconfig.sampleRate = 48000\nconfig.channelCount = 2\nconfig.excludesCurrentProcessAudio = true\n\n// Audio-only: minimize video overhead\nconfig.width = 2; config.height = 2\nconfig.minimumFrameInterval = CMTime(value: 1, timescale: CMTimeScale.max)\n\nlet stream = SCStream(filter: filter, configuration: config, delegate: self)\ntry stream.addStreamOutput(self, type: .screen, sampleHandlerQueue: nil)\ntry stream.addStreamOutput(self, type: .audio, sampleHandlerQueue: audioQueue)\ntry await stream.startCapture()\n```\n\nmacOS 15+: `SCRecordingOutput` for simplified file recording, `config.captureMicrophone` for mic capture. macOS 14+: `SCContentSharingPicker` for system picker UI, `SCScreenshotManager` for single-frame capture.\n\nFor complete API reference, audio writing (AVAssetWriter/AVAudioFile), permissions, and examples, see `references/screen-capture-audio.md`.\n\n## AppKit Interop\n\n```swift\nstruct WebViewWrapper: NSViewRepresentable {\n    let url: URL\n    func makeNSView(context: Context) -> WKWebView { WKWebView() }\n    func updateNSView(_ v: WKWebView, context: Context) {\n        v.load(URLRequest(url: url))\n    }\n}\n```\n\nFor hosting SwiftUI in AppKit and advanced bridging, see `references/appkit-interop.md`.\n\n## Architecture\n\n| Pattern | Best For | Complexity |\n|---------|----------|------------|\n| SwiftUI + @Observable | Small-medium, solo | Low |\n| MVVM + @Observable | Medium, teams | Medium |\n| TCA | Large, strict testing | High |\n\nSee `references/architecture.md` for all patterns with examples.\n\n## References\n\n| File | When to read |\n|------|-------------|\n| **SwiftUI & macOS** | |\n| `references/app-lifecycle.md` | Window management, scenes, DocumentGroup, MenuBarExtra gotchas, async termination, LSUIElement issues |\n| `references/swiftui-macos.md` | Sidebar, Inspector, Table, forms, popovers, sheets, search |\n| `references/appkit-interop.md` | NSViewRepresentable, hosting controllers, AppKit bridging, NSPanel/floating HUD |\n| `references/screen-capture-audio.md` | ScreenCaptureKit, SCStream gotchas, AVAudioEngine dual pipeline, AVAssetWriter crash safety, TCC gotchas |\n| `references/system-integration.md` | Keyboard shortcuts, drag & drop, file access, App Intents, process monitoring, CoreAudio per-process APIs, login items, LSUIElement, idle sleep prevention |\n| `references/foundation-models.md` | On-device AI: guided generation, tool calling, streaming |\n| `references/architecture.md` | MVVM, TCA, dependency injection, project structure |\n| `references/testing.md` | Swift Testing, exit tests, attachments, UI testing, XCTest migration |\n| `references/distribution.md` | App Store, Developer ID, notarization gotchas, nested bundle signing, sandboxing, universal binaries |\n| `references/spm-build.md` | Package.swift, Swift Build, plugins, macros, manual .app bundle assembly, mixed ObjC targets, CLT testing |\n| **Concurrency** | |\n| `references/approachable-concurrency.md` | Default MainActor isolation, @concurrent, nonisolated async, runtime pitfalls |\n| `references/actors-isolation.md` | Actor model, global actors, custom executors, reentrancy |\n| `references/structured-concurrency.md` | Task, TaskGroup, async let, cancellation, priority, named tasks |\n| `references/sendable-safety.md` | Sendable protocol, data race safety, @unchecked Sendable + serial queue, @preconcurrency import |\n| `references/async-patterns.md` | AsyncSequence, AsyncStream, Observations, continuations, Clock |\n| `references/migration-guide.md` | GCD to async/await, Combine to AsyncSequence, Swift 6 migration |\n| **SwiftData** | |\n| `references/models-schema.md` | @Model, @Attribute options, Codable, transformable, external storage |\n| `references/relationships-predicates.md` | Advanced relationships, inverse rules, compound predicates |\n| `references/container-context.md` | ModelContainer, ModelContext, background contexts, undo/redo, batch ops |\n| `references/cloudkit-sync.md` | CloudKit setup, conflict resolution, sharing, debugging sync |\n| `references/migrations.md` | VersionedSchema, lightweight/custom migration, Core Data migration |","tags":["swift","macos","skills","tenequm","agent-skills","ai-agents","claude-code","claude-skills","clawhub","erc-8004","mpp","openclaw"],"capabilities":["skill","source-tenequm","skill-swift-macos","topic-agent-skills","topic-ai-agents","topic-claude-code","topic-claude-skills","topic-clawhub","topic-erc-8004","topic-mpp","topic-openclaw","topic-skills","topic-solana","topic-x402"],"categories":["skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/tenequm/skills/swift-macos","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add tenequm/skills","source_repo":"https://github.com/tenequm/skills","install_from":"skills.sh"}},"qualityScore":"0.461","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 23 github stars · SKILL.md body (14,924 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T01:01:41.374Z","embedding":null,"createdAt":"2026-04-18T23:05:29.646Z","updatedAt":"2026-04-22T01:01:41.374Z","lastSeenAt":"2026-04-22T01:01:41.374Z","tsv":"'/export':977 '/export/myapp.dmg':983,1001 '0':756,900,901 '0.0':727 '0.date':304 '0.isarchived':381,406 '0.name.localizedstandardcontains':396 '1':730,898,1141 '1.0':728 '100':309 '1024':897 '12.3':1086 '14':59,1182 '15':64,1171 '150':311 '2':1125,1135,1137 '200':199 '2026':50 '250':201 '26':55,69,818,1049,1054 '3b':822 '48000':1123 '50':408 '6':1446 '6.2':10,39,46,533,774,787,1014 '6.2.4':48 '600':145 '900':143 'ac':995 'access':1322 'activ':386 'actor':542,548,596,603,621,623,752,759,1404,1407 'ad':959 'ad-hoc':958 'add':631 'advanc':1237,1458 'ai':1342 'analysi':280 'anyth':617 'api':1196,1331 'apiurl':748 'app':6,21,28,36,43,129,246,948,1050,1081,1106,1323,1366,1385 'appkit':1206,1235,1300 'appl':985 'apple-id':984 'appli':489 'appstat':338,362 'appstate.self':370 'architectur':1241 'archiv':967 'archivepath':970,974 'argument':896 'assembl':1387 'async':347,580,660,664,667,671,690,1284,1400,1414 'async/await':1441 'asyncsequ':767,1433,1444 'asyncstream':1434 'attach':938,1360 'attribut':519,1451 'audio':1082,1129,1164,1198 'audio-on':1128 'audioqueu':1166 'author':424,444,445 'auto':505 'auto-sync':504 'automat':599,951,1057 'avassetwrit':1311 'avassetwriter/avaudiofile':1200 'avaudioengin':1308 'await':356,598,607,649,652,677,694,710,719,776,799,836,856,1093,1168 'back':600 'background':520,572,1467 'bar':236 'base':245 'bash':965 'batch':522,1470 'best':1243 'binari':1377 'bodi':131,182 'book':434,435,439 'book.author':432 'bool':115 'bridg':1238,1301 'build':25,40,561,1038,1043,1381 'bundl':1373,1386 'button':269,278,317 'byte':905,911 'call':864,1346 'cancel':1416 'capabl':499 'captur':1078,1180,1193 'cascad':95,430,456 'chang':772 'child':373 'circle.fill':154 'class':85,108,337,423,438,744 'clock':1437 'cloudkit':495,1473 'clt':1391 'cmd':233 'cmtime':1139 'cmtimescale.max':1143 'codabl':1453 'code':544 'combin':1442 'command':263,265,275,284 'commandgroup':266 'commandmenu':276 'compil':564 'complet':257,1003,1195 'complex':1245 'compound':1462 'comprehens':4 'compress':591 'concurr':14,531,568,575,656,808,812,1393,1398 'config':745,1118,1150 'config.capturemicrophone':1177 'config.capturesaudio':1120 'config.channelcount':1124 'config.excludescurrentprocessaudio':1126 'config.height':1136 'config.minimumframeinterval':1138 'config.samplerate':1122 'config.width':1134 'configur':921,1116,1149 'conflict':1475 'constraint':507,514 'contain':916,928 'content':1080,1091 'content.displays.first':1101 'contentsof':587 'contentunavailableview':210 'contentview':136,160 'context':175,521,1217,1218,1225,1226,1468 'context.fetch':412 'context.fetchcount':417 'contextmenu':312 'continu':1436 'control':1299 'core':1484 'coreaudio':1327 'count':415,755 'cpu':613 'cpu-intens':612 'crash':1312 'creat':880,884 'createdat':91 'ctx':926 'ctx.insert':929 'ctx.save':934 'custom':1064,1069,1408 'dashboard':666,678 'data':582,584,586,592,1423,1485 'date':92,302 'datetim':306 'debug':1478 'deep':809 'default':458,534,550,565,882,1395 'defaultisol':557,1030 'defaults':141 'defaults/optional':511 'defer':351 'deleg':1151 'delet':318,321,454 'deleterul':94,429 'deni':459 'depend':1035,1351 'desc':402,413,418 'desc.fetchlimit':407 'destruct':320 'detail':202 'detailview':206 'develop':7,37,953,1368 'devic':821,1341 'display':1100,1111,1112 'distribut':22,943,1004 'dive':810 'doc':627,632,634,636,642,651 'doc.id':635,797 'docsav':789,795 'docsaved.self':804 'document':244,629,633,641 'document-bas':243 'documentgroup':242,1281 'documentstor':624 'doubl':739 'drag':1319 'drop':1320 'dual':1309 'dynam':388,683 'els':209,1102 'enabl':497,760 'endif':158 'entir':538 'enum':464,467,470 'environ':171,249,365,369 'exampl':1203,1269 'exceptingwindow':1115 'execut':573 'executabletarget':553,1024 'executor':1409 'exit':936,1358 'expect':890,907,909,912 'exportarch':973 'exportoptions.plist':979 'exportoptionsplist':978 'exportpath':976 'extern':1455 'fals':125,344,353,1095 'feb':49 'fetchdescriptor':398,403 'fetchprofil':670 'fetchstat':674 'file':1175,1271,1321 'fileurl':609 'filter':379,1104,1109,1147,1148 'final':84,107,336,422,437,743,750 'form':324,1292 'format':305,894,904 'formats':910 'forselectiontyp':313 'foundat':15,74,815 'foundationmodel':829 'frame':1192 'free':824 'fromvers':485 'func':345,390,576,630,637,662,686,883,903,1215,1221 'function':570 'gcd':1439 'generabl':843 'generat':860,1344 'get':638,1056 'glass':72,1047,1059,1065 'glasseffect':1062 'glasseffectcontain':1067 'global':1406 'gotcha':1283,1307,1315,1371 'group':700,722 'group.addtask':707 'guard':1098 'guid':1005,1343 'height':144 'hierarchi':1070 'high':1262 'hoc':960 'host':1232,1298 'hud':1303 'i/o':616 'icloud':498 'id':254,315,322,639,643,654,792,796,954,986,990,992,1369 'ideal':200,310 'idl':1335 'immut':751 'implement':29 'implicit':742 'import':79,81,828,872,1088,1431 'includ':1113 'info.plist':1076 'init':99,119 'inject':367,1352 'inspector':327,1290 'instanc':224,228 'int':697,715,906 'intens':614 'intent':1324 'interop':1207 'invers':431,1460 'iscomplet':114 'isload':343,349,352 'isol':536,566,1397 'isstoredinmemoryon':923 'issu':1287 'item':292,1333 'item.id.self':314 'kb':899,902 'keyboard':1317 'keyboardshortcut':272,281 'keychain':994 'languagemodelsess':832 'larg':1259 'latest':47,66 'let':204,409,414,583,604,645,650,661,668,672,747,791,830,833,852,885,915,925,1015,1090,1099,1108,1117,1144,1212,1415 'lifecycl':259 'lightweight':484 'lightweight/custom':1482 'liquid':71,1046,1058 'list':186 'llm':823 'load':346 'loaddashboard':663 'loadimag':711 'local':963 'login':1332 'low':1252 'lsuielement':1286,1334 'mac':27 'maco':3,5,35,42,54,58,63,68,148,288,329,817,1021,1048,1085,1170,1181,1276 'macos-n':287 'macro':1040,1383 'main':126,541,547,595,602 'mainactor':535,567,1396 'mainactor.self':558,1031 'mainactormessag':790 'makensview':1216 'manag':781,1279 'mani':451,453 'manual':1384 'many-to-mani':450 'map':729 'mark':569 'medium':1250,1255,1257 'menu':235,238 'menubarextra':151,234,1282 'menubarextrastyl':156 'menubarview':155 'menus':262 'method':944 'mic':1179 'microphon':1084 'migrat':462,1364,1447,1483,1486 'migrationplan':471,493 'migrationplan.self':494 'migrationstag':483 'min':198,308 'minim':1131 'mix':1388 'mode':762 'model':16,32,75,83,106,421,436,518,816,1405,1450 'model.self':492,503 'modelconfigur':922 'modelcontain':137,490,501,918,1465 'modelcontext':172,927,1466 'modifi':274,283,330 'modul':539 'monitor':1326 'multipl':223 'mutabl':757 'mvvm':1253,1349 'myapp':128,555,969,1019,1026,1036 'myapp.xcarchive':971,975 'myapptest':1034 'n':273,800 'n.id':806 'name':88,100,103,298,300,426,554,646,888,931,1018,1025,1033,1418 'nativ':26,41,289 'navigationlink':192 'navigationsplitview':185 'navigationsplitviewcolumnwidth':197 'need':510 'nest':1372 'new':270 'newitem':268 'nil':1159 'noaction':460 'nonisol':644,1399 'notar':946,1370 'notarytool':981 'notificationcent':785 'notificationcenter.default.notifications':802 'notificationcenter.default.post':794 'nsimag':692,698,716 'nspanel/floating':1302 'nsviewrepresent':1211,1297 'nullifi':457 'objc':1389 'observ':62,333,335,768,771,779,1247,1254,1435 'offlin':825 'on-devic':819,1339 'onscreenwindowson':1096 'op':523,1471 'open':247 'openwindow':250,252,253 'opt':537,1071 'option':515,1452 'order':165 'os':147 'output':842 'outsid':399 'overhead':1133 'owner':363 'p':886 'p.name':891 'packag':1016,1017 'package.swift':552,766,1379 'parallel':658 'pass':364 'password':993,996 'pattern':1242,1267 'per':1329 'per-process':1328 'permiss':1201 'picker':1186 'pipelin':1310 'pitfal':1402 'platform':1020 'plugin':1039,1382 'point':734,850 'popov':325,1293 'preconcurr':1430 'predic':376,380,389,394,395,404,405,1463 'prefer':232 'prevent':1337 'print':782 'prioriti':1417 'privat':167,173,177,384,625,826 'process':1325,1330 'processfil':577,608 'processimag':687 'profil':669,679,680 'project':86,117,118,135,169,170,180,187,190,194,207,213,271,340,341,354,387,875,887,930,1353 'project.createdat':164 'project.name':196,383 'project.self':139,920 'projectservice.fetchall':357 'projecttest':878 'prompt':859 'properti':509 'protocol':1422 'purpos':219 'quer':34 'queri':162,375,378 'queue':1429 'quick':76 'r':282,720,724 'race':1424 'read':368,1274 'rebuilt':1051 'recommend':955 'record':1176 'reentranc':1410 'refer':529,813,1197,1270 'references/actors-isolation.md':1403 'references/app-lifecycle.md':261,1277 'references/appkit-interop.md':1240,1296 'references/approachable-concurrency.md':1394 'references/architecture.md':1264,1348 'references/async-patterns.md':1432 'references/cloudkit-sync.md':1472 'references/container-context.md':1464 'references/distribution.md':1007,1365 'references/foundation-models.md':869,1338 'references/migration-guide.md':1438 'references/migrations.md':1480 'references/models-schema.md':1449 'references/relationships-predicates.md':1457 'references/screen-capture-audio.md':1205,1304 'references/sendable-safety.md':1420 'references/spm-build.md':1045,1378 'references/structured-concurrency.md':1411 'references/swiftui-macos.md':332,1288 'references/system-integration.md':1316 'references/testing.md':942,1355 'refresh':805 'relationship':93,419,428,446,516,1459 'replac':267 'requir':648,950,956 'resiz':221 'resolut':1476 'respons':834 'result':410,605,714,853 'results.append':723 'results.sorted':726 'return':589,675,725,1103 'revers':166 'review':947 'role':319 'rule':455,1461 'run':279,545,593 'runtim':1401 'safeti':1313,1425 'samplehandlerqueu':1158,1165 'sandbox':945,1375 'sccontentfilt':1110 'sccontentsharingpick':1183 'scene':133,216,218,258,1280 'schema':461,475 'schemamigrationplan':472 'schemav1':465 'schemav1.self':478,486 'schemav2':468 'schemav2.self':479,488 'scheme':968 'screcordingoutput':1172 'screen':1079,1157 'screencapturekit':19,1077,1089,1305 'scscreenshotmanag':1188 'scshareablecontent.excludingdesktopwindows':1094 'scstream':1146,1306 'scstreamconfigur':1119 'sdk':1055 'search':391,1295 'see':260,331,527,811,868,941,1006,1044,1204,1239,1263 'select':179,188,189,205,208,211,293 'selectedid':294 'self':699,1152,1155,1162 'self.createdat':104 'self.iscomplete':124 'self.name':102 'self.title':122 'sendabl':731,735,746,1421,1427 'serial':1428 'session':831,867 'session.respond':837,857 'set':149,231,562 'settingsview':150 'setup':1474 'share':1477 'sharedst':753 'sheet':326,1294 'shift':285 'shortcut':1318 'sidebar':1289 'sidebar.left':215 'sign':1374 'simplifi':1174 'singl':227,1191 'single-fram':1190 'single-inst':226 'size':895 'skill' 'skill-swift-macos' 'sleep':1336 'small':1249 'small-medium':1248 'solo':1251 'sort':163,382 'sortord':295,296 'source-tenequm' 'specif':1105 'spm':1008 'stage':482 'stapl':1000 'stapler':999 'start':77 'stat':673,681,682 'state':176,359,361,366,372,777 'state.progress':783 'static':473,480 'status':152 'storag':1456 'store':949,1367 'store.get':653 'stream':770,865,1145,1347 'stream.addstreamoutput':1154,1161 'stream.startcapture':1169 'strict':761,1260 'string':89,101,112,121,393,427,442,647,848,851,908 'struct':127,159,733,788,844,877,1209 'structur':655,841,1354 'style':241,1060 'submit':982 'suit':874 'summar':839 'summari':845,854 'summary.self':861 'surfac':1066 'swift':2,9,13,17,38,45,78,264,290,334,377,420,463,532,551,563,574,622,657,732,769,773,786,827,871,1009,1011,1042,1087,1208,1356,1380,1445 'swift-maco':1 'swift-tools-vers':1010 'swiftdata':12,31,52,61,82,374,528,913,1448 'swiftlanguagemod':763,1028 'swiftset':556,1027 'swiftui':11,51,67,80,1233,1246,1275 'sync':496,506,1479 'system':1185 'systemimag':153,214 'tabl':286,291,1291 'tablecolumn':297,301 'tag':448,449 'taho':56 'target':57,1023,1390 'targetapp':1114 'task':97,98,109,1412,1419 'task.self':140 'taskgroup':685,1413 'tca':1258,1350 'tcc':1314 'team':989,991,1256 'team-id':988 'term':392,397 'termin':1285 'test':18,526,870,873,876,879,889,892,893,914,932,937,940,1261,1357,1359,1362,1392 'testtarget':1032 'text':195,303,840 'throw':348,581,665,691 'timescal':1142 'titl':111,120,123,441,847 'tool':277,863,1012,1345 'topic-agent-skills' 'topic-ai-agents' 'topic-claude-code' 'topic-claude-skills' 'topic-clawhub' 'topic-erc-8004' 'topic-mpp' 'topic-openclaw' 'topic-skills' 'topic-solana' 'topic-x402' 'touch':619 'tovers':487 'transform':1454 'tri':355,411,416,585,590,606,676,693,709,718,835,855,917,933,1092,1153,1160,1167 'true':350,924,1097,1121,1127 'type':741,784,1156,1163 'ui':620,939,1187,1361 'uidesignrequiresliquidglass':1073 'uncheck':1426 'undo/redo':524,1469 'uniqu':513 'univers':1376 'updatensview':1222 'url':578,579,588,688,689,704,712,749,1213,1214,1229,1230 'urlrequest':1228 'urls.enumerated':706 'use':23,358,610,758,1061 'util':229 'uuid':628,640,793 'v':1223 'v.load':1227 'v14':1022 'v6':764,1029 'valu':193,299,740,1140 'var':87,90,96,110,113,116,130,168,174,178,181,251,339,342,360,371,385,401,425,433,440,443,447,474,481,626,713,736,754,846,849 'version':1013 'versionedschema':466,469,1481 'versionedschema.type':477 'video':1132 'view':161,184,400 'wait':997 'webviewwrapp':1210 'width':142,307 'window':157,217,222,225,230,240,248,1278 'windowgroup':134,220 'windows/scenes/navigation/menus/toolbars':30 'withthrowingtaskgroup':695 'wkwebview':1219,1220,1224 'work':615 'write':1199 'x':737 'xcode':560,1053 'xcodebuild':966,972 'xcrun':980,998 'xctest':1363 'y':738 'yes':952 'you@example.com':987","prices":[{"id":"42b7ca40-36a5-4131-8050-aafe6b64ff03","listingId":"e43e4182-783a-47d3-a89e-1bf431afe77d","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"tenequm","category":"skills","install_from":"skills.sh"},"createdAt":"2026-04-18T23:05:29.646Z"}],"sources":[{"listingId":"e43e4182-783a-47d3-a89e-1bf431afe77d","source":"github","sourceId":"tenequm/skills/swift-macos","sourceUrl":"https://github.com/tenequm/skills/tree/main/skills/swift-macos","isPrimary":false,"firstSeenAt":"2026-04-18T23:05:29.646Z","lastSeenAt":"2026-04-22T01:01:41.374Z"}],"details":{"listingId":"e43e4182-783a-47d3-a89e-1bf431afe77d","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"tenequm","slug":"swift-macos","github":{"repo":"tenequm/skills","stars":23,"topics":["agent-skills","ai-agents","claude-code","claude-skills","clawhub","erc-8004","mpp","openclaw","skills","solana","x402"],"license":"mit","html_url":"https://github.com/tenequm/skills","pushed_at":"2026-04-14T16:24:57Z","description":"Agent skills for building, shipping, and growing software products","skill_md_sha":"ddeaf6e434b3bed4a9cc561e6a0d35b260a71465","skill_md_path":"skills/swift-macos/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/tenequm/skills/tree/main/skills/swift-macos"},"layout":"multi","source":"github","category":"skills","frontmatter":{"name":"swift-macos","description":"Comprehensive macOS app development with Swift 6.2, SwiftUI, SwiftData, Swift Concurrency, Foundation Models, Swift Testing, ScreenCaptureKit, and app distribution. Use when building native Mac apps, implementing windows/scenes/navigation/menus/toolbars, SwiftData models and queries, modern concurrency, on-device AI, testing, screen/audio capture, menu bar apps, AppKit bridges, login items, process monitoring, or App Store and Developer ID distribution. Triggers on macOS app, SwiftUI macOS, SwiftData, Swift concurrency, Foundation Models, Swift Testing, ScreenCaptureKit, screen capture, screen recording, AVFoundation, MenuBarExtra, NSViewRepresentable, notarize, login item, and process monitoring."},"skills_sh_url":"https://skills.sh/tenequm/skills/swift-macos"},"updatedAt":"2026-04-22T01:01:41.374Z"}}