Scaffold the Xcode project — XcodeGen, Swift 6, sandboxed

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
This commit is contained in:
2026-07-26 15:00:31 -04:00
parent b0763c3c82
commit 01eabbe796
10 changed files with 162 additions and 0 deletions
+11
View File
@@ -0,0 +1,11 @@
# Generated by XcodeGen — project.yml is the source of truth
Kanban.xcodeproj/
# Xcode
DerivedData/
build/
*.xcresult
xcuserdata/
# macOS
.DS_Store
@@ -0,0 +1 @@
{"colors":[{"idiom":"universal"}],"info":{"version":1,"author":"xcode"}}
@@ -0,0 +1 @@
{"images":[],"info":{"version":1,"author":"xcode"}}
+1
View File
@@ -0,0 +1 @@
{"info":{"version":1,"author":"xcode"}}
+30
View File
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>Lanework</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Lanework</string>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSMinimumSystemVersion</key>
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
<key>NSHumanReadableCopyright</key>
<string>© 2026 rzen</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
<key>com.apple.security.files.bookmarks.app-scope</key>
<true/>
</dict>
</plist>
+12
View File
@@ -0,0 +1,12 @@
import SwiftUI
@main
struct KanbanApp: App {
var body: some Scene {
WindowGroup {
Text("Lanework")
.font(.largeTitle)
.padding(80)
}
}
}
+7
View File
@@ -0,0 +1,7 @@
import Testing
struct ScaffoldTests {
@Test func harnessRuns() {
#expect(Bool(true))
}
}
+11
View File
@@ -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))
}
}
+76
View File
@@ -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