From 01eabbe796b36e6b333005773aa2fcbc18b1e78a Mon Sep 17 00:00:00 2001 From: rzen Date: Sun, 26 Jul 2026 15:00:31 -0400 Subject: [PATCH] =?UTF-8?q?Scaffold=20the=20Xcode=20project=20=E2=80=94=20?= =?UTF-8?q?XcodeGen,=20Swift=206,=20sandboxed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit XcodeGen project (codename Kanban, display name Lanework, bundle id dev.rzen.indie.Kanban): macOS 26+ app target with Swift 6 strict concurrency, app sandbox with user-selected file access and app-scoped bookmark entitlements, plus unit-test (Swift Testing) and XCUITest targets wired into the Kanban scheme. Claude-Session: https://claude.ai/code/session_018BjQRYBR6jQja3jCRi5S3A --- .gitignore | 11 +++ .../AccentColor.colorset/Contents.json | 1 + .../AppIcon.appiconset/Contents.json | 1 + Kanban/Assets.xcassets/Contents.json | 1 + Kanban/Info.plist | 30 ++++++++ Kanban/Kanban.entitlements | 12 +++ Kanban/KanbanApp.swift | 12 +++ KanbanTests/KanbanTests.swift | 7 ++ KanbanUITests/KanbanUITests.swift | 11 +++ project.yml | 76 +++++++++++++++++++ 10 files changed, 162 insertions(+) create mode 100644 .gitignore create mode 100644 Kanban/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 Kanban/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Kanban/Assets.xcassets/Contents.json create mode 100644 Kanban/Info.plist create mode 100644 Kanban/Kanban.entitlements create mode 100644 Kanban/KanbanApp.swift create mode 100644 KanbanTests/KanbanTests.swift create mode 100644 KanbanUITests/KanbanUITests.swift create mode 100644 project.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4021787 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +# Generated by XcodeGen — project.yml is the source of truth +Kanban.xcodeproj/ + +# Xcode +DerivedData/ +build/ +*.xcresult +xcuserdata/ + +# macOS +.DS_Store diff --git a/Kanban/Assets.xcassets/AccentColor.colorset/Contents.json b/Kanban/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..7a9d8ed --- /dev/null +++ b/Kanban/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1 @@ +{"colors":[{"idiom":"universal"}],"info":{"version":1,"author":"xcode"}} diff --git a/Kanban/Assets.xcassets/AppIcon.appiconset/Contents.json b/Kanban/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..4e12dbb --- /dev/null +++ b/Kanban/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1 @@ +{"images":[],"info":{"version":1,"author":"xcode"}} diff --git a/Kanban/Assets.xcassets/Contents.json b/Kanban/Assets.xcassets/Contents.json new file mode 100644 index 0000000..2673658 --- /dev/null +++ b/Kanban/Assets.xcassets/Contents.json @@ -0,0 +1 @@ +{"info":{"version":1,"author":"xcode"}} diff --git a/Kanban/Info.plist b/Kanban/Info.plist new file mode 100644 index 0000000..0d32009 --- /dev/null +++ b/Kanban/Info.plist @@ -0,0 +1,30 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Lanework + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Lanework + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleVersion + 1 + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + © 2026 rzen + NSPrincipalClass + NSApplication + + diff --git a/Kanban/Kanban.entitlements b/Kanban/Kanban.entitlements new file mode 100644 index 0000000..05cf7fc --- /dev/null +++ b/Kanban/Kanban.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.files.user-selected.read-write + + com.apple.security.files.bookmarks.app-scope + + + diff --git a/Kanban/KanbanApp.swift b/Kanban/KanbanApp.swift new file mode 100644 index 0000000..19ddb11 --- /dev/null +++ b/Kanban/KanbanApp.swift @@ -0,0 +1,12 @@ +import SwiftUI + +@main +struct KanbanApp: App { + var body: some Scene { + WindowGroup { + Text("Lanework") + .font(.largeTitle) + .padding(80) + } + } +} diff --git a/KanbanTests/KanbanTests.swift b/KanbanTests/KanbanTests.swift new file mode 100644 index 0000000..8475ec5 --- /dev/null +++ b/KanbanTests/KanbanTests.swift @@ -0,0 +1,7 @@ +import Testing + +struct ScaffoldTests { + @Test func harnessRuns() { + #expect(Bool(true)) + } +} diff --git a/KanbanUITests/KanbanUITests.swift b/KanbanUITests/KanbanUITests.swift new file mode 100644 index 0000000..407e43f --- /dev/null +++ b/KanbanUITests/KanbanUITests.swift @@ -0,0 +1,11 @@ +import XCTest + +final class KanbanUITests: XCTestCase { + @MainActor + func testAppLaunches() throws { + let app = XCUIApplication() + app.launch() + XCTAssertTrue(app.wait(for: .runningForeground, timeout: 30)) + XCTAssertTrue(app.windows.firstMatch.waitForExistence(timeout: 30)) + } +} diff --git a/project.yml b/project.yml new file mode 100644 index 0000000..0c08cbd --- /dev/null +++ b/project.yml @@ -0,0 +1,76 @@ +name: Kanban +options: + bundleIdPrefix: dev.rzen.indie + deploymentTarget: + macOS: "26.0" + xcodeVersion: "26.0" + defaultConfig: Debug + +settings: + base: + SWIFT_VERSION: "6.0" + MACOSX_DEPLOYMENT_TARGET: "26.0" + DEVELOPMENT_TEAM: ${APPLE_TEAM_ID} + ENABLE_USER_SCRIPT_SANDBOXING: NO + +targets: + Kanban: + type: application + platform: macOS + sources: + - Kanban + settings: + base: + PRODUCT_BUNDLE_IDENTIFIER: dev.rzen.indie.Kanban + MARKETING_VERSION: "1.0" + INFOPLIST_FILE: Kanban/Info.plist + CODE_SIGN_ENTITLEMENTS: Kanban/Kanban.entitlements + GENERATE_INFOPLIST_FILE: false + SWIFT_STRICT_CONCURRENCY: complete + ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon + + KanbanTests: + type: bundle.unit-test + platform: macOS + sources: + - KanbanTests + dependencies: + - target: Kanban + settings: + base: + PRODUCT_BUNDLE_IDENTIFIER: dev.rzen.indie.KanbanTests + GENERATE_INFOPLIST_FILE: true + SWIFT_STRICT_CONCURRENCY: complete + + KanbanUITests: + type: bundle.ui-testing + platform: macOS + sources: + - KanbanUITests + dependencies: + - target: Kanban + settings: + base: + PRODUCT_BUNDLE_IDENTIFIER: dev.rzen.indie.KanbanUITests + GENERATE_INFOPLIST_FILE: true + SWIFT_STRICT_CONCURRENCY: complete + +schemes: + Kanban: + build: + targets: + Kanban: all + run: + config: Debug + test: + config: Debug + gatherCoverageData: false + targets: + - KanbanTests + - KanbanUITests + profile: + config: Release + analyze: + config: Debug + archive: + config: Release