# XcodeGen spec for the Mac App Store build of Menu Band. # # This generates the Xcode app target needed for App Store archiving WITHOUT # committing a hand-authored .xcodeproj. SwiftPM (Package.swift) remains the # source of truth for the direct-download build; this is a parallel wrapper # that compiles the SAME Sources/MenuBand/*.swift into a signable .app with # the App Sandbox. # # Usage: # brew install xcodegen # one-time # cd slab/menuband # xcodegen generate # writes MenuBand.xcodeproj (git-ignore it) # open MenuBand.xcodeproj # # then: sign in to your Apple ID, pick the FB5948YR3S team with automatic # # signing, Product > Archive, Distribute App > App Store Connect. # # See STORE-APP-STORE.md for the full submission checklist + runtime tests. name: MenuBand options: bundleIdPrefix: computer.aestheticcomputer deploymentTarget: macOS: "11.0" createIntermediateGroups: true settings: base: SWIFT_VERSION: "5.9" # The fork flag (gates global keystroke capture / hotkeys / stickies / # update-checker / crash-upload) AND the bundle-shim flag (supplies # Bundle.module for this non-SwiftPM target). See MASBundleShim.swift. SWIFT_ACTIVE_COMPILATION_CONDITIONS: MAC_APP_STORE XCODE_APP_TARGET # The one place the MAS version lives. Every Info plist in this project # (app + both .appex) reads it back as $(MARKETING_VERSION) / # $(CURRENT_PROJECT_VERSION), so the extensions can't drift behind the app # — a mismatch here is an App Store validation error, and the extensions # sat a build behind through the whole 1.5.3 release. # The direct-download build keeps its own literals in Info.plist (SwiftPM # never sees these settings); bump both when releasing. MARKETING_VERSION: "1.5.4" CURRENT_PROJECT_VERSION: "155" targets: MenuBand: type: application platform: macOS deploymentTarget: "11.0" sources: # All Swift under Sources/MenuBand (incl. KidLisp/ + PianoWaveformWindow/ # subdirs). Resources + the .metal are handled separately below so they # land FLATTENED in the app's Resources root — matching SwiftPM's # `.process("Resources")` behavior, which is what the existing # `Bundle.module.url(forResource:withExtension:)` (no subdirectory:) # lookups rely on. - path: Sources/MenuBand excludes: - "KidLisp/README.md" - "Resources/**" - "WaveformShaders.metalsource" # Resource files → Copy Bundle Resources (flattened). verovio/sheet.html # + verovio-toolkit-wasm.js flatten into the same Resources root, so the # relative