playbook/antigravity-awesome-skills/skills/macos-spm-app-packaging/references/scaffold.md

80 lines
1.6 KiB
Markdown

# Scaffold a SwiftPM macOS app (no Xcode)
## Steps
1) Create a repo and initialize SwiftPM:
```
mkdir MyApp
cd MyApp
swift package init --type executable
```
2) Update `Package.swift` to target macOS and define an executable target for the app.
3) Create the app entry point under `Sources/MyApp/`.
- Use SwiftUI if you want a windowed app with minimal AppKit glue.
- Use AppKit if you want a menu bar or accessory-style app.
4) If you need app resources, add:
```
resources: [.process("Resources")]
```
and create `Sources/MyApp/Resources/`.
5) Add a `version.env` file (used by packaging templates):
```
MARKETING_VERSION=0.1.0
BUILD_NUMBER=1
```
6) Copy script templates from `assets/templates/` into your repo (for example, `Scripts/`).
## Minimal Package.swift (example)
```
// swift-tools-version: 6.2
import PackageDescription
let package = Package(
name: "MyApp",
platforms: [.macOS(.v14)],
targets: [
.executableTarget(
name: "MyApp",
path: "Sources/MyApp",
resources: [
.process("Resources")
])
]
)
```
## Minimal SwiftUI entry point (example)
```
import SwiftUI
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
Text("Hello")
}
}
}
```
## Minimal AppKit entry point (example)
```
import AppKit
final class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ notification: Notification) {
// Initialize app state here.
}
}
let app = NSApplication.shared
let delegate = AppDelegate()
app.delegate = delegate
app.setActivationPolicy(.regular)
app.run()
```