From feae267bc7dda9d6abe62324d934c98dc2d964b1 Mon Sep 17 00:00:00 2001 From: Itay Brenner Date: Mon, 6 Apr 2026 18:13:13 -0300 Subject: [PATCH 1/6] chore: add Package@swift-6.2.swift for compatibility with Xcode 26 --- .github/workflows/release.yml | 16 +++++ .github/workflows/test.yml | 7 +- CHANGELOG.md | 6 ++ Package@swift-6.2.swift | 123 ++++++++++++++++++++++++++++++++++ 4 files changed, 150 insertions(+), 2 deletions(-) create mode 100644 Package@swift-6.2.swift diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5a86ffd34d..c55c191983 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -168,6 +168,10 @@ jobs: --package-file Package@swift-6.1.swift \ --is-pr "${{ github.event_name == 'pull_request' }}" \ --change-path true + ./scripts/prepare-package.sh \ + --package-file Package@swift-6.2.swift \ + --is-pr "${{ github.event_name == 'pull_request' }}" \ + --change-path true - run: ./scripts/ci-select-xcode.sh 16.4 - run: swift build working-directory: Samples/macOS-SPM-CommandLine @@ -198,6 +202,10 @@ jobs: --package-file Package@swift-6.1.swift \ --is-pr "${{ github.event_name == 'pull_request' }}" \ --change-path true + ./scripts/prepare-package.sh \ + --package-file Package@swift-6.2.swift \ + --is-pr "${{ github.event_name == 'pull_request' }}" \ + --change-path true - run: ./scripts/ci-select-xcode.sh 16.4 - run: swift build working-directory: Samples/SPM-Dynamic @@ -228,6 +236,10 @@ jobs: --package-file Package@swift-6.1.swift \ --is-pr "${{ github.event_name == 'pull_request' }}" \ --change-path true + ./scripts/prepare-package.sh \ + --package-file Package@swift-6.2.swift \ + --is-pr "${{ github.event_name == 'pull_request' }}" \ + --change-path true - run: ./scripts/ci-select-xcode.sh 16.4 - run: swift build --target SentrySwiftUI - name: Run CI Diagnostics @@ -257,6 +269,10 @@ jobs: --package-file Package@swift-6.1.swift \ --is-pr "${{ github.event_name == 'pull_request' }}" \ --change-path true + ./scripts/prepare-package.sh \ + --package-file Package@swift-6.2.swift \ + --is-pr "${{ github.event_name == 'pull_request' }}" \ + --change-path true - run: ./scripts/ci-select-xcode.sh 16.4 - run: set -o pipefail &&xcodebuild build -scheme visionOS-SPM -sdk xros -destination 'generic/platform=xros' | tee raw-build-output-spm-visionOS.log | xcbeautify working-directory: Samples/visionOS-SPM diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 98b60f264b..1ee7bce7f9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -112,12 +112,15 @@ jobs: - name: Prepare Package.swift shell: bash run: | - # Swift 6.1+ uses Package@swift-6.1.swift; hide it so prepare-package's + # Swift 6.1+ and 6.2+ uses Package@swift-6.1.swift and Package@swift-6.2.swift; hide it so prepare-package's # modified Package.swift is used (avoids "Multiple commands produce" from - # unmodified binary targets in the 6.1 manifest). + # unmodified binary targets in the 6.1 and 6.2 manifests). if [[ -f Package@swift-6.1.swift ]]; then mv Package@swift-6.1.swift Package@swift-6.1.swift.bak fi + if [[ -f Package@swift-6.2.swift ]]; then + mv Package@swift-6.2.swift Package@swift-6.2.swift.bak + fi ./scripts/prepare-package.sh \ --package-file Package.swift \ --is-pr "${{ github.event_name == 'pull_request' }}" \ diff --git a/CHANGELOG.md b/CHANGELOG.md index 19afbe7d9f..84ad1a54fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Unreleased + +### Fixes + +- Add `Package@swift-6.2.swift` to avoid issues with Xcode 26 and unsafe build flags + ## 9.9.0 ### Features diff --git a/Package@swift-6.2.swift b/Package@swift-6.2.swift new file mode 100644 index 0000000000..87ec228d1a --- /dev/null +++ b/Package@swift-6.2.swift @@ -0,0 +1,123 @@ +// swift-tools-version:6.1 + +#if canImport(Darwin) +import Darwin.C +#elseif canImport(Glibc) +import Glibc +#elseif canImport(MSVCRT) +import MSVCRT +#endif + +import PackageDescription + +var products: [Product] = [ + .library(name: "Sentry", targets: ["Sentry", "SentryCppHelper"]), + .library(name: "Sentry-Dynamic", targets: ["Sentry-Dynamic"]), + .library(name: "Sentry-Dynamic-WithARM64e", targets: ["Sentry-Dynamic-WithARM64e"]), + .library(name: "Sentry-WithoutUIKitOrAppKit", targets: ["Sentry-WithoutUIKitOrAppKit", "SentryCppHelper"]), + .library(name: "Sentry-WithoutUIKitOrAppKit-WithARM64e", targets: ["Sentry-WithoutUIKitOrAppKit-WithARM64e", "SentryCppHelper"]), + .library(name: "SentrySwiftUI", targets: ["Sentry", "SentrySwiftUI", "SentryCppHelper"]), + .library(name: "SentryDistribution", targets: ["SentryDistribution"]) +] + +var targets: [Target] = [ + .binaryTarget( + name: "Sentry", + url: "https://github.com/getsentry/sentry-cocoa/releases/download/9.9.0/Sentry.xcframework.zip", + checksum: "7b110592cbec1820007261a620730646a16288a888c67c96d7a1f773d36f7356" //Sentry-Static + ), + .binaryTarget( + name: "Sentry-Dynamic", + url: "https://github.com/getsentry/sentry-cocoa/releases/download/9.9.0/Sentry-Dynamic.xcframework.zip", + checksum: "d5a6b84be1f0b59438e5d6ca43a4c9df8c26b45f65ddf2d9bc6606a0ca23e293" //Sentry-Dynamic + ), + .binaryTarget( + name: "Sentry-Dynamic-WithARM64e", + url: "https://github.com/getsentry/sentry-cocoa/releases/download/9.9.0/Sentry-Dynamic-WithARM64e.xcframework.zip", + checksum: "38a6b411ef141b9e47daa54c6c0cfa64082dc0f8d527f76feb96479ee350563b" //Sentry-Dynamic-WithARM64e + ), + .binaryTarget( + name: "Sentry-WithoutUIKitOrAppKit", + url: "https://github.com/getsentry/sentry-cocoa/releases/download/9.9.0/Sentry-WithoutUIKitOrAppKit.xcframework.zip", + checksum: "d5b16962a8ef18573036fd11a8f0cc3b72abece31d516d9295d4bc699345ffd2" //Sentry-WithoutUIKitOrAppKit + ), + .binaryTarget( + name: "Sentry-WithoutUIKitOrAppKit-WithARM64e", + url: "https://github.com/getsentry/sentry-cocoa/releases/download/9.9.0/Sentry-WithoutUIKitOrAppKit-WithARM64e.xcframework.zip", + checksum: "d518893f3e2442e2c4b758199141c99e55b3903b009984ceab7f5842da4a96b2" //Sentry-WithoutUIKitOrAppKit-WithARM64e + ), + .target( + name: "SentrySwiftUI", + dependencies: ["Sentry"], + path: "Sources/SentrySwiftUI", + exclude: ["module.modulemap"], + linkerSettings: [ + .linkedFramework("Sentry") + ] + ), + .target( + name: "SentryCppHelper", + path: "Sources/SentryCppHelper", + linkerSettings: [ + .linkedLibrary("c++") + ] + ), + .target(name: "SentryDistribution", path: "Sources/SentryDistribution"), + .testTarget(name: "SentryDistributionTests", dependencies: ["SentryDistribution"], path: "Sources/SentryDistributionTests") +] + +// Targets required to support compile-from-source builds via SPM. +products.append(.library(name: "SentrySPM", targets: ["SentryObjCInternal"])) +targets += [ + // At least one source file is required, therefore we use a dummy class to satisfy the SPM build system + .target( + name: "SentryHeaders", + path: "Sources/Sentry", + sources: ["SentryDummyPublicEmptyClass.m"], + publicHeadersPath: "Public" + ), + .target( + name: "_SentryPrivate", + dependencies: ["SentryHeaders"], + path: "Sources/Sentry", + sources: ["SentryDummyPrivateEmptyClass.m"], + publicHeadersPath: "include"), + .target( + name: "SentrySwift", + dependencies: ["_SentryPrivate", "SentryHeaders"], + path: "Sources/Swift", + swiftSettings: [ + .unsafeFlags(["-enable-library-evolution"]), + .define("SENTRY_NO_UI_FRAMEWORK", .when(traits: ["NoUIFramework"])) + ]), + + // SentryObjCInternal compiles all ObjC/C sources from the repo. Named "Internal" + // to reserve "SentryObjC" for a future public Objective-C wrapper around the SDK. + .target( + name: "SentryObjCInternal", + dependencies: ["SentrySwift"], + path: "Sources", + exclude: ["Sentry/SentryDummyPublicEmptyClass.m", "Sentry/SentryDummyPrivateEmptyClass.m", "Swift", "SentrySwiftUI", "Resources", "Configuration", "SentryCppHelper", "SentryDistribution", "SentryDistributionTests"], + cSettings: [ + .headerSearchPath("Sentry"), + .headerSearchPath("SentryCrash/Recording"), + .headerSearchPath("SentryCrash/Recording/Monitors"), + .headerSearchPath("SentryCrash/Recording/Tools"), + .headerSearchPath("SentryCrash/Installations"), + .headerSearchPath("SentryCrash/Reporting/Filters"), + .headerSearchPath("SentryCrash/Reporting/Filters/Tools"), + .define("SENTRY_NO_UI_FRAMEWORK", to: "1", .when(traits: ["NoUIFramework"])) + ]) +] + +let package = Package( + name: "Sentry", + platforms: [.iOS(.v15), .macOS(.v10_14), .tvOS(.v15), .watchOS(.v8), .visionOS(.v1)], + products: products, + traits: [ + .init(name: "NoUIFramework", description: "Build without UIKit/AppKit framework linkage. Use for command-line tools or contexts where UI frameworks are unavailable.") + ], + targets: targets, + swiftLanguageModes: [.v5], + cxxLanguageStandard: .cxx14 +) From 03f4c1647deadfa9a9c08ad247566e0bfa6b5052 Mon Sep 17 00:00:00 2001 From: Itay Brenner Date: Mon, 6 Apr 2026 18:18:27 -0300 Subject: [PATCH 2/6] Update Package@swift-6.2.swift --- Package@swift-6.2.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Package@swift-6.2.swift b/Package@swift-6.2.swift index 87ec228d1a..806db52c13 100644 --- a/Package@swift-6.2.swift +++ b/Package@swift-6.2.swift @@ -1,4 +1,4 @@ -// swift-tools-version:6.1 +// swift-tools-version:6.2 #if canImport(Darwin) import Darwin.C From 7b682b9324a5ce931d3250da7f6640c4b25f272d Mon Sep 17 00:00:00 2001 From: Itay Brenner Date: Mon, 6 Apr 2026 18:25:47 -0300 Subject: [PATCH 3/6] Update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 84ad1a54fb..3c8ffe8261 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ ### Fixes -- Add `Package@swift-6.2.swift` to avoid issues with Xcode 26 and unsafe build flags +- Added `Package@swift-6.2.swift` to avoid issues with unsafe build flags on SPM > 6.2 (#7778) ## 9.9.0 From f6187c332ecb90a6710498a4d76e497b78ace68c Mon Sep 17 00:00:00 2001 From: Itay Brenner Date: Thu, 9 Apr 2026 00:04:14 -0300 Subject: [PATCH 4/6] chore: add Package@swift-6.2.swift to version bump list --- Utils/VersionBump/main.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Utils/VersionBump/main.swift b/Utils/VersionBump/main.swift index 80d35ca928..ed27395e68 100644 --- a/Utils/VersionBump/main.swift +++ b/Utils/VersionBump/main.swift @@ -40,6 +40,7 @@ let files = [ "./Sentry.podspec", "./Package.swift", "./Package@swift-6.1.swift", + "./Package@swift-6.2.swift", "./SentrySwiftUI.podspec", "./Sources/Sentry/SentryMeta.m", "./3rd-party-integrations/SentrySwiftLog/Package.swift", From ce9313062c32c7c08ac9833db4d6ba3d93e1ca2f Mon Sep 17 00:00:00 2001 From: Itay Brenner Date: Thu, 9 Apr 2026 11:35:56 -0300 Subject: [PATCH 5/6] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index feb8b4fd35..4c274c7f84 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### Fixes - Added `Package@swift-6.2.swift` to avoid issues with unsafe build flags on SPM > 6.2 (#7778) + ## 9.10.0 ### Features From 7a8c78e26fc810fee3f497c511ac250d10210ff7 Mon Sep 17 00:00:00 2001 From: Itay Brenner Date: Thu, 9 Apr 2026 11:41:43 -0300 Subject: [PATCH 6/6] Sync Package@swift-6.2 to 9.10.0 --- Package@swift-6.2.swift | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Package@swift-6.2.swift b/Package@swift-6.2.swift index 806db52c13..9b99f5e486 100644 --- a/Package@swift-6.2.swift +++ b/Package@swift-6.2.swift @@ -23,28 +23,28 @@ var products: [Product] = [ var targets: [Target] = [ .binaryTarget( name: "Sentry", - url: "https://github.com/getsentry/sentry-cocoa/releases/download/9.9.0/Sentry.xcframework.zip", - checksum: "7b110592cbec1820007261a620730646a16288a888c67c96d7a1f773d36f7356" //Sentry-Static + url: "https://github.com/getsentry/sentry-cocoa/releases/download/9.10.0/Sentry.xcframework.zip", + checksum: "166692d02bb59fe9a158fe59b16e122fda40dddf6deaabed65a9e4b240f84c9b" //Sentry-Static ), .binaryTarget( name: "Sentry-Dynamic", - url: "https://github.com/getsentry/sentry-cocoa/releases/download/9.9.0/Sentry-Dynamic.xcframework.zip", - checksum: "d5a6b84be1f0b59438e5d6ca43a4c9df8c26b45f65ddf2d9bc6606a0ca23e293" //Sentry-Dynamic + url: "https://github.com/getsentry/sentry-cocoa/releases/download/9.10.0/Sentry-Dynamic.xcframework.zip", + checksum: "1dd70512f3b5af6c74f1b8f11279531900173fb638d7d541320a7cbc00ed06bc" //Sentry-Dynamic ), .binaryTarget( name: "Sentry-Dynamic-WithARM64e", - url: "https://github.com/getsentry/sentry-cocoa/releases/download/9.9.0/Sentry-Dynamic-WithARM64e.xcframework.zip", - checksum: "38a6b411ef141b9e47daa54c6c0cfa64082dc0f8d527f76feb96479ee350563b" //Sentry-Dynamic-WithARM64e + url: "https://github.com/getsentry/sentry-cocoa/releases/download/9.10.0/Sentry-Dynamic-WithARM64e.xcframework.zip", + checksum: "7d981d7ad0686c5fd68c791b721820a360285dc711e2b23e79114a6a62d799a6" //Sentry-Dynamic-WithARM64e ), .binaryTarget( name: "Sentry-WithoutUIKitOrAppKit", - url: "https://github.com/getsentry/sentry-cocoa/releases/download/9.9.0/Sentry-WithoutUIKitOrAppKit.xcframework.zip", - checksum: "d5b16962a8ef18573036fd11a8f0cc3b72abece31d516d9295d4bc699345ffd2" //Sentry-WithoutUIKitOrAppKit + url: "https://github.com/getsentry/sentry-cocoa/releases/download/9.10.0/Sentry-WithoutUIKitOrAppKit.xcframework.zip", + checksum: "8c70de11731587e2c615089464820b67d8f0103b5e019d81a16b0cac31e33e65" //Sentry-WithoutUIKitOrAppKit ), .binaryTarget( name: "Sentry-WithoutUIKitOrAppKit-WithARM64e", - url: "https://github.com/getsentry/sentry-cocoa/releases/download/9.9.0/Sentry-WithoutUIKitOrAppKit-WithARM64e.xcframework.zip", - checksum: "d518893f3e2442e2c4b758199141c99e55b3903b009984ceab7f5842da4a96b2" //Sentry-WithoutUIKitOrAppKit-WithARM64e + url: "https://github.com/getsentry/sentry-cocoa/releases/download/9.10.0/Sentry-WithoutUIKitOrAppKit-WithARM64e.xcframework.zip", + checksum: "abd3b0836ce6637cbc274e7d979b345ec3c2f46857d5412e78c1d2f0fe3397b0" //Sentry-WithoutUIKitOrAppKit-WithARM64e ), .target( name: "SentrySwiftUI",