diff --git a/.github/workflows/sdk.yml b/.github/workflows/sdk.yml index f25cc0535..5788728f3 100644 --- a/.github/workflows/sdk.yml +++ b/.github/workflows/sdk.yml @@ -28,16 +28,12 @@ jobs: if [[ "${TARGET}" == "Android" ]]; then submodules="modules/sentry-java" elif [[ "${TARGET}" == "Cocoa" ]]; then - submodules="" + submodules="modules/sentry-cocoa" else submodules="modules/sentry-native" fi echo "submodulesPath=$submodules" >> $GITHUB_OUTPUT - if [[ "$submodules" == "" ]]; then - echo "submodules=src/sentry-dotnet" >> $GITHUB_OUTPUT - else - echo "submodules=src/sentry-dotnet $submodules" >> $GITHUB_OUTPUT - fi + echo "submodules=src/sentry-dotnet $submodules" >> $GITHUB_OUTPUT - name: Get submodule status run: git submodule status --cached $SUBMODULES | tee submodules-status @@ -66,7 +62,7 @@ jobs: # hash of package/package.json for cache busting on release builds (version bump) path: | package-dev/Plugins - key: sdk=${{ env.TARGET }}-${{ hashFiles('submodules-status', 'package/package.json', 'Directory.Build.targets', 'sdk-static/**') }}${{ env.TARGET == 'Cocoa' && hashFiles('modules/sentry-cocoa.properties') || '' }} + key: sdk=${{ env.TARGET }}-${{ hashFiles('submodules-status', 'package/package.json', 'Directory.Build.targets', 'sdk-static/**', 'scripts/build-cocoa-sdk.ps1') }} - name: Installing Linux Dependencies if: ${{ env.TARGET == 'Linux' && steps.cache.outputs.cache-hit != 'true' }} @@ -95,11 +91,12 @@ jobs: run: dotnet msbuild /t:Build${{ env.TARGET }}SDK /p:Configuration=Release /p:OutDir=other src/Sentry.Unity - name: Upload build logs on failure - # No build logs for Cocoa SDK as we assemble the xcframework from a downloaded release artifact - if: ${{ failure() && env.TARGET != 'Cocoa' }} + if: ${{ failure() }} uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: - path: ${{ steps.env.outputs.submodulesPath }}/build.log + path: | + ${{ steps.env.outputs.submodulesPath }}/build.log + modules/sentry-cocoa/*.log # Lower retention period - we only need this to retry CI. retention-days: 14 diff --git a/.github/workflows/update-deps.yml b/.github/workflows/update-deps.yml index 47a66e751..29fbb1010 100644 --- a/.github/workflows/update-deps.yml +++ b/.github/workflows/update-deps.yml @@ -17,7 +17,7 @@ jobs: matrix: include: - name: Cocoa SDK - path: modules/sentry-cocoa.properties + path: modules/sentry-cocoa - name: Java SDK path: modules/sentry-java - name: Native SDK diff --git a/.gitignore b/.gitignore index 7eb5eab99..618d2ab2b 100644 --- a/.gitignore +++ b/.gitignore @@ -33,7 +33,6 @@ package-dev/Tests/Editor/TestFiles/ package-dev/Plugins/*/Sentry/crashpad_handler* # Download cache for native SDKs -modules/sentry-cocoa modules/sentry-native-ndk # Adding .meta to control target platforms for all of our DLLs diff --git a/.gitmodules b/.gitmodules index aaad81671..a9b426fac 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,6 @@ [submodule "modules/app-runner"] path = modules/app-runner url = https://github.com/getsentry/app-runner.git +[submodule "modules/sentry-cocoa"] + path = modules/sentry-cocoa + url = https://github.com/getsentry/sentry-cocoa.git diff --git a/Directory.Build.targets b/Directory.Build.targets index 9375f617a..ca40195e1 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -12,7 +12,7 @@ ../../artifacts/test/editmode/results.xml $(RepoRoot)package-dev/Plugins/ - $(RepoRoot)modules/sentry-cocoa/ + $(RepoRoot)modules/sentry-cocoa/ $(SentryArtifactsDestination)iOS/Sentry.xcframework~/ $(SentryArtifactsDestination)macOS/Sentry/ @@ -160,7 +160,7 @@ Expected to exist: - + @@ -190,20 +190,17 @@ Expected to exist: - + - - $([System.IO.File]::ReadAllText("$(RepoRoot)modules/sentry-cocoa.properties")) - $([System.Text.RegularExpressions.Regex]::Match($(PropertiesContent), 'version\s*=\s*([^\s]+)').Groups[1].Value) - + - + - + diff --git a/modules/sentry-cocoa b/modules/sentry-cocoa new file mode 160000 index 000000000..05d3ce833 --- /dev/null +++ b/modules/sentry-cocoa @@ -0,0 +1 @@ +Subproject commit 05d3ce8332097ff0b2347231ac66476fd7d2f4d8 diff --git a/modules/sentry-cocoa.properties b/modules/sentry-cocoa.properties deleted file mode 100644 index c953972b2..000000000 --- a/modules/sentry-cocoa.properties +++ /dev/null @@ -1,2 +0,0 @@ -version = 9.8.0 -repo = https://github.com/getsentry/sentry-cocoa diff --git a/scripts/build-cocoa-sdk.ps1 b/scripts/build-cocoa-sdk.ps1 new file mode 100644 index 000000000..deb8444b7 --- /dev/null +++ b/scripts/build-cocoa-sdk.ps1 @@ -0,0 +1,117 @@ +#!/usr/bin/env pwsh + +param( + [Parameter(Mandatory = $true)] + [string]$CocoaRoot, + + [Parameter(Mandatory = $true)] + [string]$iOSDestination, + + [Parameter(Mandatory = $true)] + [string]$macOSDestination +) + +Set-StrictMode -Version latest +$ErrorActionPreference = 'Stop' +$PSNativeCommandUseErrorActionPreference = $true + +if (-not (Test-Path (Join-Path $CocoaRoot "Sentry.xcodeproj"))) { + Write-Error "sentry-cocoa submodule not checked out at: $CocoaRoot`nRun: git submodule update --init modules/sentry-cocoa" + exit 1 +} + +# All build artifacts go under XCFrameworkBuildPath/ which is already in sentry-cocoa's .gitignore. +$buildPath = Join-Path $CocoaRoot "XCFrameworkBuildPath" +$iOSXcframeworkPath = Join-Path $buildPath "Sentry-Dynamic-iOS.xcframework" +$macOSXcframeworkPath = Join-Path $buildPath "Sentry-Dynamic-macOS.xcframework" + +Write-Host "Building Cocoa SDK from source..." -ForegroundColor Yellow + +Push-Location $CocoaRoot +try { + ################ Build and set up iOS support ################ + + if (-not (Test-Path $iOSXcframeworkPath)) { + Write-Host "Building iOS xcframework..." -ForegroundColor Yellow + # Exclude arm64e from the binary. Since Xcode 26, apps without arm64e in the main binary + # can't include frameworks with arm64e slices (App Store rejection). The sentry-cocoa SDK + # ships separate "-WithARM64e" variants for apps that need it; Unity games don't. + & ./scripts/build-xcframework-variant.sh "Sentry" "-Dynamic" "mh_dylib" "" "iOSOnly" "arm64e" + & ./scripts/validate-xcframework-format.sh "Sentry-Dynamic.xcframework" + # build-xcframework-variant.sh outputs to the working directory — move into our build cache + Move-Item -Path "Sentry-Dynamic.xcframework" -Destination $iOSXcframeworkPath -Force + # Clean up intermediate archives, keep the final xcframework + $archivePath = Join-Path $buildPath "archive" + if (Test-Path $archivePath) { + Remove-Item -Path $archivePath -Recurse -Force + } + } + + Write-Host "Setting up iOS frameworks..." -ForegroundColor Yellow + + if (Test-Path $iOSDestination) { + Remove-Item -Path $iOSDestination -Recurse -Force + } + + # Copy the xcframework as-is, including dSYMs. Since we build from source, the debug symbols + # won't be on Sentry's symbol server — they need to ship in the package so the Xcode build phase + # can upload them via sentry-cli, consistent with how all other native SDKs ship their debug symbols. + Copy-Item -Path $iOSXcframeworkPath -Destination $iOSDestination -Recurse -Force + + $iOSInfoPlist = Join-Path $iOSDestination "Info.plist" + if (-not (Test-Path $iOSInfoPlist)) { + Write-Error "Failed to set up the iOS SDK." + exit 1 + } + Write-Host "iOS SDK set up at: $iOSDestination" -ForegroundColor Green + + ################ Build and set up macOS support ################ + + if (-not (Test-Path $macOSXcframeworkPath)) { + Write-Host "Building macOS xcframework..." -ForegroundColor Yellow + & ./scripts/build-xcframework-variant.sh "Sentry" "-Dynamic" "mh_dylib" "" "macOSOnly" "" + & ./scripts/validate-xcframework-format.sh "Sentry-Dynamic.xcframework" + Move-Item -Path "Sentry-Dynamic.xcframework" -Destination $macOSXcframeworkPath -Force + # Clean up all remaining build intermediates + foreach ($dir in @("archive", "DerivedData")) { + $dirPath = Join-Path $buildPath $dir + if (Test-Path $dirPath) { + Remove-Item -Path $dirPath -Recurse -Force + } + } + } + + Write-Host "Setting up macOS support..." -ForegroundColor Yellow + + $macOSSlice = Get-ChildItem -Path $macOSXcframeworkPath -Directory | Where-Object { $_.Name -like "macos-*" } | Select-Object -First 1 + if (-not $macOSSlice) { + Write-Error "No macOS slice found in xcframework at: $macOSXcframeworkPath" + exit 1 + } + $macOSFrameworkPath = Join-Path $macOSSlice.FullName "Sentry.framework/Versions/A/Sentry" + $macOSdSYMPath = Join-Path $macOSSlice.FullName "dSYMs/Sentry.framework.dSYM/Contents/Resources/DWARF/Sentry" + + $macOSDestDir = Split-Path $macOSDestination -Parent + if (-not (Test-Path $macOSDestDir)) { + New-Item -ItemType Directory -Path $macOSDestDir -Force | Out-Null + } + + if (-not (Test-Path $macOSFrameworkPath)) { + Write-Error "macOS framework not found at: $macOSFrameworkPath" + exit 1 + } + Copy-Item -Path $macOSFrameworkPath -Destination $macOSDestination -Force + Write-Host "Copied macOS dylib to: $macOSDestination" -ForegroundColor Green + + $macOSdSYMDestination = "$macOSDestination.dSYM" + if (-not (Test-Path $macOSdSYMPath)) { + Write-Error "macOS dSYM not found at: $macOSdSYMPath" + exit 1 + } + Copy-Item -Path $macOSdSYMPath -Destination $macOSdSYMDestination -Force + Write-Host "Copied macOS dSYM to: $macOSdSYMDestination" -ForegroundColor Green +} finally { + Pop-Location +} + +Write-Host "Cocoa SDK build completed successfully!" -ForegroundColor Green diff --git a/scripts/download-native-sdks.ps1 b/scripts/download-native-sdks.ps1 index 63c3b9588..6d6853881 100644 --- a/scripts/download-native-sdks.ps1 +++ b/scripts/download-native-sdks.ps1 @@ -28,13 +28,30 @@ $SDKs = @( Destination = Join-Path $ArtifactsDestination "Android" CheckDir = "Sentry~" ExpectedFileCount = 4 + }, + @{ + Name = "Cocoa" + Destination = $ArtifactsDestination + CheckFiles = @( + "iOS/Sentry.xcframework~/Info.plist", + "macOS/Sentry/Sentry.dylib" + ) } ) function Test-SDKPresent { param($SDK) - if ($SDK.ContainsKey('CheckFile')) { + if ($SDK.ContainsKey('CheckFiles')) { + foreach ($file in $SDK.CheckFiles) { + $checkPath = Join-Path $SDK.Destination $file + if (-not (Test-Path $checkPath)) { + return $false + } + } + return $true + } + elseif ($SDK.ContainsKey('CheckFile')) { $checkPath = Join-Path $SDK.Destination $SDK.CheckFile return Test-Path $checkPath } @@ -75,20 +92,28 @@ function Download-SDK { Write-Host "Downloading $Name SDK..." -ForegroundColor Yellow - # Remove existing directory if present (partial download) - if (Test-Path $Destination) { - Write-Host " Removing existing directory..." -ForegroundColor Gray - Remove-Item -Path $Destination -Recurse -Force + $artifactName = "$Name-sdk" + + # Download to a temp directory, then move contents into destination + $tempDir = Join-Path ([System.IO.Path]::GetTempPath()) "sentry-$Name-sdk-download" + if (Test-Path $tempDir) { + Remove-Item -Path $tempDir -Recurse -Force } - $artifactName = "$Name-sdk" - gh run download $RunId -n $artifactName -D $Destination + gh run download $RunId -n $artifactName -D $tempDir if ($LASTEXITCODE -ne 0) { Write-Error "Failed to download $Name SDK" exit 1 } + # Move downloaded contents into the destination + if (-not (Test-Path $Destination)) { + New-Item -ItemType Directory -Path $Destination -Force | Out-Null + } + Copy-Item -Path (Join-Path $tempDir "*") -Destination $Destination -Recurse -Force + Remove-Item -Path $tempDir -Recurse -Force -ErrorAction SilentlyContinue + Write-Host " Downloaded $Name SDK successfully" -ForegroundColor Green } diff --git a/scripts/setup-cocoa-sdk.ps1 b/scripts/setup-cocoa-sdk.ps1 deleted file mode 100644 index 3e75c2d50..000000000 --- a/scripts/setup-cocoa-sdk.ps1 +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/env pwsh - -param( - [Parameter(Mandatory=$true)] - [string]$RepoRoot, - - [Parameter(Mandatory=$true)] - [string]$CocoaVersion, - - [Parameter(Mandatory=$true)] - [string]$CocoaCache, - - [Parameter(Mandatory=$true)] - [string]$iOSDestination, - - [Parameter(Mandatory=$true)] - [string]$macOSDestination, - - [switch]$iOSOnly -) - -Set-StrictMode -Version latest -$ErrorActionPreference = 'Stop' -$PSNativeCommandUseErrorActionPreference = $true - -# Clean cache if version does not exist to get rid of old versions -$zipFile = Join-Path $CocoaCache "Sentry-Dynamic-$CocoaVersion.xcframework.zip" -if (-not (Test-Path $zipFile)) { - Write-Host "Cleaning cache directory for new version..." -ForegroundColor Yellow - if (Test-Path $CocoaCache) { - Remove-Item -Path $CocoaCache -Recurse -Force - } -} - -if (-not (Test-Path $CocoaCache)) { - New-Item -ItemType Directory -Path $CocoaCache -Force | Out-Null -} - -if (-not (Test-Path $zipFile)) { - Write-Host "Downloading Cocoa SDK version '$CocoaVersion'..." -ForegroundColor Yellow - $downloadUrl = "https://github.com/getsentry/sentry-cocoa/releases/download/$CocoaVersion/Sentry-Dynamic.xcframework.zip" - Invoke-WebRequest -Uri $downloadUrl -OutFile $zipFile -} - -$xcframeworkPath = Join-Path $CocoaCache "Sentry-Dynamic.xcframework" -if (-not (Test-Path $xcframeworkPath)) { - Write-Host "Extracting xcframework..." -ForegroundColor Yellow - Expand-Archive -Path $zipFile -DestinationPath $CocoaCache -Force -} - -################ Set up iOS support ################ -# We strip out the iOS frameworks and create a new xcframework out of those. - -Write-Host "Setting up iOS frameworks..." -ForegroundColor Yellow - -$iOSFrameworks = Get-ChildItem -Path $xcframeworkPath -Directory | Where-Object { $_.Name -like "ios-*" -and $_.Name -notlike "*maccatalyst*" } -if ($iOSFrameworks.Count -eq 0) { - Write-Error "No iOS frameworks found in xcframework at: $xcframeworkPath" - exit 1 -} - -Write-Host "Found $($iOSFrameworks.Count) iOS frameworks:" -ForegroundColor Green -foreach ($framework in $iOSFrameworks) { - Write-Host " - $($framework.Name)" -ForegroundColor Cyan -} - -$xcodebuildArgs = @("-create-xcframework") - -foreach ($framework in $iOSFrameworks) { - $frameworkPath = Join-Path $framework.FullName "Sentry.framework" - if (Test-Path $frameworkPath) { - $xcodebuildArgs += "-framework" - $xcodebuildArgs += $frameworkPath - Write-Host "Adding framework: $frameworkPath" -ForegroundColor Cyan - } else { - Write-Warning "Framework not found at: $frameworkPath" - } -} - -# Remove the ~ suffix from destination. xcodebuild requires the output path to end with `.xcframework` -$xcframeworkDestination = $iOSDestination.TrimEnd('~', '/') - -$xcodebuildArgs += "-output" -$xcodebuildArgs += $xcframeworkDestination - -Write-Host "Creating iOS-only xcframework..." -ForegroundColor Yellow -Write-Host "Command: xcodebuild $($xcodebuildArgs -join ' ')" -ForegroundColor Gray - -try { - & xcodebuild @xcodebuildArgs - if ($LASTEXITCODE -ne 0) { - Write-Error "xcodebuild failed with exit code: $LASTEXITCODE" - exit 1 - } - Write-Host "Successfully created iOS-only xcframework at: $xcframeworkDestination" -ForegroundColor Green -} catch { - Write-Error "Failed to run xcodebuild: $($_.Exception.Message)" - exit 1 -} - -Write-Host "Appending '~' for Unity to ignore the framework" -Move-Item -Path $xcframeworkDestination -Destination $iOSDestination -Force - -$iOSInfoPlist = Join-Path $iOSDestination "Info.plist" -if (-not (Test-Path $iOSDestination) -or -not (Test-Path $iOSInfoPlist)) { - Write-Error "Failed to set up the iOS SDK." - exit 1 -} - -################ Set up macOS support ################ -# We copy the .dylib and the .dSYM directly into the plugins folder - -if (-not $iOSOnly) { - Write-Host "Setting up macOS support..." -ForegroundColor Yellow - - $macOSFrameworkPath = Join-Path $xcframeworkPath "macos-arm64_x86_64/Sentry.framework/Versions/A/Sentry" - $macOSdSYMPath = Join-Path $xcframeworkPath "macos-arm64_x86_64/dSYMs/Sentry.framework.dSYM/Contents/Resources/DWARF/Sentry" - - $macOSDestDir = Split-Path $macOSDestination -Parent - if (-not (Test-Path $macOSDestDir)) { - New-Item -ItemType Directory -Path $macOSDestDir -Force | Out-Null - } - - if (Test-Path $macOSFrameworkPath) { - Copy-Item -Path $macOSFrameworkPath -Destination $macOSDestination -Force - Write-Host "Copied macOS dylib to: $macOSDestination" -ForegroundColor Green - } else { - Write-Error "macOS framework not found at: $macOSFrameworkPath" - exit 1 - } - - $macOSdSYMDestination = "$macOSDestination.dSYM" - if (Test-Path $macOSdSYMPath) { - Copy-Item -Path $macOSdSYMPath -Destination $macOSdSYMDestination -Force - Write-Host "Copied macOS dSYM to: $macOSdSYMDestination" -ForegroundColor Green - } else { - Write-Error "macOS dSYM not found at: $macOSdSYMPath" - exit 1 - } - - if (-not (Test-Path $macOSDestination) -or -not (Test-Path $macOSdSYMDestination)) { - Write-Error "Failed to set up the macOS SDK." - exit 1 - } -} - -Write-Host "Cocoa SDK setup completed successfully!" -ForegroundColor Green \ No newline at end of file diff --git a/test/Scripts.Tests/package-release.zip.snapshot b/test/Scripts.Tests/package-release.zip.snapshot index 0fc135018..befe6c7f2 100644 --- a/test/Scripts.Tests/package-release.zip.snapshot +++ b/test/Scripts.Tests/package-release.zip.snapshot @@ -52,6 +52,7 @@ Plugins/iOS/SentryNativeBridgeNoOp.m.meta Plugins/iOS/Sentry.xcframework~/ios-arm64/ Plugins/iOS/Sentry.xcframework~/ios-arm64_x86_64-simulator/ Plugins/iOS/Sentry.xcframework~/Info.plist +Plugins/iOS/Sentry.xcframework~/ios-arm64_x86_64-simulator/dSYMs/ Plugins/iOS/Sentry.xcframework~/ios-arm64_x86_64-simulator/Sentry.framework/Info.plist Plugins/iOS/Sentry.xcframework~/ios-arm64_x86_64-simulator/Sentry.framework/PrivacyInfo.xcprivacy Plugins/iOS/Sentry.xcframework~/ios-arm64_x86_64-simulator/Sentry.framework/Sentry @@ -124,6 +125,14 @@ Plugins/iOS/Sentry.xcframework~/ios-arm64_x86_64-simulator/Sentry.framework/Modu Plugins/iOS/Sentry.xcframework~/ios-arm64_x86_64-simulator/Sentry.framework/Modules/Sentry.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface Plugins/iOS/Sentry.xcframework~/ios-arm64_x86_64-simulator/Sentry.framework/Modules/Sentry.swiftmodule/x86_64-apple-ios-simulator.swiftdoc Plugins/iOS/Sentry.xcframework~/ios-arm64_x86_64-simulator/Sentry.framework/Modules/Sentry.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +Plugins/iOS/Sentry.xcframework~/ios-arm64_x86_64-simulator/dSYMs/Sentry.framework.dSYM/ +Plugins/iOS/Sentry.xcframework~/ios-arm64_x86_64-simulator/dSYMs/Sentry.framework.dSYM/Contents/Resources/ +Plugins/iOS/Sentry.xcframework~/ios-arm64_x86_64-simulator/dSYMs/Sentry.framework.dSYM/Contents/Info.plist +Plugins/iOS/Sentry.xcframework~/ios-arm64_x86_64-simulator/dSYMs/Sentry.framework.dSYM/Contents/Resources/Relocations/ +Plugins/iOS/Sentry.xcframework~/ios-arm64_x86_64-simulator/dSYMs/Sentry.framework.dSYM/Contents/Resources/Relocations/aarch64/Sentry.yml +Plugins/iOS/Sentry.xcframework~/ios-arm64_x86_64-simulator/dSYMs/Sentry.framework.dSYM/Contents/Resources/Relocations/x86_64/Sentry.yml +Plugins/iOS/Sentry.xcframework~/ios-arm64_x86_64-simulator/dSYMs/Sentry.framework.dSYM/Contents/Resources/DWARF/Sentry +Plugins/iOS/Sentry.xcframework~/ios-arm64/dSYMs/ Plugins/iOS/Sentry.xcframework~/ios-arm64/Sentry.framework/Info.plist Plugins/iOS/Sentry.xcframework~/ios-arm64/Sentry.framework/PrivacyInfo.xcprivacy Plugins/iOS/Sentry.xcframework~/ios-arm64/Sentry.framework/Sentry @@ -195,6 +204,13 @@ Plugins/iOS/Sentry.xcframework~/ios-arm64/Sentry.framework/Modules/Sentry.swiftm Plugins/iOS/Sentry.xcframework~/ios-arm64/Sentry.framework/Modules/Sentry.swiftmodule/arm64e-apple-ios.private.swiftinterface Plugins/iOS/Sentry.xcframework~/ios-arm64/Sentry.framework/Modules/Sentry.swiftmodule/arm64e-apple-ios.swiftdoc Plugins/iOS/Sentry.xcframework~/ios-arm64/Sentry.framework/Modules/Sentry.swiftmodule/arm64e-apple-ios.swiftinterface +Plugins/iOS/Sentry.xcframework~/ios-arm64/dSYMs/Sentry.framework.dSYM/ +Plugins/iOS/Sentry.xcframework~/ios-arm64/dSYMs/Sentry.framework.dSYM/Contents/Resources/ +Plugins/iOS/Sentry.xcframework~/ios-arm64/dSYMs/Sentry.framework.dSYM/Contents/Info.plist +Plugins/iOS/Sentry.xcframework~/ios-arm64/dSYMs/Sentry.framework.dSYM/Contents/Resources/Relocations/ +Plugins/iOS/Sentry.xcframework~/ios-arm64/dSYMs/Sentry.framework.dSYM/Contents/Resources/Relocations/arm64e/Sentry.yml +Plugins/iOS/Sentry.xcframework~/ios-arm64/dSYMs/Sentry.framework.dSYM/Contents/Resources/Relocations/aarch64/Sentry.yml +Plugins/iOS/Sentry.xcframework~/ios-arm64/dSYMs/Sentry.framework.dSYM/Contents/Resources/DWARF/Sentry Plugins/Linux/Sentry.meta Plugins/Linux/Sentry/libsentry.dbg.so Plugins/Linux/Sentry/libsentry.dbg.so.meta