XcodeGen-managed project (project.yml), SwiftUI single-window app 1280x800 / min 1100x700, dark theme tokens from docs/21, 270pt sidebar with logo/preset select/Calibrate/stepper 1-5, notice banner, five stage placeholders, ICCeryCore SPM package with AppPaths + WizardStage, Swift Testing plumbing. Sandbox off, hardened runtime on, bundle id com.gronod.iccery2. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
34 lines
1.1 KiB
Swift
34 lines
1.1 KiB
Swift
import AppKit
|
||
import SwiftUI
|
||
|
||
@main
|
||
struct ICCeryApp: App {
|
||
@NSApplicationDelegateAdaptor(AppDelegate.self) private var appDelegate
|
||
@State private var model = WizardViewModel()
|
||
|
||
var body: some Scene {
|
||
// Single fixed window (docs/21 §Shell: 1280×800, min 1100×700).
|
||
Window("ICCery", id: "main") {
|
||
RootView(model: model)
|
||
.frame(minWidth: 1100, minHeight: 700)
|
||
.preferredColorScheme(.dark)
|
||
}
|
||
.defaultSize(width: 1280, height: 800)
|
||
.windowResizability(.contentMinSize)
|
||
.defaultPosition(.center)
|
||
}
|
||
}
|
||
|
||
/// AppDelegate: quit when the single window closes, and give later
|
||
/// milestones a hook to `killAll` Argyll children before teardown
|
||
/// (#147/#149 — wired once ProcessManager exists in #2).
|
||
final class AppDelegate: NSObject, NSApplicationDelegate {
|
||
func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
|
||
true
|
||
}
|
||
|
||
func applicationWillTerminate(_ notification: Notification) {
|
||
// Issue #2+: ProcessManager.shared.killAll()
|
||
}
|
||
}
|