From 288fa54950f9ea5d12fe54a13998779c861a9c99 Mon Sep 17 00:00:00 2001 From: tukuyomil032 Date: Wed, 8 Jul 2026 22:13:44 +0900 Subject: [PATCH 01/10] feat: scaffold apps/native-macos SwiftPM package Set up the 3-target SwiftPM layout (executable App + library Core + testTarget CoreTests) per spec/native-macos-requirements.md's no-.xcodeproj decision: the executable stays a thin @main entry point while Core holds the actual logic/views, which is what lets #Preview work without ENABLE_DEBUG_DYLIB (only settable via .xcodeproj). Co-Authored-By: Claude Opus 4.7 --- .gitignore | 5 +++++ apps/native-macos/Package.swift | 23 +++++++++++++++++++++++ apps/native-macos/Sources/App/Main.swift | 8 ++++++++ apps/native-macos/Sources/Core/Core.swift | 3 +++ 4 files changed, 39 insertions(+) create mode 100644 apps/native-macos/Package.swift create mode 100644 apps/native-macos/Sources/App/Main.swift create mode 100644 apps/native-macos/Sources/Core/Core.swift diff --git a/.gitignore b/.gitignore index 28fade4..c91f9cf 100644 --- a/.gitignore +++ b/.gitignore @@ -175,3 +175,8 @@ docs/public/rustdoc/ test-results/** playwright/screenshots/** + +# Swift Package Manager build output +apps/native-macos/.build/ +apps/native-macos/.swiftpm/ +apps/native-macos/*.xcodeproj diff --git a/apps/native-macos/Package.swift b/apps/native-macos/Package.swift new file mode 100644 index 0000000..7c9a7fa --- /dev/null +++ b/apps/native-macos/Package.swift @@ -0,0 +1,23 @@ +// swift-tools-version:6.2 +import PackageDescription + +let package = Package( + name: "Native", + platforms: [.macOS(.v26)], + products: [ + .library(name: "Core", targets: ["Core"]) + ], + targets: [ + .executableTarget( + name: "App", + dependencies: ["Core"] + ), + .target( + name: "Core" + ), + .testTarget( + name: "CoreTests", + dependencies: ["Core"] + ), + ] +) diff --git a/apps/native-macos/Sources/App/Main.swift b/apps/native-macos/Sources/App/Main.swift new file mode 100644 index 0000000..6f311bf --- /dev/null +++ b/apps/native-macos/Sources/App/Main.swift @@ -0,0 +1,8 @@ +import Core + +@main +struct Main { + static func main() { + print("MC-Vector Native starting…") + } +} diff --git a/apps/native-macos/Sources/Core/Core.swift b/apps/native-macos/Sources/Core/Core.swift new file mode 100644 index 0000000..9e17e02 --- /dev/null +++ b/apps/native-macos/Sources/Core/Core.swift @@ -0,0 +1,3 @@ +public enum Core { + public static let version = "0.0.1" +} From 0da476177c437958b125c6c0d26a4222aa2bf706 Mon Sep 17 00:00:00 2001 From: tukuyomil032 Date: Wed, 8 Jul 2026 22:18:37 +0900 Subject: [PATCH 02/10] feat: add placeholder RootView with #Preview Confirms library-target separation lets #Preview render without ENABLE_DEBUG_DYLIB (Package.swift-only setup, no .xcodeproj). Co-Authored-By: Claude Opus 4.7 --- apps/native-macos/Sources/Core/RootView.swift | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 apps/native-macos/Sources/Core/RootView.swift diff --git a/apps/native-macos/Sources/Core/RootView.swift b/apps/native-macos/Sources/Core/RootView.swift new file mode 100644 index 0000000..d74db5e --- /dev/null +++ b/apps/native-macos/Sources/Core/RootView.swift @@ -0,0 +1,15 @@ +import SwiftUI + +public struct RootView: View { + public init() {} + + public var body: some View { + Text("MC-Vector Native") + .font(.title) + .padding() + } +} + +#Preview { + RootView() +} From 55e17ce19f4589528e43567f2566ea835fb3d1d9 Mon Sep 17 00:00:00 2001 From: tukuyomil032 Date: Wed, 8 Jul 2026 22:19:10 +0900 Subject: [PATCH 03/10] test: add minimal CoreTests baseline Confirms swift test discovers and runs the CoreTests target via Swift Testing (@Test/#expect), matching the framework Phase 3's security.rs migration (spec/phase-tasks.md 3-11) will use. Co-Authored-By: Claude Opus 4.7 --- apps/native-macos/Tests/CoreTests/CoreTests.swift | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 apps/native-macos/Tests/CoreTests/CoreTests.swift diff --git a/apps/native-macos/Tests/CoreTests/CoreTests.swift b/apps/native-macos/Tests/CoreTests/CoreTests.swift new file mode 100644 index 0000000..6fa044d --- /dev/null +++ b/apps/native-macos/Tests/CoreTests/CoreTests.swift @@ -0,0 +1,7 @@ +import Testing + +@testable import Core + +@Test func coreVersionIsSet() { + #expect(!Core.version.isEmpty) +} From 36fae0b343b26bd5eb32c0a5d5ea05e234774d32 Mon Sep 17 00:00:00 2001 From: tukuyomil032 Date: Wed, 8 Jul 2026 22:23:54 +0900 Subject: [PATCH 04/10] feat: add SwiftFormat via SPM command plugin nicklockwood/SwiftFormat only ships a command plugin (no build-tool plugin exists upstream), so this is invoked explicitly via `swift package --allow-writing-to-package-directory swiftformat` rather than running automatically on every build. Verified both lint (--lint) and write modes locally against the current source tree; fixed the one real violation swiftformat found in CoreTests.swift. Co-Authored-By: Claude Opus 4.7 --- apps/native-macos/.swiftformat | 6 ++++++ apps/native-macos/Package.resolved | 15 +++++++++++++++ apps/native-macos/Package.swift | 3 +++ apps/native-macos/Tests/CoreTests/CoreTests.swift | 4 ++-- 4 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 apps/native-macos/.swiftformat create mode 100644 apps/native-macos/Package.resolved diff --git a/apps/native-macos/.swiftformat b/apps/native-macos/.swiftformat new file mode 100644 index 0000000..01d416f --- /dev/null +++ b/apps/native-macos/.swiftformat @@ -0,0 +1,6 @@ +--swiftversion 6.2 +--indent 4 +--maxwidth 120 +--self insert +--importgrouping testable-last +--exclude .build diff --git a/apps/native-macos/Package.resolved b/apps/native-macos/Package.resolved new file mode 100644 index 0000000..a5fe8ad --- /dev/null +++ b/apps/native-macos/Package.resolved @@ -0,0 +1,15 @@ +{ + "originHash" : "2ae6490f4c5f16cc675d01d32bb7b1363134c81a9cfcffddeb52cc2dec46b606", + "pins" : [ + { + "identity" : "swiftformat", + "kind" : "remoteSourceControl", + "location" : "https://github.com/nicklockwood/SwiftFormat", + "state" : { + "revision" : "2226e9d89bf05a604cc985bab3dccb44ff7c8ee3", + "version" : "0.62.1" + } + } + ], + "version" : 3 +} diff --git a/apps/native-macos/Package.swift b/apps/native-macos/Package.swift index 7c9a7fa..1dcc3d8 100644 --- a/apps/native-macos/Package.swift +++ b/apps/native-macos/Package.swift @@ -7,6 +7,9 @@ let package = Package( products: [ .library(name: "Core", targets: ["Core"]) ], + dependencies: [ + .package(url: "https://github.com/nicklockwood/SwiftFormat", from: "0.62.1") + ], targets: [ .executableTarget( name: "App", diff --git a/apps/native-macos/Tests/CoreTests/CoreTests.swift b/apps/native-macos/Tests/CoreTests/CoreTests.swift index 6fa044d..706813a 100644 --- a/apps/native-macos/Tests/CoreTests/CoreTests.swift +++ b/apps/native-macos/Tests/CoreTests/CoreTests.swift @@ -1,7 +1,7 @@ import Testing - @testable import Core -@Test func coreVersionIsSet() { +@Test +func `Core.version is not empty`() { #expect(!Core.version.isEmpty) } From 1c6d900f08e368f86432f4d174bcc00ad38d11cb Mon Sep 17 00:00:00 2001 From: tukuyomil032 Date: Wed, 8 Jul 2026 22:29:53 +0900 Subject: [PATCH 05/10] feat: add SwiftLint via SPM build tool plugin Attach SwiftLintBuildToolPlugin to App/Core/CoreTests so `swift build` and `swift test` enforce .swiftlint.yml (strict: true) automatically, in contrast to SwiftFormat's manual command-plugin invocation. Also disables SwiftFormat's swiftTestingTestCaseNames rule: it rewrites `@Test("description") func name()` into a backtick-quoted function name, which then fails SwiftLint's identifier_name (validates_start_with_lowercase) check. Keeping the descriptive-string + camelCase form avoids the two tools fighting each other. Co-Authored-By: Claude Opus 4.7 --- apps/native-macos/.swiftformat | 1 + apps/native-macos/.swiftlint.yml | 14 +++ apps/native-macos/Package.resolved | 92 ++++++++++++++++++- apps/native-macos/Package.swift | 18 +++- .../Tests/CoreTests/CoreTests.swift | 4 +- 5 files changed, 122 insertions(+), 7 deletions(-) create mode 100644 apps/native-macos/.swiftlint.yml diff --git a/apps/native-macos/.swiftformat b/apps/native-macos/.swiftformat index 01d416f..b407da3 100644 --- a/apps/native-macos/.swiftformat +++ b/apps/native-macos/.swiftformat @@ -4,3 +4,4 @@ --self insert --importgrouping testable-last --exclude .build +--disable swiftTestingTestCaseNames diff --git a/apps/native-macos/.swiftlint.yml b/apps/native-macos/.swiftlint.yml new file mode 100644 index 0000000..f876410 --- /dev/null +++ b/apps/native-macos/.swiftlint.yml @@ -0,0 +1,14 @@ +strict: true +reporter: "xcode" + +excluded: + - .build + +opt_in_rules: + - empty_count + - explicit_init + - fatal_error_message + - force_unwrapping + +disabled_rules: + - todo diff --git a/apps/native-macos/Package.resolved b/apps/native-macos/Package.resolved index a5fe8ad..9f89549 100644 --- a/apps/native-macos/Package.resolved +++ b/apps/native-macos/Package.resolved @@ -1,6 +1,60 @@ { - "originHash" : "2ae6490f4c5f16cc675d01d32bb7b1363134c81a9cfcffddeb52cc2dec46b606", + "originHash" : "379e58a7245678ab1e3c48994f3dc224133ae4598cf751f783f3d5c657ead955", "pins" : [ + { + "identity" : "collectionconcurrencykit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/JohnSundell/CollectionConcurrencyKit.git", + "state" : { + "revision" : "b4f23e24b5a1bff301efc5e70871083ca029ff95", + "version" : "0.2.0" + } + }, + { + "identity" : "cryptoswift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/krzyzanowskim/CryptoSwift.git", + "state" : { + "revision" : "f2a627b84c1ff96f21ac2fcb623ab36142dd5512", + "version" : "1.10.0" + } + }, + { + "identity" : "sourcekitten", + "kind" : "remoteSourceControl", + "location" : "https://github.com/jpsim/SourceKitten.git", + "state" : { + "revision" : "6529c17fe80dd94843a3df7ed3e6a239790d5c91", + "version" : "0.37.3" + } + }, + { + "identity" : "swift-argument-parser", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-argument-parser.git", + "state" : { + "revision" : "6a52f3251125d74daf04fcbd5e6f08a75d074382", + "version" : "1.8.2" + } + }, + { + "identity" : "swift-filename-matcher", + "kind" : "remoteSourceControl", + "location" : "https://github.com/ileitch/swift-filename-matcher", + "state" : { + "revision" : "eef5ac0b6b3cdc64b3039b037bed2def8a1edaeb", + "version" : "2.0.1" + } + }, + { + "identity" : "swift-syntax", + "kind" : "remoteSourceControl", + "location" : "https://github.com/swiftlang/swift-syntax.git", + "state" : { + "revision" : "a8b1c535647243d603b6772e7e8306c993a0c188", + "version" : "605.0.0-prerelease-2026-06-26" + } + }, { "identity" : "swiftformat", "kind" : "remoteSourceControl", @@ -9,6 +63,42 @@ "revision" : "2226e9d89bf05a604cc985bab3dccb44ff7c8ee3", "version" : "0.62.1" } + }, + { + "identity" : "swiftlint", + "kind" : "remoteSourceControl", + "location" : "https://github.com/realm/SwiftLint", + "state" : { + "revision" : "fd768ba9a0e8a4f96d550d98de6c4cf2af565cf1", + "version" : "0.65.0" + } + }, + { + "identity" : "swiftytexttable", + "kind" : "remoteSourceControl", + "location" : "https://github.com/scottrhoyt/SwiftyTextTable.git", + "state" : { + "revision" : "c6df6cf533d120716bff38f8ff9885e1ce2a4ac3", + "version" : "0.9.0" + } + }, + { + "identity" : "swxmlhash", + "kind" : "remoteSourceControl", + "location" : "https://github.com/drmohundro/SWXMLHash.git", + "state" : { + "revision" : "a853604c9e9a83ad9954c7e3d2a565273982471f", + "version" : "7.0.2" + } + }, + { + "identity" : "yams", + "kind" : "remoteSourceControl", + "location" : "https://github.com/jpsim/Yams.git", + "state" : { + "revision" : "a27b21e0c81c5bf42049b897a62aaf387e80f279", + "version" : "6.2.2" + } } ], "version" : 3 diff --git a/apps/native-macos/Package.swift b/apps/native-macos/Package.swift index 1dcc3d8..f4e946e 100644 --- a/apps/native-macos/Package.swift +++ b/apps/native-macos/Package.swift @@ -8,19 +8,29 @@ let package = Package( .library(name: "Core", targets: ["Core"]) ], dependencies: [ - .package(url: "https://github.com/nicklockwood/SwiftFormat", from: "0.62.1") + .package(url: "https://github.com/nicklockwood/SwiftFormat", from: "0.62.1"), + .package(url: "https://github.com/realm/SwiftLint", from: "0.65.0"), ], targets: [ .executableTarget( name: "App", - dependencies: ["Core"] + dependencies: ["Core"], + plugins: [ + .plugin(name: "SwiftLintBuildToolPlugin", package: "SwiftLint") + ] ), .target( - name: "Core" + name: "Core", + plugins: [ + .plugin(name: "SwiftLintBuildToolPlugin", package: "SwiftLint") + ] ), .testTarget( name: "CoreTests", - dependencies: ["Core"] + dependencies: ["Core"], + plugins: [ + .plugin(name: "SwiftLintBuildToolPlugin", package: "SwiftLint") + ] ), ] ) diff --git a/apps/native-macos/Tests/CoreTests/CoreTests.swift b/apps/native-macos/Tests/CoreTests/CoreTests.swift index 706813a..21e44bc 100644 --- a/apps/native-macos/Tests/CoreTests/CoreTests.swift +++ b/apps/native-macos/Tests/CoreTests/CoreTests.swift @@ -1,7 +1,7 @@ import Testing @testable import Core -@Test -func `Core.version is not empty`() { +@Test("Core.version is not empty") +func coreVersionIsSet() { #expect(!Core.version.isEmpty) } From d038b92f5dcdd595c90f127dcbe5c2a2e53b722f Mon Sep 17 00:00:00 2001 From: tukuyomil032 Date: Wed, 8 Jul 2026 22:31:47 +0900 Subject: [PATCH 06/10] chore: add lint-format-swift lefthook job Mirrors the existing fmt-rust/lint-format-ts pre-commit jobs: runs swiftformat + swiftlint --fix over apps/native-macos on commit, and no-ops with a message (rather than failing) when swift isn't on PATH locally, since CI is the enforcement backstop either way. Verified end-to-end via `lefthook run pre-commit --command lint-format-swift --force --all-files`, which also caught and fixed a real trailing-comma violation in Package.swift. Co-Authored-By: Claude Opus 4.7 --- apps/native-macos/Package.swift | 4 ++-- lefthook.yml | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/apps/native-macos/Package.swift b/apps/native-macos/Package.swift index f4e946e..6343fc2 100644 --- a/apps/native-macos/Package.swift +++ b/apps/native-macos/Package.swift @@ -9,7 +9,7 @@ let package = Package( ], dependencies: [ .package(url: "https://github.com/nicklockwood/SwiftFormat", from: "0.62.1"), - .package(url: "https://github.com/realm/SwiftLint", from: "0.65.0"), + .package(url: "https://github.com/realm/SwiftLint", from: "0.65.0") ], targets: [ .executableTarget( @@ -31,6 +31,6 @@ let package = Package( plugins: [ .plugin(name: "SwiftLintBuildToolPlugin", package: "SwiftLint") ] - ), + ) ] ) diff --git a/lefthook.yml b/lefthook.yml index 289558d..5dec7c5 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -12,3 +12,14 @@ pre-commit: glob: 'docs/src/**/*.{ts,mjs}' run: pnpm --filter @mc-vector/docs check:fix stage_fixed: true + lint-format-swift: + glob: 'apps/native-macos/**/*.swift' + run: | + if ! command -v swift >/dev/null 2>&1; then + echo "swift not found locally, skipping Swift format/lint (still enforced in CI)" + exit 0 + fi + cd apps/native-macos && \ + swift package --allow-writing-to-package-directory swiftformat && \ + swift package --allow-writing-to-package-directory swiftlint --fix + stage_fixed: true From 2c6532a53bd544da6e6eb53e3acdbfa93482be73 Mon Sep 17 00:00:00 2001 From: tukuyomil032 Date: Wed, 8 Jul 2026 22:32:17 +0900 Subject: [PATCH 07/10] ci: add native.yml lint job for apps/native-macos ubuntu-latest job running swiftformat --lint and swiftlint --strict via the SPM plugins added in the previous two commits, gated on paths: ['apps/native-macos/**'] so it doesn't fire for unrelated changes. Uses swift-actions/setup-swift@v2 pinned to 6.2 to match Package.swift's swift-tools-version. Co-Authored-By: Claude Opus 4.7 --- .github/workflows/native.yml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 .github/workflows/native.yml diff --git a/.github/workflows/native.yml b/.github/workflows/native.yml new file mode 100644 index 0000000..1417562 --- /dev/null +++ b/.github/workflows/native.yml @@ -0,0 +1,29 @@ +--- +name: Native macOS + +on: + push: + branches: + - '**' + paths: + - 'apps/native-macos/**' + - '.github/workflows/native.yml' + +permissions: + contents: read + +jobs: + lint: + runs-on: ubuntu-latest + defaults: + run: + working-directory: apps/native-macos + steps: + - uses: actions/checkout@v7 + - uses: swift-actions/setup-swift@v2 + with: + swift-version: '6.2' + - name: SwiftFormat (lint) + run: swift package --allow-writing-to-package-directory swiftformat --lint + - name: SwiftLint + run: swift package --allow-writing-to-package-directory swiftlint --strict From c4242b985cb1d5f11579dd5eb20e4f311822c5be Mon Sep 17 00:00:00 2001 From: tukuyomil032 Date: Wed, 8 Jul 2026 22:33:28 +0900 Subject: [PATCH 08/10] ci: add native.yml build/test job on macos-26 Runs swift build + swift test on the macos-26 runner image (Xcode 26.x, matching this repo's local dev environment and the platforms: [.macOS(.v26)] requirement). Verified -skipPackagePluginValidation, which spec/phase-tasks.md flagged as possibly needed: it is not a recognized flag on Swift 6.2.4 (absent from swift build/test/package --help), and swift build/test already run cleanly without a TTY locally with the SwiftLint/SwiftFormat plugins attached, so it's omitted. Co-Authored-By: Claude Opus 4.7 --- .github/workflows/native.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.github/workflows/native.yml b/.github/workflows/native.yml index 1417562..8721aab 100644 --- a/.github/workflows/native.yml +++ b/.github/workflows/native.yml @@ -27,3 +27,17 @@ jobs: run: swift package --allow-writing-to-package-directory swiftformat --lint - name: SwiftLint run: swift package --allow-writing-to-package-directory swiftlint --strict + + build-and-test: + runs-on: macos-26 + defaults: + run: + working-directory: apps/native-macos + steps: + - uses: actions/checkout@v7 + - name: Select Xcode 26 + run: sudo xcode-select -s /Applications/Xcode_26.app 2>/dev/null || sudo xcode-select -s /Applications/Xcode.app + - name: swift build + run: swift build + - name: swift test + run: swift test From 752b230cc35975eee85be9c6a5979397837490c4 Mon Sep 17 00:00:00 2001 From: tukuyomil032 Date: Wed, 8 Jul 2026 22:34:06 +0900 Subject: [PATCH 09/10] docs: add native macOS build instructions New apps/native-macos/README.md documents swift build/test, the SwiftFormat/SwiftLint plugin invocations, and the lefthook/CI enforcement split. Root CLAUDE.md gets a one-line pointer to it. Co-Authored-By: Claude Opus 4.7 --- CLAUDE.md | 2 +- apps/native-macos/README.md | 44 +++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 apps/native-macos/README.md diff --git a/CLAUDE.md b/CLAUDE.md index d1c12e4..eb1bb98 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -6,7 +6,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co MC-Vector is a cross-platform desktop app (Tauri v2 + React 19 + TypeScript) for Minecraft server management. It handles server lifecycle, real-time monitoring, plugin/mod browsing (Modrinth, Hangar, SpigotMC), file editing (Monaco Editor), backups, Java version management, and Ngrok integration. -A macOS Tahoe (26)+ native app (Swift 6 / SwiftUI / AppKit) is planned as an independent reimplementation — not a shared-core port. See `spec/native-macos-requirements.md` for the full rationale. +A macOS Tahoe (26)+ native app (Swift 6 / SwiftUI / AppKit) is planned as an independent reimplementation — not a shared-core port. See `spec/native-macos-requirements.md` for the full rationale. The SwiftPM package lives under `apps/native-macos/` — see `apps/native-macos/README.md` for build/lint commands. After any refactor: run `pnpm build` and confirm it succeeds before finishing. diff --git a/apps/native-macos/README.md b/apps/native-macos/README.md new file mode 100644 index 0000000..1756692 --- /dev/null +++ b/apps/native-macos/README.md @@ -0,0 +1,44 @@ +# MC-Vector Native (macOS) + +Independent Swift/SwiftUI reimplementation of MC-Vector for macOS Tahoe (26)+. +See `spec/native-macos-requirements.md` for why this isn't a shared-core port, +and `spec/phase-tasks.md` for the phase-by-phase task breakdown. + +No `.xcodeproj` — this is a plain SwiftPM package. `App` is a thin +`@main` entry point; `Core` holds the actual views/logic (this split is what +lets `#Preview` work without `ENABLE_DEBUG_DYLIB`, which can only be set via +an `.xcodeproj`). + +## Requirements + +- macOS 26 (Tahoe)+ +- Xcode 26+ / Swift 6.2+ + +## Commands + +Run from `apps/native-macos/`: + +```bash +swift build # build App + Core +swift test # run CoreTests (Swift Testing) +``` + +Format and lint are exposed as SwiftPM plugins: + +```bash +# SwiftFormat (command plugin — no build-tool plugin exists upstream) +swift package --allow-writing-to-package-directory swiftformat # write +swift package --allow-writing-to-package-directory swiftformat --lint # check only + +# SwiftLint (build-tool plugin — runs automatically as part of `swift build`/`swift test`) +swift package --allow-writing-to-package-directory swiftlint --fix # autocorrect +``` + +`lefthook` runs both automatically on commit for files under `apps/native-macos/**/*.swift` +(see the `lint-format-swift` job in the root `lefthook.yml`); it no-ops with a message if +`swift` isn't on `PATH` locally, since CI (`.github/workflows/native.yml`) is the enforcement +backstop either way. + +## Opening in Xcode + +Xcode 26 can open `Package.swift` directly — no separate project file needed. From b8cf930f6ac286aa550ed30e69de364c8ca806e2 Mon Sep 17 00:00:00 2001 From: tukuyomi032 <118542180+tukuyomil032@users.noreply.github.com> Date: Wed, 8 Jul 2026 22:41:30 +0900 Subject: [PATCH 10/10] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .github/workflows/native.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/native.yml b/.github/workflows/native.yml index 8721aab..f65bef2 100644 --- a/.github/workflows/native.yml +++ b/.github/workflows/native.yml @@ -14,20 +14,18 @@ permissions: jobs: lint: - runs-on: ubuntu-latest + runs-on: macos-26 defaults: run: working-directory: apps/native-macos steps: - uses: actions/checkout@v7 - - uses: swift-actions/setup-swift@v2 - with: - swift-version: '6.2' + - name: Select Xcode 26 + run: sudo xcode-select -s /Applications/Xcode_26.app 2>/dev/null || sudo xcode-select -s /Applications/Xcode.app - name: SwiftFormat (lint) run: swift package --allow-writing-to-package-directory swiftformat --lint - name: SwiftLint run: swift package --allow-writing-to-package-directory swiftlint --strict - build-and-test: runs-on: macos-26 defaults: