Create a production-ready macOS menu bar app using Tuist for project generation. Covers project setup, SwiftUI implementation, menu bar integration, and proper app lifecycle management.技能概述macos-menubar-tuist-app 技能使用Tuist进行项目生成创建生产就绪的macOS菜单栏应用。涵盖项目设置、SwiftUI实现、菜单栏集成和正确的应用生命周期管理。下载地址agentic-awesome-skills/skills/macos-menubar-tuist-app at main · sickn33/agentic-awesome-skills · GitHub触发条件在以下情况下应该调用此技能:创建新的macOS菜单栏应用使用Tuist设置项目结构实现菜单栏状态项功能配置应用生命周期和委托前置要求# 安装Tuistcurl -Ls https://install.tuist.io | bash# 或使用Homebrewbrew install tuist# 验证安装tuist version工作流程阶段阶段1: 项目设置# 创建项目目录mkdir MyApp cd MyApp# 初始化Tuist项目tuist init --template launch# 项目结构MyApp/├── Project.swift├── Targets/│ └── MyApp/│ ├── Sources/│ │ ├── MyAppApp.swift│ │ ├── AppDelegate.swift│ │ └── ContentView.swift│ └── Resources/│ └── Assets.xcassets└── Tuist/└── Config.swift阶段2: 项目配置import ProjectDescriptionlet project Project(name: MyApp,targets: [Target(name: MyApp,platform: .macOS,product: .app,bundleId: com.myapp,infoPlist: .extendingDefault(with: [LSUIElement: true,NSHumanReadableCopyright: © 2024 MyApp]),sources: [Targets/MyApp/Sources/**],resources: [Targets/MyApp/Resources/**],dependencies: [])])阶段3: 应用入口import SwiftUImainstruct MyAppApp: App {NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegatevar body: some Scene {Settings {EmptyView()}}}阶段4: 应用委托import AppKitimport SwiftUIclass AppDelegate: NSObject, NSApplicationDelegate {var statusItem: NSStatusItem?var popover: NSPopover!func applicationDidFinishLaunching(_ notification: Notification) {statusItem NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)if let button statusItem?.button {button.image NSImage(systemSymbolName: star.fill, accessibilityDescription: MyApp)button.action #selector(togglePopover)}popover NSPopover()popover.contentSize NSSize(width: 300, height: 400)popover.behavior .transientpopover.contentViewController NSHostingController(rootView: ContentView())}objc func togglePopover() {if let button statusItem?.button {if popover.isShown {popover.performClose(button)} else {popover.show(relativeTo: button.bounds, of: button, preferredEdge: .minY)}}}}阶段5: SwiftUI视图import SwiftUIstruct ContentView: View {var body: some View {VStack(spacing: 16) {Text(My Menu Bar App).font(.headline)Divider()Button(Action 1) {// 执行操作}Button(Action 2) {// 执行操作}Divider()Button(Quit) {NSApplication.shared.terminate(nil)}}.padding()}}阶段6: 构建和运行# 生成Xcode项目tuist generate# 打开Xcodeopen MyApp.xcworkspace# 或直接运行tuist run关键配置LSUIElement: 设置为true以隐藏Dock图标NSStatusItem: 创建菜单栏状态项NSPopover: 显示弹出视图AppDelegate: 管理应用生命周期质量门控应用在菜单栏显示图标点击图标显示弹出窗口应用不在Dock中显示所有功能正常工作局限性仅在任务明确匹配上述范围时使用此技能不要将输出视为环境特定验证、测试或专家审查的替代品如果缺少必需的输入、权限、安全边界或成功标准请停止并请求澄清