From cc4ba7916293a878aaa3e1a4cbd3253212146e94 Mon Sep 17 00:00:00 2001 From: Kyle Date: Sun, 7 Jun 2026 17:31:07 +0800 Subject: [PATCH 1/8] Update CI toolchain versions --- .github/workflows/compatibility_tests.yml | 4 ++-- .github/workflows/compute.yml | 6 +++--- .github/workflows/ios.yml | 2 +- .github/workflows/macos.yml | 2 +- .github/workflows/oag_binary.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/ubuntu.yml | 2 +- .github/workflows/xcframework.yml | 2 +- .gitmodules | 2 +- .swiftformat | 2 +- Checkouts/swift | 2 +- Example/Tuist/Package.swift | 2 +- Package.resolved | 2 +- Package.swift | 2 +- README.md | 2 +- Tuist/Package.swift | 2 +- 16 files changed, 19 insertions(+), 19 deletions(-) diff --git a/.github/workflows/compatibility_tests.yml b/.github/workflows/compatibility_tests.yml index b66aaccf..c6a62b0c 100644 --- a/.github/workflows/compatibility_tests.yml +++ b/.github/workflows/compatibility_tests.yml @@ -14,7 +14,7 @@ jobs: matrix: include: - os: macos-15 - xcode-version: "16.4" # Swift 6.1.2 + xcode-version: "26.3" # Swift 6.2.4 runs-on: ${{ matrix.os }} env: OPENATTRIBUTEGRAPH_WERROR: 1 @@ -46,4 +46,4 @@ jobs: -sdk macosx \ -destination "platform=macOS" \ -skipPackagePluginValidation \ - -skipMacroValidation \ No newline at end of file + -skipMacroValidation diff --git a/.github/workflows/compute.yml b/.github/workflows/compute.yml index 85c28b79..406c94a2 100644 --- a/.github/workflows/compute.yml +++ b/.github/workflows/compute.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - swift_version: ["6.2"] + swift_version: ["6.2.4"] runs-on: ubuntu-22.04 env: OPENATTRIBUTEGRAPH_WERROR: 1 @@ -36,7 +36,7 @@ jobs: fail-fast: false matrix: os: [macos-15] - xcode-version: ["16.4"] + xcode-version: ["26.3"] runs-on: ${{ matrix.os }} env: OPENATTRIBUTEGRAPH_WERROR: 1 @@ -59,7 +59,7 @@ jobs: fail-fast: false matrix: os: [macos-15] - xcode-version: ["16.4"] + xcode-version: ["26.3"] ios-version: ["18.5"] include: - ios-version: "18.5" diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index bbd6cc1e..1e5c612a 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -13,7 +13,7 @@ jobs: fail-fast: false matrix: os: [macos-15] - xcode-version: ["16.4"] # Swift 6.1.2 + xcode-version: ["26.3"] # Swift 6.2.4 ios-version: ["18.5"] include: - ios-version: "18.5" diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 0f5c24bd..21f3ac6e 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -13,7 +13,7 @@ jobs: fail-fast: false matrix: os: [macos-15] - xcode-version: ["16.4"] # Swift 6.1.2 + xcode-version: ["26.3"] # Swift 6.2.4 runs-on: ${{ matrix.os }} env: OPENATTRIBUTEGRAPH_WERROR: 1 diff --git a/.github/workflows/oag_binary.yml b/.github/workflows/oag_binary.yml index 2b778688..859d5431 100644 --- a/.github/workflows/oag_binary.yml +++ b/.github/workflows/oag_binary.yml @@ -13,7 +13,7 @@ jobs: fail-fast: false matrix: os: [macos-15] - xcode-version: ["16.4"] + xcode-version: ["26.3"] runs-on: ${{ matrix.os }} env: OPENATTRIBUTEGRAPH_WERROR: 1 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b63fc91f..44a2a8c4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,7 +21,7 @@ jobs: - name: Setup Xcode uses: OpenSwiftUIProject/setup-xcode@v2 with: - xcode-version: "16.4" + xcode-version: "26.3" - name: Build XCFramework run: ./Scripts/build_xcframework.sh - name: Compute Checksum diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml index 7642134f..3afb116b 100644 --- a/.github/workflows/ubuntu.yml +++ b/.github/workflows/ubuntu.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - swift_version: ["6.1.3"] + swift_version: ["6.2.4"] runs-on: ubuntu-22.04 env: OPENATTRIBUTEGRAPH_WERROR: 1 diff --git a/.github/workflows/xcframework.yml b/.github/workflows/xcframework.yml index 5770cc0d..f80aee33 100644 --- a/.github/workflows/xcframework.yml +++ b/.github/workflows/xcframework.yml @@ -13,7 +13,7 @@ jobs: fail-fast: false matrix: os: [macos-15] - xcode-version: ["16.4"] # Swift 6.1.2 + xcode-version: ["26.3"] # Swift 6.2.4 runs-on: ${{ matrix.os }} env: GH_TOKEN: ${{ github.token }} diff --git a/.gitmodules b/.gitmodules index ad3cb7b2..acac8b53 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "Checkouts/swift"] path = Checkouts/swift url = https://github.com/OpenSwiftUIProject/swift-runtime-headers.git - branch = release/6.1 + branch = release/6.2 diff --git a/.swiftformat b/.swiftformat index 7786ea23..c8df86df 100644 --- a/.swiftformat +++ b/.swiftformat @@ -1,7 +1,7 @@ # OpenAttributeGraph SwiftFormat configuration # Swift version ---swiftversion 6.1 +--swiftversion 6.2 # Indentation --indent 4 diff --git a/Checkouts/swift b/Checkouts/swift index 358e0e0c..42c0a0f7 160000 --- a/Checkouts/swift +++ b/Checkouts/swift @@ -1 +1 @@ -Subproject commit 358e0e0c5d8e4df91c6d20d2f152f7c6f6cbccf1 +Subproject commit 42c0a0f7b02cc040c5a537fc5c577ca9b884dff8 diff --git a/Example/Tuist/Package.swift b/Example/Tuist/Package.swift index 47233079..477bc5cd 100644 --- a/Example/Tuist/Package.swift +++ b/Example/Tuist/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version: 6.1 +// swift-tools-version: 6.2 import PackageDescription diff --git a/Package.resolved b/Package.resolved index f59a13c9..71e45c99 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "2f39e651a0cb4fde3ebe01ff1f4c24b6fdca8e340f73bc84f4aa95788eb86a34", + "originHash" : "0f2838cb3bc78e7ad544b0139e01786c49af48c5b25d5c53976bd98d8a2ecd02", "pins" : [ { "identity" : "swift-numerics", diff --git a/Package.swift b/Package.swift index 3a26ce3e..cdd3dabe 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version: 6.1 +// swift-tools-version: 6.2 import Foundation import PackageDescription diff --git a/README.md b/README.md index d26ffd01..4d640246 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ For a simpler setup, you can use the prebuilt XCFramework available on the [rele ## Build -The current suggested toolchain to build the project is Swift 6.1.2 / Xcode 16.4. +The current suggested toolchain to build the project is Swift 6.2.4 / Xcode 26.3. ### Clone Swift headers diff --git a/Tuist/Package.swift b/Tuist/Package.swift index 85b0f148..fccb7e3b 100644 --- a/Tuist/Package.swift +++ b/Tuist/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version: 6.1 +// swift-tools-version: 6.2 import PackageDescription #if TUIST From aff4de0473718f768bfdd8e1f89d857ecb8f1b16 Mon Sep 17 00:00:00 2001 From: Kyle Date: Sun, 7 Jun 2026 19:06:19 +0800 Subject: [PATCH 2/8] Pin DarwinPrivateFrameworks CI fallback --- Scripts/CI/ag_setup.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Scripts/CI/ag_setup.sh b/Scripts/CI/ag_setup.sh index bca52591..f2859649 100755 --- a/Scripts/CI/ag_setup.sh +++ b/Scripts/CI/ag_setup.sh @@ -6,10 +6,14 @@ filepath() { } REPO_ROOT="$(dirname $(dirname $(dirname $(filepath $0))))" +DARWINPRIVATEFRAMEWORKS_FALLBACK_REVISION="b0c3d94ff6b7200754ad2adf948fd3c6ebaef956" clone_checkout_ag() { cd $REPO_ROOT - revision=$(Scripts/CI/get_revision.sh darwinprivateframeworks) + if ! revision=$(Scripts/CI/get_revision.sh darwinprivateframeworks 2>/dev/null); then + revision="$DARWINPRIVATEFRAMEWORKS_FALLBACK_REVISION" + echo "No pinned revision for DarwinPrivateFrameworks, using fallback revision: $revision" + fi cd .. if [ ! -d DarwinPrivateFrameworks ]; then gh repo clone OpenSwiftUIProject/DarwinPrivateFrameworks @@ -23,8 +27,6 @@ clone_checkout_ag() { fi if [ -n "$revision" ]; then git checkout --quiet "$revision" - else - echo "No pinned revision for DarwinPrivateFrameworks, using default branch." fi } From 4c916669c6b656aa4b5e5e54d3af4b19cbead373 Mon Sep 17 00:00:00 2001 From: Kyle Date: Sun, 7 Jun 2026 19:24:00 +0800 Subject: [PATCH 3/8] Use Swift 6.3.2 for Linux CI --- .github/workflows/compute.yml | 4 +++- .github/workflows/ubuntu.yml | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/compute.yml b/.github/workflows/compute.yml index 406c94a2..4a2a48a1 100644 --- a/.github/workflows/compute.yml +++ b/.github/workflows/compute.yml @@ -12,7 +12,9 @@ jobs: strategy: fail-fast: false matrix: - swift_version: ["6.2.4"] + # Swift 6.2.4 crashes swift-frontend when compiling C++ interop on Linux. + # Swift 6.3.2 has been verified locally on Linux. + swift_version: ["6.3.2"] runs-on: ubuntu-22.04 env: OPENATTRIBUTEGRAPH_WERROR: 1 diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml index 3afb116b..45687ac2 100644 --- a/.github/workflows/ubuntu.yml +++ b/.github/workflows/ubuntu.yml @@ -12,7 +12,9 @@ jobs: strategy: fail-fast: false matrix: - swift_version: ["6.2.4"] + # Swift 6.2.4 crashes swift-frontend when compiling C++ interop tests on Linux. + # Swift 6.3.2 has been verified locally on Linux. + swift_version: ["6.3.2"] runs-on: ubuntu-22.04 env: OPENATTRIBUTEGRAPH_WERROR: 1 From fd0e2d34d901bcab356c7c8b8099088270bd9b62 Mon Sep 17 00:00:00 2001 From: Kyle Date: Sun, 7 Jun 2026 19:24:54 +0800 Subject: [PATCH 4/8] Bump Compute dependency --- Package.resolved | 2 +- Package.swift | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Package.resolved b/Package.resolved index 71e45c99..57e4020e 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "0f2838cb3bc78e7ad544b0139e01786c49af48c5b25d5c53976bd98d8a2ecd02", + "originHash" : "8ff54a8b5b5dd48d5063d7d4ba0df9538c13f86fa2c17d5aafb0dde80b7ec8cd", "pins" : [ { "identity" : "swift-numerics", diff --git a/Package.swift b/Package.swift index cdd3dabe..e4115dc3 100644 --- a/Package.swift +++ b/Package.swift @@ -430,9 +430,9 @@ func setupDPFDependency() { if computeCondition { let computeBinary = envBoolValue("OPENATTRIBUTESHIMS_COMPUTE_USE_BINARY", default: false) if computeBinary { - let version = envStringValue("OPENATTRIBUTESHIMS_COMPUTE_BINARY_VERSION", default: "0.1.0") + let version = envStringValue("OPENATTRIBUTESHIMS_COMPUTE_BINARY_VERSION", default: "0.2.1") let url = envStringValue("OPENATTRIBUTESHIMS_COMPUTE_BINARY_URL", default: "https://github.com/jcmosc/Compute/releases/download/\(version)/Compute.xcframework.zip") - let checksum = envStringValue("OPENATTRIBUTESHIMS_COMPUTE_USE_BINARY_CHECKSUM", default: "e32dd27fa4df4928be69d4171bcb3d47192bebb467f70bfd728cca56d44682d6") + let checksum = envStringValue("OPENATTRIBUTESHIMS_COMPUTE_USE_BINARY_CHECKSUM", default: "44eb3f08b9da4e7e308bfb2654b36e6752547e8ba5ec33e19e0648c686990153") package.targets.append( .binaryTarget( name: "Compute", @@ -445,7 +445,7 @@ if computeCondition { if useLocalDeps { computeRepo = Package.Dependency.package(path: "../Compute") } else { - computeRepo = Package.Dependency.package(url: "https://github.com/jcmosc/Compute", exact: "0.1.0") + computeRepo = Package.Dependency.package(url: "https://github.com/jcmosc/Compute", exact: "0.2.1") } package.dependencies.append(computeRepo) } From 941455f04b471b05e890f3595fda0aff179efe8d Mon Sep 17 00:00:00 2001 From: Kyle Date: Sun, 7 Jun 2026 19:46:16 +0800 Subject: [PATCH 5/8] Disable index store for macOS SwiftPM tests --- .github/workflows/compatibility_tests.yml | 2 ++ .github/workflows/macos.yml | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/.github/workflows/compatibility_tests.yml b/.github/workflows/compatibility_tests.yml index c6a62b0c..ce12df1c 100644 --- a/.github/workflows/compatibility_tests.yml +++ b/.github/workflows/compatibility_tests.yml @@ -36,7 +36,9 @@ jobs: shell: bash - name: Run tests against Apple's AttributeGraph on macOS via SwiftPM run: | + # Swift 6.2.4 crashes while indexing C++ interop test targets. swift test \ + --disable-index-store \ --build-path .build-compatibility-test-debug - name: Run tests against Apple's AttributeGraph on macOS via Xcode run: | diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 21f3ac6e..8d2946a7 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -34,7 +34,9 @@ jobs: shell: bash - name: Build and run tests in debug mode with coverage run: | + # Swift 6.2.4 crashes while indexing C++ interop test targets. swift test \ + --disable-index-store \ -c debug \ --enable-code-coverage \ --build-path .build-test-debug @@ -44,7 +46,9 @@ jobs: > coverage.txt - name: Build and run tests in release mode run: | + # Swift 6.2.4 crashes while indexing C++ interop test targets. swift test \ + --disable-index-store \ -c release \ --enable-code-coverage \ --build-path .build-test-release From 41cefa42ac8bf475b53973255f10db110bbd084c Mon Sep 17 00:00:00 2001 From: Kyle Date: Sun, 7 Jun 2026 19:56:47 +0800 Subject: [PATCH 6/8] Disable index store for iOS xcodebuild CI --- .github/workflows/ios.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index 1e5c612a..90b4f500 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -38,6 +38,7 @@ jobs: shell: bash - name: Build in debug mode on iOS run: | + # Swift 6.2.4 crashes while indexing C++ interop test targets. xcodebuild build \ -workspace .swiftpm/xcode/package.xcworkspace \ -scheme OpenAttributeGraph-Package \ @@ -46,9 +47,11 @@ jobs: -derivedDataPath .build-debug \ -skipMacroValidation \ -skipPackagePluginValidation \ + COMPILER_INDEX_STORE_ENABLE=NO \ OTHER_SWIFT_FLAGS="-warnings-as-errors" - name: Build and run tests in debug mode with coverage on iOS Simulator run: | + # Swift 6.2.4 crashes while indexing C++ interop test targets. xcodebuild test \ -workspace .swiftpm/xcode/package.xcworkspace \ -scheme OpenAttributeGraph-Package \ @@ -57,7 +60,8 @@ jobs: -enableCodeCoverage=YES \ -derivedDataPath .build-test-debug \ -skipPackagePluginValidation \ - -skipMacroValidation + -skipMacroValidation \ + COMPILER_INDEX_STORE_ENABLE=NO # OTHER_SWIFT_FLAGS="-warnings-as-errors" Conflicting options '-warnings-as-errors' and '-suppress-warnings' - name: Generate iOS coverage report run: | From cae378b791346cd5b4aa631a3cd57241433da31b Mon Sep 17 00:00:00 2001 From: Kyle Date: Sun, 7 Jun 2026 19:56:48 +0800 Subject: [PATCH 7/8] Make test helper tuples Sendable --- Tests/OpenAttributeGraphTestsSupport/DataHelper.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Tests/OpenAttributeGraphTestsSupport/DataHelper.swift b/Tests/OpenAttributeGraphTestsSupport/DataHelper.swift index d7152a99..53cc2b5f 100644 --- a/Tests/OpenAttributeGraphTestsSupport/DataHelper.swift +++ b/Tests/OpenAttributeGraphTestsSupport/DataHelper.swift @@ -12,6 +12,8 @@ public struct Tuple { } } +extension Tuple: Sendable where A: Sendable, B: Sendable {} + public struct Triple { public var first: A public var second: B @@ -23,3 +25,5 @@ public struct Triple { self.third = third } } + +extension Triple: Sendable where A: Sendable, B: Sendable, C: Sendable {} From 99deb4efad44d443c78e0700ff1c256036e7947d Mon Sep 17 00:00:00 2001 From: Kyle Date: Sun, 7 Jun 2026 20:11:49 +0800 Subject: [PATCH 8/8] Configure Example workspace for Xcode tests --- Example/Project.swift | 9 ++++++++- Example/Tuist/Package.resolved | 15 +++++++++++++++ Example/Tuist/Package.swift | 14 ++++++++++++++ Example/mise.toml | 2 ++ Example/setup.sh | 11 +++++++++++ 5 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 Example/Tuist/Package.resolved create mode 100644 Example/mise.toml create mode 100755 Example/setup.sh diff --git a/Example/Project.swift b/Example/Project.swift index ce75b319..5c3aec6e 100644 --- a/Example/Project.swift +++ b/Example/Project.swift @@ -1,7 +1,13 @@ import ProjectDescription +let indexStoreDisabledSettings: SettingsDictionary = [ + // Swift 6.2.4 crashes while indexing C++ interop package targets. + "COMPILER_INDEX_STORE_ENABLE": "NO", +] + let project = Project( name: "Example", + settings: .settings(base: indexStoreDisabledSettings), targets: [ .target( name: "Example", @@ -13,7 +19,8 @@ let project = Project( dependencies: [ .sdk(name: "c++", type: .library), .external(name: "OpenAttributeGraph"), - ] + ], + settings: .settings(base: indexStoreDisabledSettings) ), ] ) diff --git a/Example/Tuist/Package.resolved b/Example/Tuist/Package.resolved new file mode 100644 index 00000000..e8cf1f64 --- /dev/null +++ b/Example/Tuist/Package.resolved @@ -0,0 +1,15 @@ +{ + "originHash" : "b4d69cd3c6294a612f2691e0c9ace37d5e8c8904296914f23e337abb762050c2", + "pins" : [ + { + "identity" : "swift-numerics", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-numerics", + "state" : { + "revision" : "0c0290ff6b24942dadb83a929ffaaa1481df04a2", + "version" : "1.1.1" + } + } + ], + "version" : 3 +} diff --git a/Example/Tuist/Package.swift b/Example/Tuist/Package.swift index 477bc5cd..9384c666 100644 --- a/Example/Tuist/Package.swift +++ b/Example/Tuist/Package.swift @@ -2,9 +2,23 @@ import PackageDescription +#if TUIST +import ProjectDescription + +let indexStoreDisabledSettings: SettingsDictionary = [ + // Swift 6.2.4 crashes while indexing C++ interop package targets. + "COMPILER_INDEX_STORE_ENABLE": "NO", +] + +let packageSettings = PackageSettings( + baseSettings: .settings(base: indexStoreDisabledSettings) +) +#endif + let package = Package( name: "ExampleDependencies", dependencies: [ .package(path: "../../"), + .package(url: "https://github.com/apple/swift-numerics", from: "1.1.1"), ] ) diff --git a/Example/mise.toml b/Example/mise.toml new file mode 100644 index 00000000..9d16c181 --- /dev/null +++ b/Example/mise.toml @@ -0,0 +1,2 @@ +[tools] +tuist = "4.193.0" diff --git a/Example/setup.sh b/Example/setup.sh new file mode 100755 index 00000000..56e8dd6e --- /dev/null +++ b/Example/setup.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)" + +cd "$SCRIPT_DIR" +mise trust "$SCRIPT_DIR/mise.toml" +mise install +mise exec -- tuist install +mise exec -- tuist generate --no-open