
SwiftUI-Agent-Skill macOS 跨平臺指南多窗口 Scene、窗口樣式與 AppKit 互操作【免費下載鏈接】SwiftUI-Agent-SkillAdd expert SwiftUI Best Practices guidance to your AI coding tool (Agent Skills open format).項目地址: https://gitcode.com/gh_mirrors/sw/SwiftUI-Agent-SkillSwiftUI-Agent-Skill 是一個面向 AI 編碼工具的開源 Agent Skill把實用的 SwiftUI 最佳實踐蒸餾成 AI 可即時調(diào)用的參考。本文聚焦 macOS 跨平臺部分如何選對多窗口 Scene、如何一步到位調(diào)好窗口樣式以及 SwiftUI 不夠用時如何與AppKit 互操作。新手也能跟著這份指南讓 AI 第一次就寫出蘋果味十足的 macOS 窗口代碼。1. 認識 SwiftUI-Agent-Skill 與 1 分鐘安裝一句話介紹這個 Skill 按 Agent Skills 開放格式打包包含一個主入口 SKILL.md 和 30 多份按需加載的參考文檔。AI 工具加載后遇到 SwiftUI 任務(wù)會自動查閱對應(yīng)參考而不是把全部內(nèi)容塞進上下文。它與 macOS 相關(guān)的參考文檔正是本文主角主題參考文件macOS 多窗口 Scenereferences/macos-scenes.md窗口與工具欄樣式references/macos-window-styling.mdmacOS 視圖與 AppKit 互操作references/macos-views.md一鍵克隆安裝git clone https://gitcode.com/gh_mirrors/sw/SwiftUI-Agent-Skill然后把skills/swiftui-expert-skill/目錄放入你的 AI 工具的技能目錄即可各工具的具體安裝方式見 INSTALLATION.md。驗證方法在 AI 對話里說一句使用 swiftui-expert 技能幫我設(shè)計一個帶菜單欄、設(shè)置窗口的 macOS 多窗口應(yīng)用——agent 會引用 SKILL.md 并跳轉(zhuǎn)到對應(yīng)參考文件說明安裝成功。2. 多窗口 Scene先選對窗戶macOS 版 SwiftUI 應(yīng)用由若干 Scene 類型拼成各自分工不同。建議先看技能里的速查表macos-scenes.mdScene可用性macOS 獨有適用場景WindowGroupmacOS 11否主窗口多實例、標簽頁、File NewWindowmacOS 13否輔助單例窗口系統(tǒng)保證只有一個UtilityWindowmacOS 15?浮動工具面板、檢查器面板SettingsmacOS 11?偏好設(shè)置窗口Cmd,MenuBarExtramacOS 13?菜單欄常駐圖標 / 菜單DocumentGroupmacOS 11否文檔型應(yīng)用新建/打開/保存全自動化2.1 WindowGroup vs Window最容易選錯的一對WindowGroup主窗口擔(dān)當(dāng)。用戶可以從File New Window打開多個實例還能合并成標簽頁即使全部關(guān)閉應(yīng)用仍保持運行。Window單例窗口。系統(tǒng)保證只存在一個實例若它是 App 唯一的 Scene關(guān)閉窗口時應(yīng)用直接退出適合視頻通話這類工具。經(jīng)驗法則主窗口一律WindowGroupWindow留給連接診斷器這類輔助單例窗口。2.2 MenuBarExtra菜單欄應(yīng)用的正確打開方式兩種形態(tài)任選.menu默認——下拉菜單適合操作 / 退出這類輕量工具.window——彈出面板可放任意自定義 SwiftUI 內(nèi)容適合實時狀態(tài)展示。再配合 Info.plist 的LSUIElement true即可做出不占 Dock 的純菜單欄應(yīng)用。2.3 UtilityWindow懂焦點的浮動窗UtilityWindowmacOS 15是工具面板的原生解法默認浮在主窗口之上、應(yīng)用失活時自動隱藏、按 Esc 可關(guān)閉還會自動在 View 菜單加入顯示/隱藏項。它通過FocusedValue讀取當(dāng)前聚焦主窗口的狀態(tài)天然實現(xiàn)主窗口看什么面板顯示什么無需手寫窗口管理邏輯。2.4 跨平臺必會的兩個細節(jié)程序化開窗用Environment(\.openWindow)調(diào)用openWindow(id: xxx)或openWindow(value: 數(shù)據(jù))窗口已打開時直接帶到前臺不會產(chǎn)生重復(fù)窗口。用#if os(macOS)包裹 macOS 專屬 Scenemacos-scenes.md同一份工程才能同時在 iOS 與 macOS 編譯WindowGroup { ContentView() } #if os(macOS) Settings { SettingsView() } MenuBarExtra(Status, systemImage: bolt) { StatusMenu() } #endif3. 窗口樣式一步到位工具欄、標題欄、尺寸與位置窗口外觀配置集中在 macos-window-styling.md四組修飾符就能讓窗口一眼原生。3.1 工具欄風(fēng)格windowToolbarStyle風(fēng)格效果.unified標題欄與工具欄合并為一行多數(shù)應(yīng)用首選.unifiedCompact與 unified 相同但高度更緊湊.expanded標題欄在工具欄上方給按鈕更多空間工具欄按鈕多時用.expanded其余情況推薦.unified或.unifiedCompact。3.2 標題欄、尺寸與位置控制修飾符作用.windowStyle(.hiddenTitleBar)隱藏標題欄適合播放器等沉浸式窗口.defaultSize(width:height:)新窗口初始尺寸一定要給.defaultPosition(.center)初始位置居中、四邊、四角.windowResizability(...).contentSize固定尺寸不可縮放.contentMinSize可縮放但有最小限制黃金組合內(nèi)容上設(shè)minWidth / minHeight.windowResizability(.contentMinSize).defaultSize窗口既不會被縮到壞掉新窗口也能以合理尺寸打開macos-window-styling.md。3.3 精準落位windowIdealPlacementmacOS 15 起支持閉包形式能拿到當(dāng)前顯示器的visibleArea幾何信息據(jù)此計算窗口位置與大小——主窗口直接開在屏幕右半屏這類需求從此有據(jù)可依多顯示器也不怕。3.4 原生布局雙雄NavigationSplitView 與 InspectorNavigationSplitView在 macOS 上分欄始終并排顯示不像 iPhone 那樣堆疊側(cè)欄自帶半透明材質(zhì)背景寬度可由用戶拖拽。側(cè)邊欄導(dǎo)航請選它而不是手寫HSplitView。InspectormacOS 14右側(cè)屬性面板自動與工具欄集成用戶可拖邊緣調(diào)整寬度。4. AppKit 互操作SwiftUI 搞不定時怎么辦macOS 視圖與互操作部分以 macos-views.md 為核心第一原則是優(yōu)先原生 SwiftUI確有需要再橋接 AppKit。4.1 SwiftUI → AppKitNSViewRepresentable要嵌入 WebView 或任意自定義NSView時用NSViewRepresentable包一層實現(xiàn)兩個方法makeNSView(context:)——創(chuàng)建 AppKit 視圖只調(diào)用一次updateNSView(_:context:)——SwiftUI 狀態(tài)變化時同步過去。需要接收代理回調(diào)例如搜索框輸入變化時加一個Coordinator把事件轉(zhuǎn)回 SwiftUI參考文檔里提供了完整示例macos-views.md。??紅線規(guī)則永遠不要直接修改已托管NSView的frame/bounds——布局歸 SwiftUI 管自己設(shè)置會導(dǎo)致錯位。4.2 AppKit → SwiftUINSHostingController / NSHostingView反過來如果存量 AppKit 工程想局部改用 SwiftUImacos-views.mdNSHostingController——把 SwiftUI 作為窗口的根控制器NSHostingView——把 SwiftUI 視圖直接塞進現(xiàn)有NSView層級。這是老工程改造的最低痛路逐窗口遷移而不必一次性重寫。4.3 值得知道的 macOS 專屬原生控件控件說明HSplitView/VSplitViewIDE 式對等分欄分隔條可拖拽Table.tableStyle(.bordered)多列表格支持隔行背景色CopyButtonmacOS 15一鍵復(fù)制 Transferable 內(nèi)容到剪貼板fileImporter/fileExporter原生打開/保存面板還能自定義按鈕文案特別提醒fileImporter返回的 URL 是安全作用域書簽讀取前必須調(diào)用startAccessingSecurityScopedResource()用完再釋放否則會靜默失敗。5. 新手快速清單交付前讓 AI 對照檢查一遍主窗口用WindowGroup輔助單例用Window偏好設(shè)置用Settings場景自動獲得 Cmd, 入口工具欄設(shè)為.unified/.unifiedCompact并提供了defaultSizemacOS 專屬 Scene 已用#if os(macOS)包裹側(cè)邊欄導(dǎo)航用NavigationSplitView浮動面板用UtilityWindowAppKit 橋接僅作最后手段且沒有手動改 frame6. 參考文檔速查文檔內(nèi)容SKILL.md技能主入口工作流、主題路由表、正確性清單references/macos-scenes.md6 種 Scene 全解生命周期、多窗口、菜單欄references/macos-window-styling.md工具欄、標題欄、尺寸位置與鍵盤快捷鍵references/macos-views.mdTable、拖放、文件操作與 AppKit 互操作INSTALLATION.md各 AI 工具的完整安裝方式裝好之后只需對 AI 說一句使用 swiftui expert 技能檢查當(dāng)前項目的 macOS 窗口與 AppKit 互操作技能就會自動路由到上述參考文檔逐條給出最佳實踐建議幫你把 macOS 應(yīng)用做到最原生的觀感?!久赓M下載鏈接】SwiftUI-Agent-SkillAdd expert SwiftUI Best Practices guidance to your AI coding tool (Agent Skills open format).項目地址: https://gitcode.com/gh_mirrors/sw/SwiftUI-Agent-Skill創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考