From a72802e57300310689498cfa8ed4f6113cc1b3a0 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Thu, 25 Sep 2025 13:24:03 +0200 Subject: [PATCH 01/44] POC: Add `swift-log` package --- Package.swift | 23 +- Samples/iOS-Swift/iOS-Swift/AppDelegate.swift | 10 + .../iOS-Swift/ExtraViewController.swift | 12 +- Sentry.xcodeproj/project.pbxproj | 925 +++++++++++++++++- Sources/SwiftLog/SentryLogHandler.swift | 116 +++ 5 files changed, 1072 insertions(+), 14 deletions(-) create mode 100644 Sources/SwiftLog/SentryLogHandler.swift diff --git a/Package.swift b/Package.swift index ecb18cb5186..8f2ac56c7d6 100644 --- a/Package.swift +++ b/Package.swift @@ -15,7 +15,8 @@ var products: [Product] = [ .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: "SentrySwiftUI", targets: ["Sentry", "SentrySwiftUI", "SentryCppHelper"]), + .library(name: "swift-log-sentry", targets: ["Sentry", "swift-log-sentry"]) ] var targets: [Target] = [ @@ -51,14 +52,24 @@ var targets: [Target] = [ exclude: ["SentryInternal/", "module.modulemap"], linkerSettings: [ .linkedFramework("Sentry") - ]), + ] + ), + .target ( + name: "swift-log-sentry", + dependencies: ["Sentry", .product(name: "Logging", package: "swift-log")], + path: "Sources/SwiftLog", + linkerSettings: [ + .linkedFramework("Sentry") + ] + ), .target( name: "SentryInternal", path: "Sources/SentrySwiftUI", sources: [ "SentryInternal/" ], - publicHeadersPath: "SentryInternal/"), + publicHeadersPath: "SentryInternal/" + ), .target( name: "SentryCppHelper", dependencies: ["Sentry"], @@ -111,7 +122,8 @@ if let env = env, String(cString: env, encoding: .utf8) == "1" { .headerSearchPath("SentryCrash/Installations"), .headerSearchPath("SentryCrash/Reporting/Filters"), .headerSearchPath("SentryCrash/Reporting/Filters/Tools"), - .define("SDK_V9")]) + .define("SDK_V9")] + ) ]) } @@ -119,6 +131,9 @@ let package = Package( name: "Sentry", platforms: [.iOS(.v11), .macOS(.v10_13), .tvOS(.v11), .watchOS(.v4)], products: products, + dependencies: [ + .package(url: "https://github.com/apple/swift-log", from: "1.6.0") // TODO: This clases with iOS 11 min target version + ], targets: targets, cxxLanguageStandard: .cxx14 ) diff --git a/Samples/iOS-Swift/iOS-Swift/AppDelegate.swift b/Samples/iOS-Swift/iOS-Swift/AppDelegate.swift index e377481492c..8a5b58fc755 100644 --- a/Samples/iOS-Swift/iOS-Swift/AppDelegate.swift +++ b/Samples/iOS-Swift/iOS-Swift/AppDelegate.swift @@ -1,6 +1,9 @@ import SentrySampleShared import UIKit +import Logging +import SwiftLogSentry + @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { private var randomDistributionTimer: Timer? @@ -29,6 +32,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate { metricKit.receiveReports() } + LoggingSystem.bootstrap { _ in + return SentryLogHandler() + } + + let logger = Logger(label: "io.sentry.iOS-Sentry") + logger.error("unfortunate error", metadata: ["request-id": "abc-123"], source: "module-name") + return true } diff --git a/Samples/iOS-Swift/iOS-Swift/ExtraViewController.swift b/Samples/iOS-Swift/iOS-Swift/ExtraViewController.swift index 81143919c5e..ad8944dd5da 100644 --- a/Samples/iOS-Swift/iOS-Swift/ExtraViewController.swift +++ b/Samples/iOS-Swift/iOS-Swift/ExtraViewController.swift @@ -18,7 +18,7 @@ class ExtraViewController: UIViewController { @IBOutlet weak var dataMarshalingErrorLabel: UILabel! private let dispatchQueue = DispatchQueue(label: "ExtraViewControllers", attributes: .concurrent) - private var batteryConsumer: BatteryConsumer? +// private var batteryConsumer: BatteryConsumer? override func viewDidLoad() { super.viewDidLoad() @@ -61,22 +61,22 @@ class ExtraViewController: UIViewController { @IBAction func highEnergyCPU(_ sender: UIButton) { highlightButton(sender) if #available(iOS 15.0, *) { - batteryConsumer = BatteryConsumer(qos: .userInitiated) - batteryConsumer?.start() +// batteryConsumer = BatteryConsumer(qos: .userInitiated) +// batteryConsumer?.start() } } @IBAction func lowEnergyCPU(_ sender: UIButton) { highlightButton(sender) if #available(iOS 15.0, *) { - batteryConsumer = BatteryConsumer(qos: .background) - batteryConsumer?.start() +// batteryConsumer = BatteryConsumer(qos: .background) +// batteryConsumer?.start() } } @IBAction func stopUsingEnergy(_ sender: UIButton) { highlightButton(sender) - batteryConsumer?.stop() +// batteryConsumer?.stop() } @IBAction func anrDeadlock(_ sender: UIButton) { diff --git a/Sentry.xcodeproj/project.pbxproj b/Sentry.xcodeproj/project.pbxproj index 1dc5fb2d1a3..e9af4d25c87 100644 --- a/Sentry.xcodeproj/project.pbxproj +++ b/Sentry.xcodeproj/project.pbxproj @@ -756,6 +756,8 @@ 9264E1ED2E2E397C00B077CF /* SentryLogMessageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9264E1EC2E2E397400B077CF /* SentryLogMessageTests.swift */; }; 92672BB629C9A2A9006B021C /* SentryBreadcrumb+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 92672BB529C9A2A9006B021C /* SentryBreadcrumb+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 927A5CC42DD7626B00B82404 /* SentryEnvelopeItemHeaderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 927A5CC32DD7626400B82404 /* SentryEnvelopeItemHeaderTests.swift */; }; + 92815F822E85468F004576C3 /* SentryLogHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 921AA7882E853C8800A8D034 /* SentryLogHandler.swift */; }; + 92815F9D2E854766004576C3 /* Logging in Frameworks */ = {isa = PBXBuildFile; productRef = 92815F9C2E854766004576C3 /* Logging */; }; 928207C42E251B8F009285A4 /* SentryScope+PrivateSwift.h in Headers */ = {isa = PBXBuildFile; fileRef = 928207C32E251B8F009285A4 /* SentryScope+PrivateSwift.h */; }; 9286059529A5096600F96038 /* SentryGeo.h in Headers */ = {isa = PBXBuildFile; fileRef = 9286059429A5096600F96038 /* SentryGeo.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9286059729A5098900F96038 /* SentryGeo.m in Sources */ = {isa = PBXBuildFile; fileRef = 9286059629A5098900F96038 /* SentryGeo.m */; }; @@ -1110,16 +1112,16 @@ FACEED132E3179A10007B4AC /* SentyOptionsInternal.m in Sources */ = {isa = PBXBuildFile; fileRef = FACEED122E3179A10007B4AC /* SentyOptionsInternal.m */; }; FAE2DAB82E1F317900262307 /* SentryProfilingSwiftHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = FAE2DAB72E1F317900262307 /* SentryProfilingSwiftHelpers.m */; }; FAE2DABA2E1F318900262307 /* SentryProfilingSwiftHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = FAE2DAB92E1F318900262307 /* SentryProfilingSwiftHelpers.h */; }; + FAE579842E7CF21800B710F9 /* SentryMigrateSessionInit.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAE5797E2E7CF21300B710F9 /* SentryMigrateSessionInit.swift */; }; FAE5798D2E7D9D4C00B710F9 /* SentrySysctl.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAE579872E7D9D4900B710F9 /* SentrySysctl.swift */; }; FAE579BA2E7DBE9900B710F9 /* SentryGlobalEventProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAE579B42E7DBE9400B710F9 /* SentryGlobalEventProcessor.swift */; }; FAE579C22E7DDDE700B710F9 /* SentryThreadWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAE579BC2E7DDDE400B710F9 /* SentryThreadWrapper.swift */; }; - FAE579842E7CF21800B710F9 /* SentryMigrateSessionInit.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAE5797E2E7CF21300B710F9 /* SentryMigrateSessionInit.swift */; }; FAE579CC2E7DE14900B710F9 /* SentryFrameRemover.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAE579C62E7DE14400B710F9 /* SentryFrameRemover.swift */; }; FAE80C242E4695B40010A595 /* SentryEvent+Serialize.h in Headers */ = {isa = PBXBuildFile; fileRef = FAE80C232E4695AE0010A595 /* SentryEvent+Serialize.h */; }; FAEC270E2DF3526000878871 /* SentryUserFeedback.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAEC270D2DF3526000878871 /* SentryUserFeedback.swift */; }; FAEC273D2DF3933A00878871 /* NSData+Unzip.m in Sources */ = {isa = PBXBuildFile; fileRef = FAEC273C2DF3933200878871 /* NSData+Unzip.m */; }; - FAEEC0522E75E55F00E79CA9 /* SentrySerializationSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAEEC04C2E75E55A00E79CA9 /* SentrySerializationSwift.swift */; }; FAEEBFE22E736D4B00E79CA9 /* SentryViewHierarchyProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAEEBFDC2E736D4100E79CA9 /* SentryViewHierarchyProvider.swift */; }; + FAEEC0522E75E55F00E79CA9 /* SentrySerializationSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAEEC04C2E75E55A00E79CA9 /* SentrySerializationSwift.swift */; }; FAEFA12F2E4FAE1900C431D9 /* SentrySDKSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAEFA1292E4FAE1700C431D9 /* SentrySDKSettings.swift */; }; FAF120182E70C08F006E1DA3 /* SentryEnvelopeHeaderHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = FAF120122E70C088006E1DA3 /* SentryEnvelopeHeaderHelper.h */; }; FAF1201A2E70C0EE006E1DA3 /* SentryEnvelopeHeaderHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = FAF120192E70C0EA006E1DA3 /* SentryEnvelopeHeaderHelper.m */; }; @@ -1182,6 +1184,13 @@ remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; remoteInfo = Sentry; }; + 92815F9E2E85576B004576C3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6327C5CA1EB8A783004E799B /* Project object */; + proxyType = 1; + remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; + remoteInfo = Sentry; + }; D4CBA2482DE06D0200581618 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 6327C5CA1EB8A783004E799B /* Project object */; @@ -2071,6 +2080,7 @@ 8F73BC302B02B87E00C3CEF4 /* SentryInstallationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryInstallationTests.swift; sourceTree = ""; }; 8FF94DF22B06A24C00BCD650 /* SentryCrash+Test.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SentryCrash+Test.h"; sourceTree = ""; }; 92136D662C9D765D002A9FB8 /* SentryNSURLRequestBuilderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryNSURLRequestBuilderTests.swift; sourceTree = ""; }; + 921AA7882E853C8800A8D034 /* SentryLogHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryLogHandler.swift; sourceTree = ""; }; 92235CAB2E15369900865983 /* SentryLogBatcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryLogBatcher.swift; sourceTree = ""; }; 92235CAD2E15549C00865983 /* SentryLogger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryLogger.swift; sourceTree = ""; }; 92235CAF2E155B2600865983 /* SentryLoggerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryLoggerTests.swift; sourceTree = ""; }; @@ -2078,6 +2088,7 @@ 9264E1EC2E2E397400B077CF /* SentryLogMessageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryLogMessageTests.swift; sourceTree = ""; }; 92672BB529C9A2A9006B021C /* SentryBreadcrumb+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "SentryBreadcrumb+Private.h"; path = "include/HybridPublic/SentryBreadcrumb+Private.h"; sourceTree = ""; }; 927A5CC32DD7626400B82404 /* SentryEnvelopeItemHeaderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryEnvelopeItemHeaderTests.swift; sourceTree = ""; }; + 92815F702E85467F004576C3 /* SwiftLogSentry.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftLogSentry.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 928207C32E251B8F009285A4 /* SentryScope+PrivateSwift.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "SentryScope+PrivateSwift.h"; path = "include/SentryScope+PrivateSwift.h"; sourceTree = ""; }; 9286059429A5096600F96038 /* SentryGeo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SentryGeo.h; path = Public/SentryGeo.h; sourceTree = ""; }; 9286059629A5098900F96038 /* SentryGeo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SentryGeo.m; sourceTree = ""; }; @@ -2463,8 +2474,8 @@ FAEC270D2DF3526000878871 /* SentryUserFeedback.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryUserFeedback.swift; sourceTree = ""; }; FAEC273C2DF3933200878871 /* NSData+Unzip.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSData+Unzip.m"; sourceTree = ""; }; FAEC273E2DF393E000878871 /* NSData+Unzip.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSData+Unzip.h"; sourceTree = ""; }; - FAEEC04C2E75E55A00E79CA9 /* SentrySerializationSwift.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentrySerializationSwift.swift; sourceTree = ""; }; FAEEBFDC2E736D4100E79CA9 /* SentryViewHierarchyProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryViewHierarchyProvider.swift; sourceTree = ""; }; + FAEEC04C2E75E55A00E79CA9 /* SentrySerializationSwift.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentrySerializationSwift.swift; sourceTree = ""; }; FAEFA1292E4FAE1700C431D9 /* SentrySDKSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentrySDKSettings.swift; sourceTree = ""; }; FAF120122E70C088006E1DA3 /* SentryEnvelopeHeaderHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SentryEnvelopeHeaderHelper.h; path = include/SentryEnvelopeHeaderHelper.h; sourceTree = ""; }; FAF120192E70C0EA006E1DA3 /* SentryEnvelopeHeaderHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SentryEnvelopeHeaderHelper.m; sourceTree = ""; }; @@ -2508,6 +2519,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 92815F6D2E85467F004576C3 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 92815F9D2E854766004576C3 /* Logging in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; D4CBA2402DE06D0200581618 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -2809,6 +2828,7 @@ D84DAD4D2B17428D003CF120 /* SentryTestUtilsDynamic.framework */, D833D7342D1321C100961E7A /* SentrySwiftUITests.xctest */, D4CBA2432DE06D0200581618 /* SentryTestUtilsTests.xctest */, + 92815F702E85467F004576C3 /* SwiftLogSentry.framework */, ); name = Products; sourceTree = ""; @@ -2951,6 +2971,7 @@ D800942328F82E8D005D3943 /* Swift */, 63FE6FB920DA4C1000CDBAE8 /* SentryCrash */, D8199DB329376ECC0074249E /* SentrySwiftUI */, + 921AA7892E853C8800A8D034 /* SwiftLog */, 63AA75A31EB8AFDF00D153DE /* Configuration */, D8B0542F2A7D35F10056BAF6 /* Resources */, ); @@ -4190,6 +4211,14 @@ name = Transaction; sourceTree = ""; }; + 921AA7892E853C8800A8D034 /* SwiftLog */ = { + isa = PBXGroup; + children = ( + 921AA7882E853C8800A8D034 /* SentryLogHandler.swift */, + ); + path = SwiftLog; + sourceTree = ""; + }; D4009EA02D77196F0007AF30 /* ViewCapture */ = { isa = PBXGroup; children = ( @@ -5217,6 +5246,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 92815F6B2E85467F004576C3 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; D8199DA529376E9B0074249E /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -5315,6 +5351,28 @@ productReference = 8431F00A29B284F200D8DC56 /* libSentryTestUtils.a */; productType = "com.apple.product-type.library.static"; }; + 92815F6F2E85467F004576C3 /* SwiftLogSentry */ = { + isa = PBXNativeTarget; + buildConfigurationList = 92815F812E854680004576C3 /* Build configuration list for PBXNativeTarget "SwiftLogSentry" */; + buildPhases = ( + 92815F6B2E85467F004576C3 /* Headers */, + 92815F6C2E85467F004576C3 /* Sources */, + 92815F6D2E85467F004576C3 /* Frameworks */, + 92815F6E2E85467F004576C3 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 92815F9F2E85576B004576C3 /* PBXTargetDependency */, + ); + name = SwiftLogSentry; + packageProductDependencies = ( + 92815F9C2E854766004576C3 /* Logging */, + ); + productName = SwiftLogSentry; + productReference = 92815F702E85467F004576C3 /* SwiftLogSentry.framework */; + productType = "com.apple.product-type.framework"; + }; D4CBA2422DE06D0200581618 /* SentryTestUtilsTests */ = { isa = PBXNativeTarget; buildConfigurationList = D4CBA2502DE06D0200581618 /* Build configuration list for PBXNativeTarget "SentryTestUtilsTests" */; @@ -5399,7 +5457,7 @@ 6327C5CA1EB8A783004E799B /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1630; + LastSwiftUpdateCheck = 2600; LastUpgradeCheck = 1400; ORGANIZATIONNAME = Sentry; TargetAttributes = { @@ -5421,6 +5479,9 @@ DevelopmentTeam = 97JCY7859U; ProvisioningStyle = Manual; }; + 92815F6F2E85467F004576C3 = { + CreatedOnToolsVersion = 26.0.1; + }; D4CBA2422DE06D0200581618 = { CreatedOnToolsVersion = 16.3; }; @@ -5442,6 +5503,7 @@ ); mainGroup = 6327C5C91EB8A783004E799B; packageReferences = ( + 92815F9B2E854766004576C3 /* XCRemoteSwiftPackageReference "swift-log" */, ); productRefGroup = 6327C5D41EB8A783004E799B /* Products */; projectDirPath = ""; @@ -5461,6 +5523,7 @@ D84DAD4C2B17428D003CF120 /* SentryTestUtilsDynamic */, D833D61E2D1321C100961E7A /* SentrySwiftUITests */, D4CBA2422DE06D0200581618 /* SentryTestUtilsTests */, + 92815F6F2E85467F004576C3 /* SwiftLogSentry */, ); }; /* End PBXProject section */ @@ -5528,6 +5591,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 92815F6E2E85467F004576C3 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; D4CBA2412DE06D0200581618 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -6360,6 +6430,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 92815F6C2E85467F004576C3 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 92815F822E85468F004576C3 /* SentryLogHandler.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; D4CBA23F2DE06D0200581618 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -6426,6 +6504,11 @@ target = 63AA759A1EB8AEF500D153DE /* Sentry */; targetProxy = 84B7FA3729B2860500AD93B1 /* PBXContainerItemProxy */; }; + 92815F9F2E85576B004576C3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 63AA759A1EB8AEF500D153DE /* Sentry */; + targetProxy = 92815F9E2E85576B004576C3 /* PBXContainerItemProxy */; + }; D4CBA2492DE06D0200581618 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 8431F00929B284F200D8DC56 /* SentryTestUtils */; @@ -7222,6 +7305,806 @@ }; name = ReleaseWithoutUIKit; }; + 92815F742E854680004576C3 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = 97JCY7859U; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentry; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = auto; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; + SUPPORTS_MACCATALYST = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_MODULE = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; + TVOS_DEPLOYMENT_TARGET = 13.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 6.0; + XROS_DEPLOYMENT_TARGET = 1.0; + }; + name = Debug; + }; + 92815F752E854680004576C3 /* DebugV9 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = 97JCY7859U; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentry; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = auto; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; + SUPPORTS_MACCATALYST = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_MODULE = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; + TVOS_DEPLOYMENT_TARGET = 13.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 6.0; + XROS_DEPLOYMENT_TARGET = 1.0; + }; + name = DebugV9; + }; + 92815F762E854680004576C3 /* DebugWithoutUIKit */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = 97JCY7859U; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentry; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = auto; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; + SUPPORTS_MACCATALYST = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_MODULE = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; + TVOS_DEPLOYMENT_TARGET = 13.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 6.0; + XROS_DEPLOYMENT_TARGET = 1.0; + }; + name = DebugWithoutUIKit; + }; + 92815F772E854680004576C3 /* Test */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = 97JCY7859U; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentry; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = auto; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; + SUPPORTS_MACCATALYST = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_MODULE = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; + TVOS_DEPLOYMENT_TARGET = 13.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 6.0; + XROS_DEPLOYMENT_TARGET = 1.0; + }; + name = Test; + }; + 92815F782E854680004576C3 /* TestCI */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = 97JCY7859U; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentry; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = auto; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; + SUPPORTS_MACCATALYST = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_MODULE = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; + TVOS_DEPLOYMENT_TARGET = 13.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 6.0; + XROS_DEPLOYMENT_TARGET = 1.0; + }; + name = TestCI; + }; + 92815F792E854680004576C3 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = 97JCY7859U; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentry; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = auto; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; + SUPPORTS_MACCATALYST = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_MODULE = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; + TVOS_DEPLOYMENT_TARGET = 13.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 6.0; + XROS_DEPLOYMENT_TARGET = 1.0; + }; + name = Release; + }; + 92815F7A2E854680004576C3 /* ReleaseV9 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = 97JCY7859U; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentry; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = auto; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; + SUPPORTS_MACCATALYST = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_MODULE = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; + TVOS_DEPLOYMENT_TARGET = 13.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 6.0; + XROS_DEPLOYMENT_TARGET = 1.0; + }; + name = ReleaseV9; + }; + 92815F7B2E854680004576C3 /* ReleaseWithoutUIKit */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = 97JCY7859U; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentry; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = auto; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; + SUPPORTS_MACCATALYST = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_MODULE = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; + TVOS_DEPLOYMENT_TARGET = 13.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 6.0; + XROS_DEPLOYMENT_TARGET = 1.0; + }; + name = ReleaseWithoutUIKit; + }; D4CBA24A2DE06D0200581618 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8798,6 +9681,21 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 92815F812E854680004576C3 /* Build configuration list for PBXNativeTarget "SwiftLogSentry" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 92815F742E854680004576C3 /* Debug */, + 92815F752E854680004576C3 /* DebugV9 */, + 92815F762E854680004576C3 /* DebugWithoutUIKit */, + 92815F772E854680004576C3 /* Test */, + 92815F782E854680004576C3 /* TestCI */, + 92815F792E854680004576C3 /* Release */, + 92815F7A2E854680004576C3 /* ReleaseV9 */, + 92815F7B2E854680004576C3 /* ReleaseWithoutUIKit */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; D4CBA2502DE06D0200581618 /* Build configuration list for PBXNativeTarget "SentryTestUtilsTests" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -8859,6 +9757,25 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 92815F9B2E854766004576C3 /* XCRemoteSwiftPackageReference "swift-log" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/apple/swift-log"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.6.0; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 92815F9C2E854766004576C3 /* Logging */ = { + isa = XCSwiftPackageProductDependency; + package = 92815F9B2E854766004576C3 /* XCRemoteSwiftPackageReference "swift-log" */; + productName = Logging; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 6327C5CA1EB8A783004E799B /* Project object */; } diff --git a/Sources/SwiftLog/SentryLogHandler.swift b/Sources/SwiftLog/SentryLogHandler.swift new file mode 100644 index 00000000000..54883f5b7e0 --- /dev/null +++ b/Sources/SwiftLog/SentryLogHandler.swift @@ -0,0 +1,116 @@ +import Logging +import Sentry + +public struct SentryLogHandler: LogHandler { + + public var metadata = Logger.Metadata() + + public var logLevel: Logger.Level + + private let sentryLogger: SentryLogger + + public init(logLevel: Logger.Level = .info) { + self.init(logLevel: logLevel, sentryLogger: SentrySDK.logger) + } + + init(logLevel: Logger.Level, sentryLogger: SentryLogger) { + self.logLevel = logLevel + self.sentryLogger = SentrySDK.logger + } + + public func log( + level: Logger.Level, + message: Logger.Message, + metadata: Logger.Metadata?, + source: String, + file: String, + function: String, + line: UInt + ) { + var attributes: [String: Any] = [:] + attributes["swift-log.source"] = source + attributes["swift-log.file"] = file + attributes["swift-log.function"] = function + attributes["swift-log.line"] = line + + let allMetadata = mergeMetadata(self.metadata, metadata) + for (key, value) in allMetadata { + attributes["swift-log.metadata.\(key)"] = convertMetadataValue(value) + } + + // Call the appropriate SentryLog method based on level + let messageString = String(describing: message) + switch mapLogLevel(level) { + case .trace: + sentryLogger.trace(messageString, attributes: attributes) + case .debug: + sentryLogger.debug(messageString, attributes: attributes) + case .info: + sentryLogger.info(messageString, attributes: attributes) + case .warn: + sentryLogger.warn(messageString, attributes: attributes) + case .error: + sentryLogger.error(messageString, attributes: attributes) + case .fatal: + sentryLogger.fatal(messageString, attributes: attributes) + @unknown default: + sentryLogger.fatal(messageString, attributes: attributes) + } + } + + public subscript(metadataKey metadataKey: String) -> Logger.Metadata.Value? { + get { + metadata[metadataKey] + } + set(newValue) { + metadata[metadataKey] = newValue + } + } + + // MARK: - Private Helper Methods + + /// Maps Swift Log levels to SentryLog levels + private func mapLogLevel(_ level: Logger.Level) -> SentryLog.Level { + switch level { + case .trace: + return .trace + case .debug: + return .debug + case .info: + return .info + case .notice: + return .info // Map notice to info as SentryLog doesn't have notice + case .warning: + return .warn + case .error: + return .error + case .critical: + return .fatal + } + } + + /// Merges handler metadata with provided metadata + private func mergeMetadata(_ handlerMetadata: Logger.Metadata, _ providedMetadata: Logger.Metadata?) -> Logger.Metadata { + var merged = handlerMetadata + if let provided = providedMetadata { + for (key, value) in provided { + merged[key] = value + } + } + return merged + } + + /// Converts Swift Log metadata values to Any for SentryLog attributes + private func convertMetadataValue(_ value: Logger.Metadata.Value) -> Any { + switch value { + case .string(let string): + return string + case .stringConvertible(let convertible): + return String(describing: convertible) + case .dictionary(let dict): + return dict.mapValues { convertMetadataValue($0) } + case .array(let array): + return array.map { convertMetadataValue($0) } + } + } +} From 4b491c8005ad9ca4fd44ed4c31d1f96196820f73 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Thu, 25 Sep 2025 13:26:12 +0200 Subject: [PATCH 02/44] use trace instead of error in sample app --- Samples/iOS-Swift/iOS-Swift/AppDelegate.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Samples/iOS-Swift/iOS-Swift/AppDelegate.swift b/Samples/iOS-Swift/iOS-Swift/AppDelegate.swift index 8a5b58fc755..cd7df7f87ac 100644 --- a/Samples/iOS-Swift/iOS-Swift/AppDelegate.swift +++ b/Samples/iOS-Swift/iOS-Swift/AppDelegate.swift @@ -33,11 +33,11 @@ class AppDelegate: UIResponder, UIApplicationDelegate { } LoggingSystem.bootstrap { _ in - return SentryLogHandler() + return SentryLogHandler(logLevel: .trace) } let logger = Logger(label: "io.sentry.iOS-Sentry") - logger.error("unfortunate error", metadata: ["request-id": "abc-123"], source: "module-name") + logger.trace("unfortunate error", metadata: ["request-id": "abc-123"], source: "module-name") return true } From 21dc2de8d6a50dca00989b26e64de92d63f6f0b6 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Thu, 25 Sep 2025 16:23:29 +0200 Subject: [PATCH 03/44] add tests, move sample to app with ios > 11 --- Samples/iOS-Swift/iOS-Swift/AppDelegate.swift | 10 - Samples/iOS15-SwiftUI/iOS15-SwiftUI/App.swift | 8 + .../iOS15-SwiftUI/ContentView.swift | 14 + Sentry.xcodeproj/project.pbxproj | 829 +++++++++++++++++- SentryTestUtils/ClearTestState.swift | 2 + .../SentryLogAttribute+Tests.swift | 31 + Sources/SwiftLog/SentryLogHandler.swift | 110 ++- .../SwiftLogTests/SentryLogHandlerTests.swift | 462 ++++++++++ 8 files changed, 1388 insertions(+), 78 deletions(-) create mode 100644 SentryTestUtils/SentryLogAttribute+Tests.swift create mode 100644 Tests/SwiftLogTests/SentryLogHandlerTests.swift diff --git a/Samples/iOS-Swift/iOS-Swift/AppDelegate.swift b/Samples/iOS-Swift/iOS-Swift/AppDelegate.swift index cd7df7f87ac..e377481492c 100644 --- a/Samples/iOS-Swift/iOS-Swift/AppDelegate.swift +++ b/Samples/iOS-Swift/iOS-Swift/AppDelegate.swift @@ -1,9 +1,6 @@ import SentrySampleShared import UIKit -import Logging -import SwiftLogSentry - @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { private var randomDistributionTimer: Timer? @@ -32,13 +29,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate { metricKit.receiveReports() } - LoggingSystem.bootstrap { _ in - return SentryLogHandler(logLevel: .trace) - } - - let logger = Logger(label: "io.sentry.iOS-Sentry") - logger.trace("unfortunate error", metadata: ["request-id": "abc-123"], source: "module-name") - return true } diff --git a/Samples/iOS15-SwiftUI/iOS15-SwiftUI/App.swift b/Samples/iOS15-SwiftUI/iOS15-SwiftUI/App.swift index 3646b7fb59e..d9e779938bd 100644 --- a/Samples/iOS15-SwiftUI/iOS15-SwiftUI/App.swift +++ b/Samples/iOS15-SwiftUI/iOS15-SwiftUI/App.swift @@ -2,12 +2,20 @@ import Foundation import SentrySampleShared import SwiftUI +import Logging +import SwiftLogSentry + @main struct SwiftUIApp: App { @UIApplicationDelegateAdaptor private var appDelegate: MyAppDelegate init() { SentrySDKWrapper.shared.startSentry() + + // Use structured logs with swift-log + LoggingSystem.bootstrap { _ in + return SentryLogHandler(logLevel: .trace) + } } var body: some Scene { diff --git a/Samples/iOS15-SwiftUI/iOS15-SwiftUI/ContentView.swift b/Samples/iOS15-SwiftUI/iOS15-SwiftUI/ContentView.swift index e20ec05a8a5..b7030361d03 100644 --- a/Samples/iOS15-SwiftUI/iOS15-SwiftUI/ContentView.swift +++ b/Samples/iOS15-SwiftUI/iOS15-SwiftUI/ContentView.swift @@ -1,6 +1,8 @@ import Sentry import SwiftUI +import Logging + struct ContentView: View { private func captureError() { @@ -9,6 +11,15 @@ struct ContentView: View { } } + private func swiftLog() { + let logger = Logger(label: "io.sentry.iOS15-SwiftUI") + logger.trace( + "swift-log", + metadata: ["foo": "bar"], + source: "iOS" + ) + } + func captureErrorAsync() async { let error = NSError(domain: "SampleErrorDomain", code: 1, userInfo: [NSLocalizedDescriptionKey: "Object does not exist"]) SentrySDK.capture(error: error) @@ -19,6 +30,9 @@ struct ContentView: View { Button(action: captureError) { Text("Capture Error") } + Button(action: swiftLog) { + Text("swift-log") + } } } } diff --git a/Sentry.xcodeproj/project.pbxproj b/Sentry.xcodeproj/project.pbxproj index b1a611540f4..4d7b33b644c 100644 --- a/Sentry.xcodeproj/project.pbxproj +++ b/Sentry.xcodeproj/project.pbxproj @@ -759,6 +759,12 @@ 927A5CC42DD7626B00B82404 /* SentryEnvelopeItemHeaderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 927A5CC32DD7626400B82404 /* SentryEnvelopeItemHeaderTests.swift */; }; 92815F822E85468F004576C3 /* SentryLogHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 921AA7882E853C8800A8D034 /* SentryLogHandler.swift */; }; 92815F9D2E854766004576C3 /* Logging in Frameworks */ = {isa = PBXBuildFile; productRef = 92815F9C2E854766004576C3 /* Logging */; }; + 92815FC62E857528004576C3 /* SentryLogHandlerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92815FC42E8574D5004576C3 /* SentryLogHandlerTests.swift */; }; + 92815FC72E8576AA004576C3 /* SwiftLogSentry.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92815F702E85467F004576C3 /* SwiftLogSentry.framework */; }; + 92815FC82E8576AA004576C3 /* SwiftLogSentry.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 92815F702E85467F004576C3 /* SwiftLogSentry.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 92815FCA2E85770E004576C3 /* SentryTestUtilsDynamic.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D84DAD4D2B17428D003CF120 /* SentryTestUtilsDynamic.framework */; }; + 92815FCE2E857776004576C3 /* libSentryTestUtils.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8431F00A29B284F200D8DC56 /* libSentryTestUtils.a */; }; + 92815FD22E857AA8004576C3 /* SentryLogAttribute+Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92815FD12E857A9E004576C3 /* SentryLogAttribute+Tests.swift */; }; 928207C42E251B8F009285A4 /* SentryScope+PrivateSwift.h in Headers */ = {isa = PBXBuildFile; fileRef = 928207C32E251B8F009285A4 /* SentryScope+PrivateSwift.h */; }; 9286059529A5096600F96038 /* SentryGeo.h in Headers */ = {isa = PBXBuildFile; fileRef = 9286059429A5096600F96038 /* SentryGeo.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9286059729A5098900F96038 /* SentryGeo.m in Sources */ = {isa = PBXBuildFile; fileRef = 9286059629A5098900F96038 /* SentryGeo.m */; }; @@ -1192,6 +1198,27 @@ remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; remoteInfo = Sentry; }; + 92815FB92E857492004576C3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6327C5CA1EB8A783004E799B /* Project object */; + proxyType = 1; + remoteGlobalIDString = 92815F6F2E85467F004576C3; + remoteInfo = SwiftLogSentry; + }; + 92815FCC2E85770E004576C3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6327C5CA1EB8A783004E799B /* Project object */; + proxyType = 1; + remoteGlobalIDString = D84DAD4C2B17428D003CF120; + remoteInfo = SentryTestUtilsDynamic; + }; + 92815FCF2E857776004576C3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6327C5CA1EB8A783004E799B /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8431F00929B284F200D8DC56; + remoteInfo = SentryTestUtils; + }; D4CBA2482DE06D0200581618 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 6327C5CA1EB8A783004E799B /* Project object */; @@ -1223,6 +1250,17 @@ /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ + 92815FC92E8576AA004576C3 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 92815FC82E8576AA004576C3 /* SwiftLogSentry.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; D833D7532D13263800961E7A /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -2092,6 +2130,9 @@ 92672BB529C9A2A9006B021C /* SentryBreadcrumb+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "SentryBreadcrumb+Private.h"; path = "include/HybridPublic/SentryBreadcrumb+Private.h"; sourceTree = ""; }; 927A5CC32DD7626400B82404 /* SentryEnvelopeItemHeaderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryEnvelopeItemHeaderTests.swift; sourceTree = ""; }; 92815F702E85467F004576C3 /* SwiftLogSentry.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftLogSentry.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 92815FB42E857492004576C3 /* SwiftLogSentryTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwiftLogSentryTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 92815FC42E8574D5004576C3 /* SentryLogHandlerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryLogHandlerTests.swift; sourceTree = ""; }; + 92815FD12E857A9E004576C3 /* SentryLogAttribute+Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SentryLogAttribute+Tests.swift"; sourceTree = ""; }; 928207C32E251B8F009285A4 /* SentryScope+PrivateSwift.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "SentryScope+PrivateSwift.h"; path = "include/SentryScope+PrivateSwift.h"; sourceTree = ""; }; 9286059429A5096600F96038 /* SentryGeo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SentryGeo.h; path = Public/SentryGeo.h; sourceTree = ""; }; 9286059629A5098900F96038 /* SentryGeo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SentryGeo.m; sourceTree = ""; }; @@ -2530,6 +2571,16 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 92815FB12E857492004576C3 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 92815FCE2E857776004576C3 /* libSentryTestUtils.a in Frameworks */, + 92815FCA2E85770E004576C3 /* SentryTestUtilsDynamic.framework in Frameworks */, + 92815FC72E8576AA004576C3 /* SwiftLogSentry.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; D4CBA2402DE06D0200581618 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -2832,6 +2883,7 @@ D833D7342D1321C100961E7A /* SentrySwiftUITests.xctest */, D4CBA2432DE06D0200581618 /* SentryTestUtilsTests.xctest */, 92815F702E85467F004576C3 /* SwiftLogSentry.framework */, + 92815FB42E857492004576C3 /* SwiftLogSentryTests.xctest */, ); name = Products; sourceTree = ""; @@ -2992,6 +3044,7 @@ 8431EFDB29B27B3D00D8DC56 /* SentryProfilerTests */, D8F01DE32A125D7B008F4996 /* HybridSDKTest */, D833D60F2D1320DF00961E7A /* SentrySwiftUITests */, + 92815FAF2E85744E004576C3 /* SwiftLogTests */, ); path = Tests; sourceTree = ""; @@ -4023,6 +4076,7 @@ 8431F00B29B284F200D8DC56 /* SentryTestUtils */ = { isa = PBXGroup; children = ( + 92815FD12E857A9E004576C3 /* SentryLogAttribute+Tests.swift */, 84AEB4682C2F9673007E46E1 /* ArrayAccesses.swift */, D8FC98AA2CD0DAAC0009824C /* BreadcrumbExtension.swift */, 841325DE2BFED0510029228F /* TestFramesTracker.swift */, @@ -4223,6 +4277,14 @@ path = SwiftLog; sourceTree = ""; }; + 92815FAF2E85744E004576C3 /* SwiftLogTests */ = { + isa = PBXGroup; + children = ( + 92815FC42E8574D5004576C3 /* SentryLogHandlerTests.swift */, + ); + path = SwiftLogTests; + sourceTree = ""; + }; D4009EA02D77196F0007AF30 /* ViewCapture */ = { isa = PBXGroup; children = ( @@ -5378,6 +5440,29 @@ productReference = 92815F702E85467F004576C3 /* SwiftLogSentry.framework */; productType = "com.apple.product-type.framework"; }; + 92815FB32E857492004576C3 /* SwiftLogSentryTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 92815FBB2E857492004576C3 /* Build configuration list for PBXNativeTarget "SwiftLogSentryTests" */; + buildPhases = ( + 92815FB02E857492004576C3 /* Sources */, + 92815FB12E857492004576C3 /* Frameworks */, + 92815FB22E857492004576C3 /* Resources */, + 92815FC92E8576AA004576C3 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 92815FBA2E857492004576C3 /* PBXTargetDependency */, + 92815FCD2E85770E004576C3 /* PBXTargetDependency */, + 92815FD02E857776004576C3 /* PBXTargetDependency */, + ); + name = SwiftLogSentryTests; + packageProductDependencies = ( + ); + productName = SwiftLogSentryTests; + productReference = 92815FB42E857492004576C3 /* SwiftLogSentryTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; D4CBA2422DE06D0200581618 /* SentryTestUtilsTests */ = { isa = PBXNativeTarget; buildConfigurationList = D4CBA2502DE06D0200581618 /* Build configuration list for PBXNativeTarget "SentryTestUtilsTests" */; @@ -5487,6 +5572,9 @@ 92815F6F2E85467F004576C3 = { CreatedOnToolsVersion = 26.0.1; }; + 92815FB32E857492004576C3 = { + CreatedOnToolsVersion = 26.0.1; + }; D4CBA2422DE06D0200581618 = { CreatedOnToolsVersion = 16.3; }; @@ -5529,6 +5617,7 @@ D833D61E2D1321C100961E7A /* SentrySwiftUITests */, D4CBA2422DE06D0200581618 /* SentryTestUtilsTests */, 92815F6F2E85467F004576C3 /* SwiftLogSentry */, + 92815FB32E857492004576C3 /* SwiftLogSentryTests */, ); }; /* End PBXProject section */ @@ -5603,6 +5692,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 92815FB22E857492004576C3 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; D4CBA2412DE06D0200581618 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -6424,6 +6520,7 @@ 84B7FA4429B2924000AD93B1 /* TestRandom.swift in Sources */, 8431F01B29B2852D00D8DC56 /* Logger.swift in Sources */, 8431F01829B2852D00D8DC56 /* TypeMapping.swift in Sources */, + 92815FD22E857AA8004576C3 /* SentryLogAttribute+Tests.swift in Sources */, 84B7FA4529B2926900AD93B1 /* TestDisplayLinkWrapper.swift in Sources */, 84AC61DB29F7654A009EEF61 /* TestDispatchSourceWrapper.swift in Sources */, D452FE6F2DDC890A00AFF56F /* TestFileManager.swift in Sources */, @@ -6444,6 +6541,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 92815FB02E857492004576C3 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 92815FC62E857528004576C3 /* SentryLogHandlerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; D4CBA23F2DE06D0200581618 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -6515,6 +6620,21 @@ target = 63AA759A1EB8AEF500D153DE /* Sentry */; targetProxy = 92815F9E2E85576B004576C3 /* PBXContainerItemProxy */; }; + 92815FBA2E857492004576C3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 92815F6F2E85467F004576C3 /* SwiftLogSentry */; + targetProxy = 92815FB92E857492004576C3 /* PBXContainerItemProxy */; + }; + 92815FCD2E85770E004576C3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = D84DAD4C2B17428D003CF120 /* SentryTestUtilsDynamic */; + targetProxy = 92815FCC2E85770E004576C3 /* PBXContainerItemProxy */; + }; + 92815FD02E857776004576C3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8431F00929B284F200D8DC56 /* SentryTestUtils */; + targetProxy = 92815FCF2E857776004576C3 /* PBXContainerItemProxy */; + }; D4CBA2492DE06D0200581618 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 8431F00929B284F200D8DC56 /* SentryTestUtils */; @@ -8111,72 +8231,688 @@ }; name = ReleaseWithoutUIKit; }; - D4CBA24A2DE06D0200581618 /* Debug */ = { + 92815FBC2E857492004576C3 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_FLOAT_CONVERSION = YES; - CODE_SIGNING_ALLOWED = NO; - CODE_SIGNING_REQUIRED = NO; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - INFOPLIST_FILE = SentryTestUtilsTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - OTHER_SWIFT_FLAGS = "-DSENTRY_USE_UIKIT"; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.Sentry.TestUtilsTests; - PRODUCT_NAME = SentryTestUtilsTests; - PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = 97JCY7859U; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentryTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; + SUPPORTS_MACCATALYST = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; TVOS_DEPLOYMENT_TARGET = 13.0; + WATCHOS_DEPLOYMENT_TARGET = 6.0; + XROS_DEPLOYMENT_TARGET = 1.0; }; name = Debug; }; - D4CBA24B2DE06D0200581618 /* DebugWithoutUIKit */ = { + 92815FBD2E857492004576C3 /* DebugV9 */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_FLOAT_CONVERSION = YES; - CODE_SIGNING_ALLOWED = NO; - CODE_SIGNING_REQUIRED = NO; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - INFOPLIST_FILE = SentryTestUtilsTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.Sentry.TestUtilsTests; - PRODUCT_NAME = SentryTestUtilsTests; - PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = 97JCY7859U; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentryTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; + SUPPORTS_MACCATALYST = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; TVOS_DEPLOYMENT_TARGET = 13.0; + WATCHOS_DEPLOYMENT_TARGET = 6.0; + XROS_DEPLOYMENT_TARGET = 1.0; }; - name = DebugWithoutUIKit; + name = DebugV9; }; - D4CBA24C2DE06D0200581618 /* Test */ = { + 92815FBE2E857492004576C3 /* DebugWithoutUIKit */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_FLOAT_CONVERSION = YES; - CODE_SIGNING_ALLOWED = NO; - CODE_SIGNING_REQUIRED = NO; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - INFOPLIST_FILE = SentryTestUtilsTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - OTHER_SWIFT_FLAGS = "-DSENTRY_USE_UIKIT"; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.Sentry.TestUtilsTests; - PRODUCT_NAME = SentryTestUtilsTests; - PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = 97JCY7859U; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentryTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; + SUPPORTS_MACCATALYST = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; + TVOS_DEPLOYMENT_TARGET = 13.0; + WATCHOS_DEPLOYMENT_TARGET = 6.0; + XROS_DEPLOYMENT_TARGET = 1.0; + }; + name = DebugWithoutUIKit; + }; + 92815FBF2E857492004576C3 /* Test */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = 97JCY7859U; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentryTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; + SUPPORTS_MACCATALYST = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; + TVOS_DEPLOYMENT_TARGET = 13.0; + WATCHOS_DEPLOYMENT_TARGET = 6.0; + XROS_DEPLOYMENT_TARGET = 1.0; + }; + name = Test; + }; + 92815FC02E857492004576C3 /* TestCI */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = 97JCY7859U; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentryTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; + SUPPORTS_MACCATALYST = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; + TVOS_DEPLOYMENT_TARGET = 13.0; + WATCHOS_DEPLOYMENT_TARGET = 6.0; + XROS_DEPLOYMENT_TARGET = 1.0; + }; + name = TestCI; + }; + 92815FC12E857492004576C3 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = 97JCY7859U; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentryTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; + SUPPORTS_MACCATALYST = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; + TVOS_DEPLOYMENT_TARGET = 13.0; + WATCHOS_DEPLOYMENT_TARGET = 6.0; + XROS_DEPLOYMENT_TARGET = 1.0; + }; + name = Release; + }; + 92815FC22E857492004576C3 /* ReleaseV9 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = 97JCY7859U; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentryTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; + SUPPORTS_MACCATALYST = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; + TVOS_DEPLOYMENT_TARGET = 13.0; + WATCHOS_DEPLOYMENT_TARGET = 6.0; + XROS_DEPLOYMENT_TARGET = 1.0; + }; + name = ReleaseV9; + }; + 92815FC32E857492004576C3 /* ReleaseWithoutUIKit */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = 97JCY7859U; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentryTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = NO; + SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; + SUPPORTS_MACCATALYST = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; + TVOS_DEPLOYMENT_TARGET = 13.0; + WATCHOS_DEPLOYMENT_TARGET = 6.0; + XROS_DEPLOYMENT_TARGET = 1.0; + }; + name = ReleaseWithoutUIKit; + }; + D4CBA24A2DE06D0200581618 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_FLOAT_CONVERSION = YES; + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + INFOPLIST_FILE = SentryTestUtilsTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + OTHER_SWIFT_FLAGS = "-DSENTRY_USE_UIKIT"; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.Sentry.TestUtilsTests; + PRODUCT_NAME = SentryTestUtilsTests; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; + SWIFT_VERSION = 5.0; + TVOS_DEPLOYMENT_TARGET = 13.0; + }; + name = Debug; + }; + D4CBA24B2DE06D0200581618 /* DebugWithoutUIKit */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_FLOAT_CONVERSION = YES; + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + INFOPLIST_FILE = SentryTestUtilsTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.Sentry.TestUtilsTests; + PRODUCT_NAME = SentryTestUtilsTests; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; + SWIFT_VERSION = 5.0; + TVOS_DEPLOYMENT_TARGET = 13.0; + }; + name = DebugWithoutUIKit; + }; + D4CBA24C2DE06D0200581618 /* Test */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_FLOAT_CONVERSION = YES; + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + INFOPLIST_FILE = SentryTestUtilsTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + OTHER_SWIFT_FLAGS = "-DSENTRY_USE_UIKIT"; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.Sentry.TestUtilsTests; + PRODUCT_NAME = SentryTestUtilsTests; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; SWIFT_VERSION = 5.0; TVOS_DEPLOYMENT_TARGET = 13.0; }; @@ -9702,6 +10438,21 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 92815FBB2E857492004576C3 /* Build configuration list for PBXNativeTarget "SwiftLogSentryTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 92815FBC2E857492004576C3 /* Debug */, + 92815FBD2E857492004576C3 /* DebugV9 */, + 92815FBE2E857492004576C3 /* DebugWithoutUIKit */, + 92815FBF2E857492004576C3 /* Test */, + 92815FC02E857492004576C3 /* TestCI */, + 92815FC12E857492004576C3 /* Release */, + 92815FC22E857492004576C3 /* ReleaseV9 */, + 92815FC32E857492004576C3 /* ReleaseWithoutUIKit */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; D4CBA2502DE06D0200581618 /* Build configuration list for PBXNativeTarget "SentryTestUtilsTests" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/SentryTestUtils/ClearTestState.swift b/SentryTestUtils/ClearTestState.swift index cfcf7b69662..67125d76a1d 100644 --- a/SentryTestUtils/ClearTestState.swift +++ b/SentryTestUtils/ClearTestState.swift @@ -67,7 +67,9 @@ class TestCleanup: NSObject { sentrycrash_scopesync_reset() + #if SENTRY_TEST || SENTRY_TEST_CI SentrySdkPackage.resetPackageManager() SentryExtraPackages.clear() + #endif } } diff --git a/SentryTestUtils/SentryLogAttribute+Tests.swift b/SentryTestUtils/SentryLogAttribute+Tests.swift new file mode 100644 index 00000000000..3ba31724823 --- /dev/null +++ b/SentryTestUtils/SentryLogAttribute+Tests.swift @@ -0,0 +1,31 @@ +@_spi(Private) @testable import Sentry + +public extension SentryLog.Attribute { + + func equal(to other: SentryLog.Attribute) -> Bool { + guard type == other.type else { + return false + } + // Compare values based on type + switch type { + case "string": + let expectedValue = value as! String + let actualValue = other.value as! String + return expectedValue == actualValue + case "boolean": + let expectedValue = value as! Bool + let actualValue = other.value as! Bool + return expectedValue == actualValue + case "integer": + let expectedValue = value as! Int + let actualValue = other.value as! Int + return expectedValue == actualValue + case "double": + let expectedValue = value as! Double + let actualValue = other.value as! Double + return expectedValue == actualValue + default: + return false + } + } +} diff --git a/Sources/SwiftLog/SentryLogHandler.swift b/Sources/SwiftLog/SentryLogHandler.swift index 54883f5b7e0..36ef60833d6 100644 --- a/Sources/SwiftLog/SentryLogHandler.swift +++ b/Sources/SwiftLog/SentryLogHandler.swift @@ -1,23 +1,90 @@ import Logging import Sentry +/// A `swift-log` handler that forwards log entries to Sentry's structured logging system. +/// +/// `SentryLogHandler` implements the `swift-log` `LogHandler` protocol, allowing you to integrate +/// Sentry's structured logging capabilities with Swift's standard logging framework. This enables +/// you to capture application logs and send them to Sentry for analysis and monitoring. +/// +/// ## Level Mapping +/// `swift-log` levels are mapped to Sentry log levels: +/// - `.trace` → `.trace` +/// - `.debug` → `.debug` +/// - `.info` → `.info` +/// - `.notice` → `.info` (notice maps to info as SentryLog doesn't have notice) +/// - `.warning` → `.warn` +/// - `.error` → `.error` +/// - `.critical` → `.fatal` +/// +/// ## Usage +/// ```swift +/// import Logging +/// import Sentry +/// +/// // Initialize Sentry SDK +/// SentrySDK.start { options in +/// options.dsn = "YOUR_DSN" +/// } +/// +/// // Register SentryLogHandler +/// LoggingSystem.bootstrap { _ in +/// return SentryLogHandler(logLevel: .trace) +/// } +/// +/// // Crea & use the logger +/// let logger = Logger(label: "com.example.app") +/// logger.info("User logged in", metadata: ["userId": "12345"]) +/// logger.error("Payment failed", metadata: ["errorCode": 500]) +/// ``` +/// +/// - Note: Sentry Logs is currently in Beta. See the [Sentry Logs Documentation](https://docs.sentry.io/platforms/apple/logs/). +/// - Warning: This handler requires Sentry SDK to be initialized before use. public struct SentryLogHandler: LogHandler { + /// Logger metadata that will be included with all log entries. + /// + /// This metadata is merged with any metadata provided at the call site, + /// with call-site metadata taking precedence over handler metadata. public var metadata = Logger.Metadata() + /// The minimum log level for messages to be sent to Sentry. + /// + /// Messages below this level will be filtered out and not sent to Sentry. + /// Defaults to `.info`. public var logLevel: Logger.Level private let sentryLogger: SentryLogger + /// Creates a new SentryLogHandler with the specified log level. + /// + /// - Parameter logLevel: The minimum log level for messages to be sent to Sentry. + /// Defaults to `.info`. public init(logLevel: Logger.Level = .info) { self.init(logLevel: logLevel, sentryLogger: SentrySDK.logger) } init(logLevel: Logger.Level, sentryLogger: SentryLogger) { self.logLevel = logLevel - self.sentryLogger = SentrySDK.logger + self.sentryLogger = sentryLogger } + /// Logs a message to Sentry with the specified level and context. + /// + /// This method implements the Swift Log `LogHandler` protocol. It automatically: + /// - Maps Swift Log levels to Sentry log levels + /// - Includes source context (file, function, line) as structured attributes + /// - Merges handler metadata with call-site metadata + /// - Prefixes metadata keys with "swift-log." to avoid conflicts + /// + /// - Parameters: + /// - level: The log level of the message + /// - message: The log message to send + /// - metadata: Optional metadata to include with the message + /// - source: The source of the log message (typically the module name) + /// - file: The file where the log was called + /// - function: The function where the log was called + /// - line: The line number where the log was called public func log( level: Logger.Level, message: Logger.Message, @@ -28,14 +95,18 @@ public struct SentryLogHandler: LogHandler { line: UInt ) { var attributes: [String: Any] = [:] + attributes["sentry.origin"] = "auto.logging.swift-log" + attributes["swift-log.level"] = level.rawValue attributes["swift-log.source"] = source attributes["swift-log.file"] = file attributes["swift-log.function"] = function attributes["swift-log.line"] = line - let allMetadata = mergeMetadata(self.metadata, metadata) + let allMetadata = self.metadata.merging(metadata ?? [:]) { _, new in + new + } for (key, value) in allMetadata { - attributes["swift-log.metadata.\(key)"] = convertMetadataValue(value) + attributes["swift-log.\(key)"] = "\(value)" } // Call the appropriate SentryLog method based on level @@ -58,6 +129,13 @@ public struct SentryLogHandler: LogHandler { } } + /// Provides access to logger metadata by key. + /// + /// This subscript allows you to get and set metadata values that will be included + /// with all log entries from this handler. + /// + /// - Parameter metadataKey: The key for the metadata value + /// - Returns: The metadata value for the given key, or `nil` if not set public subscript(metadataKey metadataKey: String) -> Logger.Metadata.Value? { get { metadata[metadataKey] @@ -69,7 +147,6 @@ public struct SentryLogHandler: LogHandler { // MARK: - Private Helper Methods - /// Maps Swift Log levels to SentryLog levels private func mapLogLevel(_ level: Logger.Level) -> SentryLog.Level { switch level { case .trace: @@ -88,29 +165,4 @@ public struct SentryLogHandler: LogHandler { return .fatal } } - - /// Merges handler metadata with provided metadata - private func mergeMetadata(_ handlerMetadata: Logger.Metadata, _ providedMetadata: Logger.Metadata?) -> Logger.Metadata { - var merged = handlerMetadata - if let provided = providedMetadata { - for (key, value) in provided { - merged[key] = value - } - } - return merged - } - - /// Converts Swift Log metadata values to Any for SentryLog attributes - private func convertMetadataValue(_ value: Logger.Metadata.Value) -> Any { - switch value { - case .string(let string): - return string - case .stringConvertible(let convertible): - return String(describing: convertible) - case .dictionary(let dict): - return dict.mapValues { convertMetadataValue($0) } - case .array(let array): - return array.map { convertMetadataValue($0) } - } - } } diff --git a/Tests/SwiftLogTests/SentryLogHandlerTests.swift b/Tests/SwiftLogTests/SentryLogHandlerTests.swift new file mode 100644 index 00000000000..aacce28063b --- /dev/null +++ b/Tests/SwiftLogTests/SentryLogHandlerTests.swift @@ -0,0 +1,462 @@ +import Logging +@_spi(Private) @testable import Sentry +@_spi(Private) import SentryTestUtils +@_spi(Private) @testable import SwiftLogSentry +import XCTest + +final class SentryLogHandlerTests: XCTestCase { + + private class Fixture { + let hub: TestHub + let client: TestClient + let dateProvider: TestCurrentDateProvider + let options: Options + let scope: Scope + let batcher: TestLogBatcher + let sentryLogger: SentryLogger + + init() { + options = Options() + options.dsn = TestConstants.dsnAsString(username: "SentryLogHandlerTests") + + client = TestClient(options: options)! + scope = Scope() + hub = TestHub(client: client, andScope: scope) + dateProvider = TestCurrentDateProvider() + batcher = TestLogBatcher(client: client, dispatchQueue: TestSentryDispatchQueueWrapper()) + + dateProvider.setDate(date: Date(timeIntervalSince1970: 1_627_846_800.123456)) + sentryLogger = SentryLogger(hub: hub, dateProvider: dateProvider, batcher: batcher) + } + + func getSut() -> SentryLogHandler { + return SentryLogHandler(logLevel: .info, sentryLogger: sentryLogger) + } + } + + private class TestLogBatcher: SentryLogBatcher { + var addInvocations = Invocations() + + override func add(_ log: SentryLog) { + addInvocations.record(log) + } + } + + private var fixture: Fixture! + private var sut: SentryLogHandler! + + override func setUp() { + super.setUp() + fixture = Fixture() + sut = fixture.getSut() + } + + override func tearDown() { + super.tearDown() + clearTestState() + } + + // MARK: - Basic Logging Tests + + func testLog_WithInfoLevel() { + sut.log(level: .info, message: "Test info message", metadata: nil, source: "test", file: "TestFile.swift", function: "testFunction", line: 42) + + assertLogCaptured( + .info, + "Test info message", + [ + "sentry.origin": SentryLog.Attribute(string: "auto.logging.swift-log"), + "swift-log.level": SentryLog.Attribute(string: "info"), + "swift-log.source": SentryLog.Attribute(string: "test"), + "swift-log.file": SentryLog.Attribute(string: "TestFile.swift"), + "swift-log.function": SentryLog.Attribute(string: "testFunction"), + "swift-log.line": SentryLog.Attribute(string: "42") + ] + ) + } + + func testLog_WithErrorLevel() { + sut.log(level: .error, message: "Test error message", metadata: nil, source: "test", file: "TestFile.swift", function: "testFunction", line: 100) + + assertLogCaptured( + .error, + "Test error message", + [ + "sentry.origin": SentryLog.Attribute(string: "auto.logging.swift-log"), + "swift-log.level": SentryLog.Attribute(string: "error"), + "swift-log.source": SentryLog.Attribute(string: "test"), + "swift-log.file": SentryLog.Attribute(string: "TestFile.swift"), + "swift-log.function": SentryLog.Attribute(string: "testFunction"), + "swift-log.line": SentryLog.Attribute(string: "100") + ] + ) + } + + func testLog_WithTraceLevel() { + sut.log(level: .trace, message: "Test trace message", metadata: nil, source: "test", file: "TestFile.swift", function: "testFunction", line: 1) + + assertLogCaptured( + .trace, + "Test trace message", + [ + "sentry.origin": SentryLog.Attribute(string: "auto.logging.swift-log"), + "swift-log.level": SentryLog.Attribute(string: "trace"), + "swift-log.source": SentryLog.Attribute(string: "test"), + "swift-log.file": SentryLog.Attribute(string: "TestFile.swift"), + "swift-log.function": SentryLog.Attribute(string: "testFunction"), + "swift-log.line": SentryLog.Attribute(string: "1") + ] + ) + } + + func testLog_WithDebugLevel() { + sut.log(level: .debug, message: "Test debug message", metadata: nil, source: "test", file: "TestFile.swift", function: "testFunction", line: 50) + + assertLogCaptured( + .debug, + "Test debug message", + [ + "sentry.origin": SentryLog.Attribute(string: "auto.logging.swift-log"), + "swift-log.level": SentryLog.Attribute(string: "debug"), + "swift-log.source": SentryLog.Attribute(string: "test"), + "swift-log.file": SentryLog.Attribute(string: "TestFile.swift"), + "swift-log.function": SentryLog.Attribute(string: "testFunction"), + "swift-log.line": SentryLog.Attribute(string: "50") + ] + ) + } + + func testLog_WithWarningLevel() { + sut.log(level: .warning, message: "Test warning message", metadata: nil, source: "test", file: "TestFile.swift", function: "testFunction", line: 75) + + assertLogCaptured( + .warn, + "Test warning message", + [ + "sentry.origin": SentryLog.Attribute(string: "auto.logging.swift-log"), + "swift-log.level": SentryLog.Attribute(string: "warning"), + "swift-log.source": SentryLog.Attribute(string: "test"), + "swift-log.file": SentryLog.Attribute(string: "TestFile.swift"), + "swift-log.function": SentryLog.Attribute(string: "testFunction"), + "swift-log.line": SentryLog.Attribute(string: "75") + ] + ) + } + + func testLog_WithCriticalLevel() { + sut.log(level: .critical, message: "Test critical message", metadata: nil, source: "test", file: "TestFile.swift", function: "testFunction", line: 200) + + assertLogCaptured( + .fatal, + "Test critical message", + [ + "sentry.origin": SentryLog.Attribute(string: "auto.logging.swift-log"), + "swift-log.level": SentryLog.Attribute(string: "critical"), + "swift-log.source": SentryLog.Attribute(string: "test"), + "swift-log.file": SentryLog.Attribute(string: "TestFile.swift"), + "swift-log.function": SentryLog.Attribute(string: "testFunction"), + "swift-log.line": SentryLog.Attribute(string: "200") + ] + ) + } + + func testLog_WithNoticeLevel() { + sut.log(level: .notice, message: "Test notice message", metadata: nil, source: "test", file: "TestFile.swift", function: "testFunction", line: 150) + + assertLogCaptured( + .info, + "Test notice message", + [ + "sentry.origin": SentryLog.Attribute(string: "auto.logging.swift-log"), + "swift-log.level": SentryLog.Attribute(string: "notice"), + "swift-log.source": SentryLog.Attribute(string: "test"), + "swift-log.file": SentryLog.Attribute(string: "TestFile.swift"), + "swift-log.function": SentryLog.Attribute(string: "testFunction"), + "swift-log.line": SentryLog.Attribute(string: "150") + ] + ) + } + + // MARK: - Metadata Tests + + func testLog_WithStringMetadata() { + let metadata: Logger.Metadata = [ + "user_id": "12345", + "session_id": "abc-def-ghi" + ] + + sut.log(level: .info, message: "Test with metadata", metadata: metadata, source: "test", file: "TestFile.swift", function: "testFunction", line: 10) + + assertLogCaptured( + .info, + "Test with metadata", + [ + "sentry.origin": SentryLog.Attribute(string: "auto.logging.swift-log"), + "swift-log.level": SentryLog.Attribute(string: "info"), + "swift-log.source": SentryLog.Attribute(string: "test"), + "swift-log.file": SentryLog.Attribute(string: "TestFile.swift"), + "swift-log.function": SentryLog.Attribute(string: "testFunction"), + "swift-log.line": SentryLog.Attribute(string: "10"), + "swift-log.user_id": SentryLog.Attribute(string: "12345"), + "swift-log.session_id": SentryLog.Attribute(string: "abc-def-ghi") + ] + ) + } + + func testLog_WithHandlerMetadata() { + sut.metadata["app_version"] = "1.0.0" + sut.metadata["environment"] = "test" + + sut.log(level: .info, message: "Test with handler metadata", metadata: nil, source: "test", file: "TestFile.swift", function: "testFunction", line: 20) + + assertLogCaptured( + .info, + "Test with handler metadata", + [ + "sentry.origin": SentryLog.Attribute(string: "auto.logging.swift-log"), + "swift-log.level": SentryLog.Attribute(string: "info"), + "swift-log.source": SentryLog.Attribute(string: "test"), + "swift-log.file": SentryLog.Attribute(string: "TestFile.swift"), + "swift-log.function": SentryLog.Attribute(string: "testFunction"), + "swift-log.line": SentryLog.Attribute(string: "20"), + "swift-log.app_version": SentryLog.Attribute(string: "1.0.0"), + "swift-log.environment": SentryLog.Attribute(string: "test") + ] + ) + } + + func testLog_WithMergedMetadata() { + sut.metadata["app_version"] = "1.0.0" + + let logMetadata: Logger.Metadata = [ + "user_id": "12345", + "app_version": "2.0.0" // This should override handler metadata + ] + + sut.log(level: .info, message: "Test with merged metadata", metadata: logMetadata, source: "test", file: "TestFile.swift", function: "testFunction", line: 30) + + assertLogCaptured( + .info, + "Test with merged metadata", + [ + "sentry.origin": SentryLog.Attribute(string: "auto.logging.swift-log"), + "swift-log.level": SentryLog.Attribute(string: "info"), + "swift-log.source": SentryLog.Attribute(string: "test"), + "swift-log.file": SentryLog.Attribute(string: "TestFile.swift"), + "swift-log.function": SentryLog.Attribute(string: "testFunction"), + "swift-log.line": SentryLog.Attribute(string: "30"), + "swift-log.user_id": SentryLog.Attribute(string: "12345"), + "swift-log.app_version": SentryLog.Attribute(string: "2.0.0") + ] + ) + } + + // MARK: - Metadata Value Conversion Tests + + func testLog_WithStringConvertibleMetadata() { + let metadata: Logger.Metadata = [ + "count": Logger.MetadataValue.stringConvertible(42), + "enabled": Logger.MetadataValue.stringConvertible(true), + "score": Logger.MetadataValue.stringConvertible(3.14159) + ] + + sut.log(level: .info, message: "Test with string convertible metadata", metadata: metadata, source: "test", file: "TestFile.swift", function: "testFunction", line: 40) + + assertLogCaptured( + .info, + "Test with string convertible metadata", + [ + "sentry.origin": SentryLog.Attribute(string: "auto.logging.swift-log"), + "swift-log.level": SentryLog.Attribute(string: "info"), + "swift-log.source": SentryLog.Attribute(string: "test"), + "swift-log.file": SentryLog.Attribute(string: "TestFile.swift"), + "swift-log.function": SentryLog.Attribute(string: "testFunction"), + "swift-log.line": SentryLog.Attribute(string: "40"), + "swift-log.count": SentryLog.Attribute(string: "42"), + "swift-log.enabled": SentryLog.Attribute(string: "true"), + "swift-log.score": SentryLog.Attribute(string: "3.14159") + ] + ) + } + + func testLog_WithDictionaryMetadata() { + let metadata: Logger.Metadata = [ + "user": Logger.MetadataValue.dictionary([ + "id": "12345", + "name": "John Doe" + ]) + ] + + sut.log(level: .info, message: "Test with dictionary metadata", metadata: metadata, source: "test", file: "TestFile.swift", function: "testFunction", line: 50) + + // Verify the log was captured + let logs = fixture.batcher.addInvocations.invocations + XCTAssertEqual(logs.count, 1, "Expected exactly one log to be captured") + + guard let capturedLog = logs.first else { + XCTFail("No log captured") + return + } + + // Verify basic log properties + XCTAssertEqual(capturedLog.level, .info) + XCTAssertEqual(capturedLog.body, "Test with dictionary metadata") + + // Verify the user attribute exists and contains the expected keys + guard let userAttribute = capturedLog.attributes["swift-log.user"] else { + XCTFail("Missing swift-log.user attribute") + return + } + + XCTAssertEqual(userAttribute.type, "string") + let userString = userAttribute.value as! String + + // Check that the string contains both expected key-value pairs (order doesn't matter) + XCTAssertTrue(userString.contains("\"id\": \"12345\""), "User string should contain id") + XCTAssertTrue(userString.contains("\"name\": \"John Doe\""), "User string should contain name") + XCTAssertTrue(userString.hasPrefix("["), "User string should start with [") + XCTAssertTrue(userString.hasSuffix("]"), "User string should end with ]") + } + + func testLog_WithArrayMetadata() { + let metadata: Logger.Metadata = [ + "tags": Logger.MetadataValue.array([ + Logger.MetadataValue.string("production"), + Logger.MetadataValue.string("api"), + Logger.MetadataValue.stringConvertible(42) + ]) + ] + + sut.log(level: .info, message: "Test with array metadata", metadata: metadata, source: "test", file: "TestFile.swift", function: "testFunction", line: 60) + + // Verify the log was captured + let logs = fixture.batcher.addInvocations.invocations + XCTAssertEqual(logs.count, 1, "Expected exactly one log to be captured") + + guard let capturedLog = logs.first else { + XCTFail("No log captured") + return + } + + // Verify basic log properties + XCTAssertEqual(capturedLog.level, .info) + XCTAssertEqual(capturedLog.body, "Test with array metadata") + + // Verify the tags attribute exists and contains the expected values + guard let tagsAttribute = capturedLog.attributes["swift-log.tags"] else { + XCTFail("Missing swift-log.tags attribute") + return + } + + XCTAssertEqual(tagsAttribute.type, "string") + let tagsString = tagsAttribute.value as! String + + // Check that the string contains all expected values (order might vary) + XCTAssertTrue(tagsString.contains("\"production\""), "Tags string should contain production") + XCTAssertTrue(tagsString.contains("\"api\""), "Tags string should contain api") + XCTAssertTrue(tagsString.contains("\"42\""), "Tags string should contain 42") + XCTAssertTrue(tagsString.hasPrefix("["), "Tags string should start with [") + XCTAssertTrue(tagsString.hasSuffix("]"), "Tags string should end with ]") + } + + // MARK: - Log Level Configuration Tests + + func testLogLevelConfiguration() { + XCTAssertEqual(sut.logLevel, .info) + + sut.logLevel = .debug + XCTAssertEqual(sut.logLevel, .debug) + + sut.logLevel = .error + XCTAssertEqual(sut.logLevel, .error) + } + + func testMetadataSubscript() { + XCTAssertNil(sut.metadata["test_key"]) + + sut.metadata["test_key"] = "test_value" + XCTAssertEqual(sut.metadata["test_key"], .string("test_value")) + + sut.metadata["test_key"] = nil + XCTAssertNil(sut.metadata["test_key"]) + } + + // MARK: - Helper Methods + + private func assertLogCaptured( + _ expectedLevel: SentryLog.Level, + _ expectedBody: String, + _ expectedAttributes: [String: SentryLog.Attribute], + file: StaticString = #file, + line: UInt = #line + ) { + let logs = fixture.batcher.addInvocations.invocations + XCTAssertEqual(logs.count, 1, "Expected exactly one log to be captured", file: file, line: line) + + guard let capturedLog = logs.first else { + XCTFail("No log captured", file: file, line: line) + return + } + + XCTAssertEqual(capturedLog.level, expectedLevel, "Log level mismatch", file: file, line: line) + XCTAssertEqual(capturedLog.body, expectedBody, "Log body mismatch", file: file, line: line) + XCTAssertEqual(capturedLog.timestamp, fixture.dateProvider.date(), "Log timestamp mismatch", file: file, line: line) + + // Count expected default attributes dynamically + var expectedDefaultAttributeCount = 3 // sdk.name, sdk.version, environment are always present + if fixture.options.releaseName != nil { + expectedDefaultAttributeCount += 1 // sentry.release + } + if fixture.hub.scope.span != nil { + expectedDefaultAttributeCount += 1 // sentry.trace.parent_span_id + } + // OS and device attributes (up to 5 more if context is available) + if let contextDictionary = fixture.hub.scope.serialize()["context"] as? [String: [String: Any]] { + if let osContext = contextDictionary["os"] { + if osContext["name"] != nil { expectedDefaultAttributeCount += 1 } + if osContext["version"] != nil { expectedDefaultAttributeCount += 1 } + } + if contextDictionary["device"] != nil { + expectedDefaultAttributeCount += 1 // device.brand (always "Apple") + if let deviceContext = contextDictionary["device"] { + if deviceContext["model"] != nil { expectedDefaultAttributeCount += 1 } + if deviceContext["family"] != nil { expectedDefaultAttributeCount += 1 } + } + } + } + + // Compare attributes + XCTAssertEqual(capturedLog.attributes.count, expectedAttributes.count + expectedDefaultAttributeCount, "Attribute count mismatch", file: file, line: line) + + for (key, expectedAttribute) in expectedAttributes { + guard let actualAttribute = capturedLog.attributes[key] else { + XCTFail("Missing attribute key: \(key)", file: file, line: line) + continue + } + + XCTAssertEqual(actualAttribute.type, expectedAttribute.type, "Attribute type mismatch for key: \(key)", file: file, line: line) + + // Compare values based on type + switch expectedAttribute.type { + case "string": + let expectedValue = expectedAttribute.value as! String + let actualValue = actualAttribute.value as! String + XCTAssertEqual(actualValue, expectedValue, "String attribute value mismatch for key: \(key)", file: file, line: line) + case "boolean": + let expectedValue = expectedAttribute.value as! Bool + let actualValue = actualAttribute.value as! Bool + XCTAssertEqual(actualValue, expectedValue, "Boolean attribute value mismatch for key: \(key)", file: file, line: line) + case "integer": + let expectedValue = expectedAttribute.value as! Int + let actualValue = actualAttribute.value as! Int + XCTAssertEqual(actualValue, expectedValue, "Integer attribute value mismatch for key: \(key)", file: file, line: line) + case "double": + let expectedValue = expectedAttribute.value as! Double + let actualValue = actualAttribute.value as! Double + XCTAssertEqual(actualValue, expectedValue, accuracy: 0.000001, "Double attribute value mismatch for key: \(key)", file: file, line: line) + default: + XCTFail("Unknown attribute type for key: \(key). Type: \(expectedAttribute.type)", file: file, line: line) + } + } + } +} From 59117a4653f072f74910304c1e08b0d6a63065a6 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Thu, 25 Sep 2025 16:25:28 +0200 Subject: [PATCH 04/44] revert changes in sample app --- .../iOS-Swift/iOS-Swift/ExtraViewController.swift | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Samples/iOS-Swift/iOS-Swift/ExtraViewController.swift b/Samples/iOS-Swift/iOS-Swift/ExtraViewController.swift index ad8944dd5da..81143919c5e 100644 --- a/Samples/iOS-Swift/iOS-Swift/ExtraViewController.swift +++ b/Samples/iOS-Swift/iOS-Swift/ExtraViewController.swift @@ -18,7 +18,7 @@ class ExtraViewController: UIViewController { @IBOutlet weak var dataMarshalingErrorLabel: UILabel! private let dispatchQueue = DispatchQueue(label: "ExtraViewControllers", attributes: .concurrent) -// private var batteryConsumer: BatteryConsumer? + private var batteryConsumer: BatteryConsumer? override func viewDidLoad() { super.viewDidLoad() @@ -61,22 +61,22 @@ class ExtraViewController: UIViewController { @IBAction func highEnergyCPU(_ sender: UIButton) { highlightButton(sender) if #available(iOS 15.0, *) { -// batteryConsumer = BatteryConsumer(qos: .userInitiated) -// batteryConsumer?.start() + batteryConsumer = BatteryConsumer(qos: .userInitiated) + batteryConsumer?.start() } } @IBAction func lowEnergyCPU(_ sender: UIButton) { highlightButton(sender) if #available(iOS 15.0, *) { -// batteryConsumer = BatteryConsumer(qos: .background) -// batteryConsumer?.start() + batteryConsumer = BatteryConsumer(qos: .background) + batteryConsumer?.start() } } @IBAction func stopUsingEnergy(_ sender: UIButton) { highlightButton(sender) -// batteryConsumer?.stop() + batteryConsumer?.stop() } @IBAction func anrDeadlock(_ sender: UIButton) { From 2fcf8bb890637457fc0979e15d962a4c89898bd7 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Thu, 25 Sep 2025 16:26:26 +0200 Subject: [PATCH 05/44] remove unused helper --- Sentry.xcodeproj/project.pbxproj | 4 --- .../SentryLogAttribute+Tests.swift | 31 ------------------- 2 files changed, 35 deletions(-) delete mode 100644 SentryTestUtils/SentryLogAttribute+Tests.swift diff --git a/Sentry.xcodeproj/project.pbxproj b/Sentry.xcodeproj/project.pbxproj index 4d7b33b644c..f12b9341a2a 100644 --- a/Sentry.xcodeproj/project.pbxproj +++ b/Sentry.xcodeproj/project.pbxproj @@ -764,7 +764,6 @@ 92815FC82E8576AA004576C3 /* SwiftLogSentry.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 92815F702E85467F004576C3 /* SwiftLogSentry.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 92815FCA2E85770E004576C3 /* SentryTestUtilsDynamic.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D84DAD4D2B17428D003CF120 /* SentryTestUtilsDynamic.framework */; }; 92815FCE2E857776004576C3 /* libSentryTestUtils.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8431F00A29B284F200D8DC56 /* libSentryTestUtils.a */; }; - 92815FD22E857AA8004576C3 /* SentryLogAttribute+Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92815FD12E857A9E004576C3 /* SentryLogAttribute+Tests.swift */; }; 928207C42E251B8F009285A4 /* SentryScope+PrivateSwift.h in Headers */ = {isa = PBXBuildFile; fileRef = 928207C32E251B8F009285A4 /* SentryScope+PrivateSwift.h */; }; 9286059529A5096600F96038 /* SentryGeo.h in Headers */ = {isa = PBXBuildFile; fileRef = 9286059429A5096600F96038 /* SentryGeo.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9286059729A5098900F96038 /* SentryGeo.m in Sources */ = {isa = PBXBuildFile; fileRef = 9286059629A5098900F96038 /* SentryGeo.m */; }; @@ -2132,7 +2131,6 @@ 92815F702E85467F004576C3 /* SwiftLogSentry.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftLogSentry.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 92815FB42E857492004576C3 /* SwiftLogSentryTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwiftLogSentryTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 92815FC42E8574D5004576C3 /* SentryLogHandlerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryLogHandlerTests.swift; sourceTree = ""; }; - 92815FD12E857A9E004576C3 /* SentryLogAttribute+Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SentryLogAttribute+Tests.swift"; sourceTree = ""; }; 928207C32E251B8F009285A4 /* SentryScope+PrivateSwift.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "SentryScope+PrivateSwift.h"; path = "include/SentryScope+PrivateSwift.h"; sourceTree = ""; }; 9286059429A5096600F96038 /* SentryGeo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SentryGeo.h; path = Public/SentryGeo.h; sourceTree = ""; }; 9286059629A5098900F96038 /* SentryGeo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SentryGeo.m; sourceTree = ""; }; @@ -4076,7 +4074,6 @@ 8431F00B29B284F200D8DC56 /* SentryTestUtils */ = { isa = PBXGroup; children = ( - 92815FD12E857A9E004576C3 /* SentryLogAttribute+Tests.swift */, 84AEB4682C2F9673007E46E1 /* ArrayAccesses.swift */, D8FC98AA2CD0DAAC0009824C /* BreadcrumbExtension.swift */, 841325DE2BFED0510029228F /* TestFramesTracker.swift */, @@ -6520,7 +6517,6 @@ 84B7FA4429B2924000AD93B1 /* TestRandom.swift in Sources */, 8431F01B29B2852D00D8DC56 /* Logger.swift in Sources */, 8431F01829B2852D00D8DC56 /* TypeMapping.swift in Sources */, - 92815FD22E857AA8004576C3 /* SentryLogAttribute+Tests.swift in Sources */, 84B7FA4529B2926900AD93B1 /* TestDisplayLinkWrapper.swift in Sources */, 84AC61DB29F7654A009EEF61 /* TestDispatchSourceWrapper.swift in Sources */, D452FE6F2DDC890A00AFF56F /* TestFileManager.swift in Sources */, diff --git a/SentryTestUtils/SentryLogAttribute+Tests.swift b/SentryTestUtils/SentryLogAttribute+Tests.swift deleted file mode 100644 index 3ba31724823..00000000000 --- a/SentryTestUtils/SentryLogAttribute+Tests.swift +++ /dev/null @@ -1,31 +0,0 @@ -@_spi(Private) @testable import Sentry - -public extension SentryLog.Attribute { - - func equal(to other: SentryLog.Attribute) -> Bool { - guard type == other.type else { - return false - } - // Compare values based on type - switch type { - case "string": - let expectedValue = value as! String - let actualValue = other.value as! String - return expectedValue == actualValue - case "boolean": - let expectedValue = value as! Bool - let actualValue = other.value as! Bool - return expectedValue == actualValue - case "integer": - let expectedValue = value as! Int - let actualValue = other.value as! Int - return expectedValue == actualValue - case "double": - let expectedValue = value as! Double - let actualValue = other.value as! Double - return expectedValue == actualValue - default: - return false - } - } -} From 467f314b068180fa24f2da9f29e8328d8b7b2255 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Thu, 25 Sep 2025 16:28:34 +0200 Subject: [PATCH 06/44] no need for docs for swift-log methods --- Sources/SwiftLog/SentryLogHandler.swift | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/Sources/SwiftLog/SentryLogHandler.swift b/Sources/SwiftLog/SentryLogHandler.swift index 36ef60833d6..2be026886dc 100644 --- a/Sources/SwiftLog/SentryLogHandler.swift +++ b/Sources/SwiftLog/SentryLogHandler.swift @@ -69,22 +69,6 @@ public struct SentryLogHandler: LogHandler { self.sentryLogger = sentryLogger } - /// Logs a message to Sentry with the specified level and context. - /// - /// This method implements the Swift Log `LogHandler` protocol. It automatically: - /// - Maps Swift Log levels to Sentry log levels - /// - Includes source context (file, function, line) as structured attributes - /// - Merges handler metadata with call-site metadata - /// - Prefixes metadata keys with "swift-log." to avoid conflicts - /// - /// - Parameters: - /// - level: The log level of the message - /// - message: The log message to send - /// - metadata: Optional metadata to include with the message - /// - source: The source of the log message (typically the module name) - /// - file: The file where the log was called - /// - function: The function where the log was called - /// - line: The line number where the log was called public func log( level: Logger.Level, message: Logger.Message, @@ -129,13 +113,6 @@ public struct SentryLogHandler: LogHandler { } } - /// Provides access to logger metadata by key. - /// - /// This subscript allows you to get and set metadata values that will be included - /// with all log entries from this handler. - /// - /// - Parameter metadataKey: The key for the metadata value - /// - Returns: The metadata value for the given key, or `nil` if not set public subscript(metadataKey metadataKey: String) -> Logger.Metadata.Value? { get { metadata[metadataKey] From 00559c2c366b6949c4a7560c7d0422e8acdd5481 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Thu, 25 Sep 2025 16:28:58 +0200 Subject: [PATCH 07/44] fix typo --- Sources/SwiftLog/SentryLogHandler.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/SwiftLog/SentryLogHandler.swift b/Sources/SwiftLog/SentryLogHandler.swift index 2be026886dc..e7030ff7a31 100644 --- a/Sources/SwiftLog/SentryLogHandler.swift +++ b/Sources/SwiftLog/SentryLogHandler.swift @@ -32,7 +32,7 @@ import Sentry /// return SentryLogHandler(logLevel: .trace) /// } /// -/// // Crea & use the logger +/// // Create & use the logger /// let logger = Logger(label: "com.example.app") /// logger.info("User logged in", metadata: ["userId": "12345"]) /// logger.error("Payment failed", metadata: ["errorCode": 500]) From 249759b3aeb3e7013e246c689036c4984bbf4596 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Thu, 25 Sep 2025 16:32:01 +0200 Subject: [PATCH 08/44] no need to map level --- Sources/SwiftLog/SentryLogHandler.swift | 33 ++++++------------------- 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/Sources/SwiftLog/SentryLogHandler.swift b/Sources/SwiftLog/SentryLogHandler.swift index e7030ff7a31..83b0bef0b86 100644 --- a/Sources/SwiftLog/SentryLogHandler.swift +++ b/Sources/SwiftLog/SentryLogHandler.swift @@ -95,20 +95,22 @@ public struct SentryLogHandler: LogHandler { // Call the appropriate SentryLog method based on level let messageString = String(describing: message) - switch mapLogLevel(level) { + + switch level { case .trace: sentryLogger.trace(messageString, attributes: attributes) case .debug: sentryLogger.debug(messageString, attributes: attributes) case .info: sentryLogger.info(messageString, attributes: attributes) - case .warn: + case .notice: + // Map notice to info as SentryLog doesn't have notice + sentryLogger.info(messageString, attributes: attributes) + case .warning: sentryLogger.warn(messageString, attributes: attributes) case .error: sentryLogger.error(messageString, attributes: attributes) - case .fatal: - sentryLogger.fatal(messageString, attributes: attributes) - @unknown default: + case .critical: sentryLogger.fatal(messageString, attributes: attributes) } } @@ -121,25 +123,4 @@ public struct SentryLogHandler: LogHandler { metadata[metadataKey] = newValue } } - - // MARK: - Private Helper Methods - - private func mapLogLevel(_ level: Logger.Level) -> SentryLog.Level { - switch level { - case .trace: - return .trace - case .debug: - return .debug - case .info: - return .info - case .notice: - return .info // Map notice to info as SentryLog doesn't have notice - case .warning: - return .warn - case .error: - return .error - case .critical: - return .fatal - } - } } From 1c0a0d4e183f38edc6ff684c95c6daecb00fb989 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Thu, 25 Sep 2025 16:35:20 +0200 Subject: [PATCH 09/44] fix typo --- Package.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index 8f2ac56c7d6..4ebd9b3b1e5 100644 --- a/Package.swift +++ b/Package.swift @@ -132,7 +132,7 @@ let package = Package( platforms: [.iOS(.v11), .macOS(.v10_13), .tvOS(.v11), .watchOS(.v4)], products: products, dependencies: [ - .package(url: "https://github.com/apple/swift-log", from: "1.6.0") // TODO: This clases with iOS 11 min target version + .package(url: "https://github.com/apple/swift-log", from: "1.6.0") // TODO: This clashes with iOS 11 min target version ], targets: targets, cxxLanguageStandard: .cxx14 From 39dc722d91e6343056983bd78c494de45c11e124 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Thu, 25 Sep 2025 16:52:23 +0200 Subject: [PATCH 10/44] format package --- Package.swift | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Package.swift b/Package.swift index 4ebd9b3b1e5..d1e64f4e888 100644 --- a/Package.swift +++ b/Package.swift @@ -45,7 +45,7 @@ var targets: [Target] = [ url: "https://github.com/getsentry/sentry-cocoa/releases/download/8.56.1/Sentry-WithoutUIKitOrAppKit-WithARM64e.xcframework.zip", checksum: "185c204812ae7bed62cff92adb0cbd1641c2ae9183dc000a8c72b7fcc5a0c0c5" //Sentry-WithoutUIKitOrAppKit-WithARM64e ), - .target ( + .target( name: "SentrySwiftUI", dependencies: ["Sentry", "SentryInternal"], path: "Sources/SentrySwiftUI", @@ -54,7 +54,7 @@ var targets: [Target] = [ .linkedFramework("Sentry") ] ), - .target ( + .target( name: "swift-log-sentry", dependencies: ["Sentry", .product(name: "Logging", package: "swift-log")], path: "Sources/SwiftLog", @@ -122,7 +122,8 @@ if let env = env, String(cString: env, encoding: .utf8) == "1" { .headerSearchPath("SentryCrash/Installations"), .headerSearchPath("SentryCrash/Reporting/Filters"), .headerSearchPath("SentryCrash/Reporting/Filters/Tools"), - .define("SDK_V9")] + .define("SDK_V9") + ] ) ]) } From ce69ea1737977a1119ad5934007afd6a522c036e Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Tue, 30 Sep 2025 14:17:04 +0200 Subject: [PATCH 11/44] Rename to SentrySwiftLog --- Package.swift | 8 ++++---- Sentry.xcodeproj/project.pbxproj | 16 ++++++++-------- .../SentryLogHandler.swift | 0 .../SentryLogHandlerTests.swift | 0 4 files changed, 12 insertions(+), 12 deletions(-) rename Sources/{SwiftLog => SentrySwiftLog}/SentryLogHandler.swift (100%) rename Tests/{SwiftLogTests => SentrySwiftLogTests}/SentryLogHandlerTests.swift (100%) diff --git a/Package.swift b/Package.swift index 70fe7f238df..ee4fea38549 100644 --- a/Package.swift +++ b/Package.swift @@ -16,8 +16,8 @@ var products: [Product] = [ .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"]) - .library(name: "swift-log-sentry", targets: ["Sentry", "swift-log-sentry"]) + .library(name: "SentryDistribution", targets: ["SentryDistribution"]), + .library(name: "SentrySwiftLog", targets: ["Sentry", "SentrySwiftLog"]) ] var targets: [Target] = [ @@ -56,9 +56,9 @@ var targets: [Target] = [ ] ), .target( - name: "swift-log-sentry", + name: "SentrySwiftLog", dependencies: ["Sentry", .product(name: "Logging", package: "swift-log")], - path: "Sources/SwiftLog", + path: "Sources/SentrySwiftLog", linkerSettings: [ .linkedFramework("Sentry") ] diff --git a/Sentry.xcodeproj/project.pbxproj b/Sentry.xcodeproj/project.pbxproj index 5e5b92a2b86..0e261aa7ced 100644 --- a/Sentry.xcodeproj/project.pbxproj +++ b/Sentry.xcodeproj/project.pbxproj @@ -989,9 +989,9 @@ F41362112E1C55AF00B84443 /* SentryScopePersistentStore+Tags.swift in Sources */ = {isa = PBXBuildFile; fileRef = F41362102E1C55AF00B84443 /* SentryScopePersistentStore+Tags.swift */; }; F41362132E1C566100B84443 /* SentryScopePersistentStore+User.swift in Sources */ = {isa = PBXBuildFile; fileRef = F41362122E1C566100B84443 /* SentryScopePersistentStore+User.swift */; }; F41362152E1C568400B84443 /* SentryScopePersistentStore+Context.swift in Sources */ = {isa = PBXBuildFile; fileRef = F41362142E1C568400B84443 /* SentryScopePersistentStore+Context.swift */; }; - F429D3AA2E8562EF00DBF387 /* RateLimitParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = F429D3A82E8562EF00DBF387 /* RateLimitParser.swift */; }; F429D37F2E8532A300DBF387 /* HttpDateParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = F429D37D2E8532A300DBF387 /* HttpDateParser.swift */; }; F429D39A2E85360F00DBF387 /* RetryAfterHeaderParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = F429D3992E85360F00DBF387 /* RetryAfterHeaderParser.swift */; }; + F429D3AA2E8562EF00DBF387 /* RateLimitParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = F429D3A82E8562EF00DBF387 /* RateLimitParser.swift */; }; F443DB272E09BE8C009A9045 /* LoadValidatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F443DB262E09BE8C009A9045 /* LoadValidatorTests.swift */; }; F44858132E03579D0013E63B /* SentryCrashDynamicLinker+Test.h in Headers */ = {isa = PBXBuildFile; fileRef = F44858122E0357940013E63B /* SentryCrashDynamicLinker+Test.h */; }; F451FAA62E0B304E0050ACF2 /* LoadValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F451FAA52E0B304E0050ACF2 /* LoadValidator.swift */; }; @@ -2372,9 +2372,9 @@ F41362102E1C55AF00B84443 /* SentryScopePersistentStore+Tags.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SentryScopePersistentStore+Tags.swift"; sourceTree = ""; }; F41362122E1C566100B84443 /* SentryScopePersistentStore+User.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SentryScopePersistentStore+User.swift"; sourceTree = ""; }; F41362142E1C568400B84443 /* SentryScopePersistentStore+Context.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SentryScopePersistentStore+Context.swift"; sourceTree = ""; }; - F429D3A82E8562EF00DBF387 /* RateLimitParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RateLimitParser.swift; sourceTree = ""; }; F429D37D2E8532A300DBF387 /* HttpDateParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HttpDateParser.swift; sourceTree = ""; }; F429D3992E85360F00DBF387 /* RetryAfterHeaderParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RetryAfterHeaderParser.swift; sourceTree = ""; }; + F429D3A82E8562EF00DBF387 /* RateLimitParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RateLimitParser.swift; sourceTree = ""; }; F443DB262E09BE8C009A9045 /* LoadValidatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadValidatorTests.swift; sourceTree = ""; }; F44858122E0357940013E63B /* SentryCrashDynamicLinker+Test.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SentryCrashDynamicLinker+Test.h"; sourceTree = ""; }; F451FAA52E0B304E0050ACF2 /* LoadValidator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadValidator.swift; sourceTree = ""; }; @@ -3009,7 +3009,7 @@ D800942328F82E8D005D3943 /* Swift */, 63FE6FB920DA4C1000CDBAE8 /* SentryCrash */, D8199DB329376ECC0074249E /* SentrySwiftUI */, - 921AA7892E853C8800A8D034 /* SwiftLog */, + 921AA7892E853C8800A8D034 /* SentrySwiftLog */, 63AA75A31EB8AFDF00D153DE /* Configuration */, D8B0542F2A7D35F10056BAF6 /* Resources */, ); @@ -3027,7 +3027,7 @@ 8431EFDB29B27B3D00D8DC56 /* SentryProfilerTests */, D8F01DE32A125D7B008F4996 /* HybridSDKTest */, D833D60F2D1320DF00961E7A /* SentrySwiftUITests */, - 92815FAF2E85744E004576C3 /* SwiftLogTests */, + 92815FAF2E85744E004576C3 /* SentrySwiftLogTests */, ); path = Tests; sourceTree = ""; @@ -4246,20 +4246,20 @@ name = Transaction; sourceTree = ""; }; - 921AA7892E853C8800A8D034 /* SwiftLog */ = { + 921AA7892E853C8800A8D034 /* SentrySwiftLog */ = { isa = PBXGroup; children = ( 921AA7882E853C8800A8D034 /* SentryLogHandler.swift */, ); - path = SwiftLog; + path = SentrySwiftLog; sourceTree = ""; }; - 92815FAF2E85744E004576C3 /* SwiftLogTests */ = { + 92815FAF2E85744E004576C3 /* SentrySwiftLogTests */ = { isa = PBXGroup; children = ( 92815FC42E8574D5004576C3 /* SentryLogHandlerTests.swift */, ); - path = SwiftLogTests; + path = SentrySwiftLogTests; sourceTree = ""; }; D4009EA02D77196F0007AF30 /* ViewCapture */ = { diff --git a/Sources/SwiftLog/SentryLogHandler.swift b/Sources/SentrySwiftLog/SentryLogHandler.swift similarity index 100% rename from Sources/SwiftLog/SentryLogHandler.swift rename to Sources/SentrySwiftLog/SentryLogHandler.swift diff --git a/Tests/SwiftLogTests/SentryLogHandlerTests.swift b/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift similarity index 100% rename from Tests/SwiftLogTests/SentryLogHandlerTests.swift rename to Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift From 825e5df7bf75d754faabb4bf41dbda9c9f1e3cdc Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Tue, 30 Sep 2025 14:22:44 +0200 Subject: [PATCH 12/44] remae target --- Samples/iOS15-SwiftUI/iOS15-SwiftUI/App.swift | 2 +- Sentry.xcodeproj/project.pbxproj | 42 +++++++++---------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/Samples/iOS15-SwiftUI/iOS15-SwiftUI/App.swift b/Samples/iOS15-SwiftUI/iOS15-SwiftUI/App.swift index d9e779938bd..3a11d214f1a 100644 --- a/Samples/iOS15-SwiftUI/iOS15-SwiftUI/App.swift +++ b/Samples/iOS15-SwiftUI/iOS15-SwiftUI/App.swift @@ -3,7 +3,7 @@ import SentrySampleShared import SwiftUI import Logging -import SwiftLogSentry +import SentrySwiftLog @main struct SwiftUIApp: App { diff --git a/Sentry.xcodeproj/project.pbxproj b/Sentry.xcodeproj/project.pbxproj index 0e261aa7ced..779a1000642 100644 --- a/Sentry.xcodeproj/project.pbxproj +++ b/Sentry.xcodeproj/project.pbxproj @@ -750,8 +750,8 @@ 92815F822E85468F004576C3 /* SentryLogHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 921AA7882E853C8800A8D034 /* SentryLogHandler.swift */; }; 92815F9D2E854766004576C3 /* Logging in Frameworks */ = {isa = PBXBuildFile; productRef = 92815F9C2E854766004576C3 /* Logging */; }; 92815FC62E857528004576C3 /* SentryLogHandlerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92815FC42E8574D5004576C3 /* SentryLogHandlerTests.swift */; }; - 92815FC72E8576AA004576C3 /* SwiftLogSentry.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92815F702E85467F004576C3 /* SwiftLogSentry.framework */; }; - 92815FC82E8576AA004576C3 /* SwiftLogSentry.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 92815F702E85467F004576C3 /* SwiftLogSentry.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 92815FC72E8576AA004576C3 /* SentrySwiftLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92815F702E85467F004576C3 /* SentrySwiftLog.framework */; }; + 92815FC82E8576AA004576C3 /* SentrySwiftLog.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 92815F702E85467F004576C3 /* SentrySwiftLog.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 92815FCA2E85770E004576C3 /* SentryTestUtilsDynamic.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D84DAD4D2B17428D003CF120 /* SentryTestUtilsDynamic.framework */; }; 92815FCE2E857776004576C3 /* libSentryTestUtils.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8431F00A29B284F200D8DC56 /* libSentryTestUtils.a */; }; 928207C42E251B8F009285A4 /* SentryScope+PrivateSwift.h in Headers */ = {isa = PBXBuildFile; fileRef = 928207C32E251B8F009285A4 /* SentryScope+PrivateSwift.h */; }; @@ -1250,7 +1250,7 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - 92815FC82E8576AA004576C3 /* SwiftLogSentry.framework in Embed Frameworks */, + 92815FC82E8576AA004576C3 /* SentrySwiftLog.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -2113,8 +2113,8 @@ 9264E1EC2E2E397400B077CF /* SentryLogMessageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryLogMessageTests.swift; sourceTree = ""; }; 92672BB529C9A2A9006B021C /* SentryBreadcrumb+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "SentryBreadcrumb+Private.h"; path = "include/HybridPublic/SentryBreadcrumb+Private.h"; sourceTree = ""; }; 927A5CC32DD7626400B82404 /* SentryEnvelopeItemHeaderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryEnvelopeItemHeaderTests.swift; sourceTree = ""; }; - 92815F702E85467F004576C3 /* SwiftLogSentry.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftLogSentry.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 92815FB42E857492004576C3 /* SwiftLogSentryTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwiftLogSentryTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 92815F702E85467F004576C3 /* SentrySwiftLog.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SentrySwiftLog.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 92815FB42E857492004576C3 /* SentrySwiftLogTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SentrySwiftLogTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 92815FC42E8574D5004576C3 /* SentryLogHandlerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryLogHandlerTests.swift; sourceTree = ""; }; 928207C32E251B8F009285A4 /* SentryScope+PrivateSwift.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "SentryScope+PrivateSwift.h"; path = "include/SentryScope+PrivateSwift.h"; sourceTree = ""; }; 9286059429A5096600F96038 /* SentryGeo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SentryGeo.h; path = Public/SentryGeo.h; sourceTree = ""; }; @@ -2565,7 +2565,7 @@ files = ( 92815FCE2E857776004576C3 /* libSentryTestUtils.a in Frameworks */, 92815FCA2E85770E004576C3 /* SentryTestUtilsDynamic.framework in Frameworks */, - 92815FC72E8576AA004576C3 /* SwiftLogSentry.framework in Frameworks */, + 92815FC72E8576AA004576C3 /* SentrySwiftLog.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2865,8 +2865,8 @@ D84DAD4D2B17428D003CF120 /* SentryTestUtilsDynamic.framework */, D833D7342D1321C100961E7A /* SentrySwiftUITests.xctest */, D4CBA2432DE06D0200581618 /* SentryTestUtilsTests.xctest */, - 92815F702E85467F004576C3 /* SwiftLogSentry.framework */, - 92815FB42E857492004576C3 /* SwiftLogSentryTests.xctest */, + 92815F702E85467F004576C3 /* SentrySwiftLog.framework */, + 92815FB42E857492004576C3 /* SentrySwiftLogTests.xctest */, ); name = Products; sourceTree = ""; @@ -5401,9 +5401,9 @@ productReference = 8431F00A29B284F200D8DC56 /* libSentryTestUtils.a */; productType = "com.apple.product-type.library.static"; }; - 92815F6F2E85467F004576C3 /* SwiftLogSentry */ = { + 92815F6F2E85467F004576C3 /* SentrySwiftLog */ = { isa = PBXNativeTarget; - buildConfigurationList = 92815F812E854680004576C3 /* Build configuration list for PBXNativeTarget "SwiftLogSentry" */; + buildConfigurationList = 92815F812E854680004576C3 /* Build configuration list for PBXNativeTarget "SentrySwiftLog" */; buildPhases = ( 92815F6B2E85467F004576C3 /* Headers */, 92815F6C2E85467F004576C3 /* Sources */, @@ -5415,17 +5415,17 @@ dependencies = ( 92815F9F2E85576B004576C3 /* PBXTargetDependency */, ); - name = SwiftLogSentry; + name = SentrySwiftLog; packageProductDependencies = ( 92815F9C2E854766004576C3 /* Logging */, ); productName = SwiftLogSentry; - productReference = 92815F702E85467F004576C3 /* SwiftLogSentry.framework */; + productReference = 92815F702E85467F004576C3 /* SentrySwiftLog.framework */; productType = "com.apple.product-type.framework"; }; - 92815FB32E857492004576C3 /* SwiftLogSentryTests */ = { + 92815FB32E857492004576C3 /* SentrySwiftLogTests */ = { isa = PBXNativeTarget; - buildConfigurationList = 92815FBB2E857492004576C3 /* Build configuration list for PBXNativeTarget "SwiftLogSentryTests" */; + buildConfigurationList = 92815FBB2E857492004576C3 /* Build configuration list for PBXNativeTarget "SentrySwiftLogTests" */; buildPhases = ( 92815FB02E857492004576C3 /* Sources */, 92815FB12E857492004576C3 /* Frameworks */, @@ -5439,11 +5439,11 @@ 92815FCD2E85770E004576C3 /* PBXTargetDependency */, 92815FD02E857776004576C3 /* PBXTargetDependency */, ); - name = SwiftLogSentryTests; + name = SentrySwiftLogTests; packageProductDependencies = ( ); productName = SwiftLogSentryTests; - productReference = 92815FB42E857492004576C3 /* SwiftLogSentryTests.xctest */; + productReference = 92815FB42E857492004576C3 /* SentrySwiftLogTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; D4CBA2422DE06D0200581618 /* SentryTestUtilsTests */ = { @@ -5599,8 +5599,8 @@ D84DAD4C2B17428D003CF120 /* SentryTestUtilsDynamic */, D833D61E2D1321C100961E7A /* SentrySwiftUITests */, D4CBA2422DE06D0200581618 /* SentryTestUtilsTests */, - 92815F6F2E85467F004576C3 /* SwiftLogSentry */, - 92815FB32E857492004576C3 /* SwiftLogSentryTests */, + 92815F6F2E85467F004576C3 /* SentrySwiftLog */, + 92815FB32E857492004576C3 /* SentrySwiftLogTests */, ); }; /* End PBXProject section */ @@ -6606,7 +6606,7 @@ }; 92815FBA2E857492004576C3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 92815F6F2E85467F004576C3 /* SwiftLogSentry */; + target = 92815F6F2E85467F004576C3 /* SentrySwiftLog */; targetProxy = 92815FB92E857492004576C3 /* PBXContainerItemProxy */; }; 92815FCD2E85770E004576C3 /* PBXTargetDependency */ = { @@ -10407,7 +10407,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 92815F812E854680004576C3 /* Build configuration list for PBXNativeTarget "SwiftLogSentry" */ = { + 92815F812E854680004576C3 /* Build configuration list for PBXNativeTarget "SentrySwiftLog" */ = { isa = XCConfigurationList; buildConfigurations = ( 92815F742E854680004576C3 /* Debug */, @@ -10422,7 +10422,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 92815FBB2E857492004576C3 /* Build configuration list for PBXNativeTarget "SwiftLogSentryTests" */ = { + 92815FBB2E857492004576C3 /* Build configuration list for PBXNativeTarget "SentrySwiftLogTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 92815FBC2E857492004576C3 /* Debug */, From 71397569d17d7a014b689068422526a4198e6e99 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Tue, 30 Sep 2025 14:33:56 +0200 Subject: [PATCH 13/44] Add changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2485e318bbe..d72d9d1d092 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### Features - Add SentryDistribution as Swift Package Manager target (#6149) +- Add `SentrySwiftLog` Integration ([#6286](https://github.com/getsentry/sentry-cocoa/pull/6286)) ## 8.56.2 From 2408a0753e8be971ecb0da9122b53c5f05bbb465 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Tue, 30 Sep 2025 14:40:49 +0200 Subject: [PATCH 14/44] disable lint warning, remove todo --- Package.swift | 2 +- Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index ee4fea38549..850e76bbdaa 100644 --- a/Package.swift +++ b/Package.swift @@ -136,7 +136,7 @@ let package = Package( platforms: [.iOS(.v11), .macOS(.v10_13), .tvOS(.v11), .watchOS(.v4)], products: products, dependencies: [ - .package(url: "https://github.com/apple/swift-log", from: "1.6.0") // TODO: This clashes with iOS 11 min target version + .package(url: "https://github.com/apple/swift-log", from: "1.6.0") ], targets: targets, cxxLanguageStandard: .cxx14 diff --git a/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift b/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift index aacce28063b..300a099c1ff 100644 --- a/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift +++ b/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift @@ -4,6 +4,8 @@ import Logging @_spi(Private) @testable import SwiftLogSentry import XCTest +// swiftlint:disable cyclomatic_complexity + final class SentryLogHandlerTests: XCTestCase { private class Fixture { From f9062d65f9a49d491b21aa2de200fffbd30bc490 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Tue, 30 Sep 2025 15:05:26 +0200 Subject: [PATCH 15/44] Exclude from SentryObjc --- Package.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index 850e76bbdaa..edf223038e5 100644 --- a/Package.swift +++ b/Package.swift @@ -115,7 +115,7 @@ if let env = env, String(cString: env, encoding: .utf8) == "1" { name: "SentryObjc", dependencies: ["SentrySwift"], path: "Sources", - exclude: ["Sentry/SentryDummyPublicEmptyClass.m", "Sentry/SentryDummyPrivateEmptyClass.m", "Swift", "SentrySwiftUI", "Resources", "Configuration", "SentryCppHelper", "SentryDistribution", "SentryDistributionTests"], + exclude: ["Sentry/SentryDummyPublicEmptyClass.m", "Sentry/SentryDummyPrivateEmptyClass.m", "Swift", "SentrySwiftUI", "SentrySwiftLog", "Resources", "Configuration", "SentryCppHelper", "SentryDistribution", "SentryDistributionTests"], cSettings: [ .headerSearchPath("Sentry/include/HybridPublic"), .headerSearchPath("Sentry"), From f6bc9142f37913fdab1c007ab1a9954f1b0e42e3 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Tue, 30 Sep 2025 15:20:55 +0200 Subject: [PATCH 16/44] test SentrySwiftLog --- .github/workflows/test.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9748890b2d6..f157f1c298c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -338,6 +338,15 @@ jobs: device: "iPhone 15 Pro" scheme: "SentrySwiftUI" + # iOS 17 + - name: iOS 17 SentrySwiftLog + runs-on: macos-14 + platform: "iOS" + xcode: "15.4" + test-destination-os: "17.5" + device: "iPhone 15 Pro" + scheme: "SentrySwiftLog" + # tvOS 18 - name: tvOS 18 Sentry runs-on: macos-15 From fd73f1e2ce01cffe64d615ae482dbe0a094e3be9 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Tue, 30 Sep 2025 17:15:47 +0200 Subject: [PATCH 17/44] Update prepare-package.swift --- .github/actions/prepare-package.swift/action.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/actions/prepare-package.swift/action.yml b/.github/actions/prepare-package.swift/action.yml index 47ec387f6db..3489ae57b6f 100644 --- a/.github/actions/prepare-package.swift/action.yml +++ b/.github/actions/prepare-package.swift/action.yml @@ -43,9 +43,14 @@ runs: env: PACKAGE_FILE: ${{ inputs.package-file }} run: | - sed -i '' 's/url.*//g' $PACKAGE_FILE + # Remove Sentry binary framework URLs and convert checksums to paths + sed -i '' 's/url: "https:\/\/github\.com\/getsentry\/sentry-cocoa\/releases\/download\/.*"//g' $PACKAGE_FILE sed -i '' 's/checksum: ".*" \/\/Sentry-Static/path: "Sentry.xcframework.zip"/g' $PACKAGE_FILE sed -i '' 's/checksum: ".*" \/\/Sentry-Dynamic-WithARM64e/path: "Sentry-Dynamic-WithARM64e.xcframework.zip"/g' $PACKAGE_FILE sed -i '' 's/checksum: ".*" \/\/Sentry-Dynamic/path: "Sentry-Dynamic.xcframework.zip"/g' $PACKAGE_FILE sed -i '' 's/checksum: ".*" \/\/Sentry-WithoutUIKitOrAppKit-WithARM64e/path: "Sentry-WithoutUIKitOrAppKit-WithARM64e.xcframework.zip"/g' $PACKAGE_FILE sed -i '' 's/checksum: ".*" \/\/Sentry-WithoutUIKitOrAppKit/path: "Sentry-WithoutUIKitOrAppKit.xcframework.zip"/g' $PACKAGE_FILE + # Clean up orphaned commas and fix syntax + sed -i '' '/^[[:space:]]*,$/d' $PACKAGE_FILE + sed -i '' 's/name: "Sentry\(-.*\)\?"$/name: "Sentry\1",/g' $PACKAGE_FILE + sed -i '' 's/platforms: \[\.iOS(\.v11), \.macOS(\.v10_13), \.tvOS(\.v11), \.watchOS(\.v4)\]$/platforms: [.iOS(.v11), .macOS(.v10_13), .tvOS(.v11), .watchOS(.v4)],/g' $PACKAGE_FILE From fb07770c578cc267b44dd1d1b57b3e1fc69a4f36 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Wed, 1 Oct 2025 10:35:53 +0200 Subject: [PATCH 18/44] Add shared scheme --- .../xcschemes/SentrySwiftLog.xcscheme | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 Sentry.xcodeproj/xcshareddata/xcschemes/SentrySwiftLog.xcscheme diff --git a/Sentry.xcodeproj/xcshareddata/xcschemes/SentrySwiftLog.xcscheme b/Sentry.xcodeproj/xcshareddata/xcschemes/SentrySwiftLog.xcscheme new file mode 100644 index 00000000000..c428d6b3b0d --- /dev/null +++ b/Sentry.xcodeproj/xcshareddata/xcschemes/SentrySwiftLog.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 45c8ed84c1d36cbff4a6e690348879bb5a3f7cc7 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Wed, 1 Oct 2025 11:06:20 +0200 Subject: [PATCH 19/44] fix old target names --- Sentry.xcodeproj/project.pbxproj | 32 +++++++++---------- .../SentryLogHandlerTests.swift | 2 +- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Sentry.xcodeproj/project.pbxproj b/Sentry.xcodeproj/project.pbxproj index d2f2050650a..c6ae2fb8e05 100644 --- a/Sentry.xcodeproj/project.pbxproj +++ b/Sentry.xcodeproj/project.pbxproj @@ -7492,7 +7492,7 @@ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentry; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = auto; SKIP_INSTALL = YES; @@ -7597,7 +7597,7 @@ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentry; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = auto; SKIP_INSTALL = YES; @@ -7702,7 +7702,7 @@ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentry; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = auto; SKIP_INSTALL = YES; @@ -7800,7 +7800,7 @@ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentry; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = auto; SKIP_INSTALL = YES; @@ -7897,7 +7897,7 @@ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentry; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = auto; SKIP_INSTALL = YES; @@ -7994,7 +7994,7 @@ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentry; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = auto; SKIP_INSTALL = YES; @@ -8091,7 +8091,7 @@ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentry; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = auto; SKIP_INSTALL = YES; @@ -8188,7 +8188,7 @@ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentry; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = auto; SKIP_INSTALL = YES; @@ -8274,7 +8274,7 @@ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentryTests; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLogTests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = auto; STRING_CATALOG_GENERATE_SYMBOLS = NO; @@ -8356,7 +8356,7 @@ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentryTests; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLogTests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = auto; STRING_CATALOG_GENERATE_SYMBOLS = NO; @@ -8438,7 +8438,7 @@ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentryTests; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLogTests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = auto; STRING_CATALOG_GENERATE_SYMBOLS = NO; @@ -8513,7 +8513,7 @@ MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentryTests; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLogTests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = auto; STRING_CATALOG_GENERATE_SYMBOLS = NO; @@ -8587,7 +8587,7 @@ MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentryTests; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLogTests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = auto; STRING_CATALOG_GENERATE_SYMBOLS = NO; @@ -8661,7 +8661,7 @@ MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentryTests; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLogTests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = auto; STRING_CATALOG_GENERATE_SYMBOLS = NO; @@ -8735,7 +8735,7 @@ MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentryTests; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLogTests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = auto; STRING_CATALOG_GENERATE_SYMBOLS = NO; @@ -8809,7 +8809,7 @@ MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SwiftLogSentryTests; + PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLogTests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = auto; STRING_CATALOG_GENERATE_SYMBOLS = NO; diff --git a/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift b/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift index 300a099c1ff..543616f17ff 100644 --- a/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift +++ b/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift @@ -1,7 +1,7 @@ import Logging @_spi(Private) @testable import Sentry @_spi(Private) import SentryTestUtils -@_spi(Private) @testable import SwiftLogSentry +@_spi(Private) @testable import SentrySwiftLog import XCTest // swiftlint:disable cyclomatic_complexity From 0779263f98fad49c626c7072b3da2a5e62a2e985 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Wed, 1 Oct 2025 14:40:47 +0200 Subject: [PATCH 20/44] format --- Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift b/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift index 543616f17ff..6d33b595bd3 100644 --- a/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift +++ b/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift @@ -1,7 +1,7 @@ import Logging @_spi(Private) @testable import Sentry -@_spi(Private) import SentryTestUtils @_spi(Private) @testable import SentrySwiftLog +@_spi(Private) import SentryTestUtils import XCTest // swiftlint:disable cyclomatic_complexity From 4e20b6377f2d85b168aa21f73ddec76fc2bba7df Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Mon, 6 Oct 2025 11:05:15 +0200 Subject: [PATCH 21/44] Move example to iOS-Swift app --- Samples/iOS-Swift/iOS-Swift.yml | 1 + Samples/iOS-Swift/iOS-Swift/AppDelegate.swift | 16 +++++++++++++++- Samples/iOS15-SwiftUI/iOS15-SwiftUI/App.swift | 8 -------- .../iOS15-SwiftUI/ContentView.swift | 15 --------------- 4 files changed, 16 insertions(+), 24 deletions(-) diff --git a/Samples/iOS-Swift/iOS-Swift.yml b/Samples/iOS-Swift/iOS-Swift.yml index 1da8d04075f..cd5f6bc228c 100644 --- a/Samples/iOS-Swift/iOS-Swift.yml +++ b/Samples/iOS-Swift/iOS-Swift.yml @@ -33,6 +33,7 @@ targets: - target: iOS-SwiftClip - target: SentrySampleShared/SentrySampleShared - target: iOS-Swift-ShareExtension + - target: Sentry/SentrySwiftLog configFiles: Debug: iOS-Swift.xcconfig DebugV9: iOS-Swift.xcconfig diff --git a/Samples/iOS-Swift/iOS-Swift/AppDelegate.swift b/Samples/iOS-Swift/iOS-Swift/AppDelegate.swift index e377481492c..0ce237f3355 100644 --- a/Samples/iOS-Swift/iOS-Swift/AppDelegate.swift +++ b/Samples/iOS-Swift/iOS-Swift/AppDelegate.swift @@ -1,6 +1,9 @@ import SentrySampleShared import UIKit +import Logging +import SentrySwiftLog + @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { private var randomDistributionTimer: Timer? @@ -24,11 +27,22 @@ class AppDelegate: UIResponder, UIApplicationDelegate { SentrySDKWrapper.shared.startSentry() SampleAppDebugMenu.shared.display() - + if #available(iOS 15.0, *) { metricKit.receiveReports() } + // Use structured logs with swift-log + LoggingSystem.bootstrap { _ in + return SentryLogHandler(logLevel: .trace) + } + let logger = Logger(label: "io.sentry.iOS-Swift") + logger.trace( + "[iOS-Swift] didFinishLaunchingWithOptions", + metadata: ["foo": "bar"], + source: "iOS" + ) + return true } diff --git a/Samples/iOS15-SwiftUI/iOS15-SwiftUI/App.swift b/Samples/iOS15-SwiftUI/iOS15-SwiftUI/App.swift index 3a11d214f1a..3646b7fb59e 100644 --- a/Samples/iOS15-SwiftUI/iOS15-SwiftUI/App.swift +++ b/Samples/iOS15-SwiftUI/iOS15-SwiftUI/App.swift @@ -2,20 +2,12 @@ import Foundation import SentrySampleShared import SwiftUI -import Logging -import SentrySwiftLog - @main struct SwiftUIApp: App { @UIApplicationDelegateAdaptor private var appDelegate: MyAppDelegate init() { SentrySDKWrapper.shared.startSentry() - - // Use structured logs with swift-log - LoggingSystem.bootstrap { _ in - return SentryLogHandler(logLevel: .trace) - } } var body: some Scene { diff --git a/Samples/iOS15-SwiftUI/iOS15-SwiftUI/ContentView.swift b/Samples/iOS15-SwiftUI/iOS15-SwiftUI/ContentView.swift index b7030361d03..dfe1caa0a3b 100644 --- a/Samples/iOS15-SwiftUI/iOS15-SwiftUI/ContentView.swift +++ b/Samples/iOS15-SwiftUI/iOS15-SwiftUI/ContentView.swift @@ -1,8 +1,6 @@ import Sentry import SwiftUI -import Logging - struct ContentView: View { private func captureError() { @@ -10,16 +8,6 @@ struct ContentView: View { await captureErrorAsync() } } - - private func swiftLog() { - let logger = Logger(label: "io.sentry.iOS15-SwiftUI") - logger.trace( - "swift-log", - metadata: ["foo": "bar"], - source: "iOS" - ) - } - func captureErrorAsync() async { let error = NSError(domain: "SampleErrorDomain", code: 1, userInfo: [NSLocalizedDescriptionKey: "Object does not exist"]) SentrySDK.capture(error: error) @@ -30,9 +18,6 @@ struct ContentView: View { Button(action: captureError) { Text("Capture Error") } - Button(action: swiftLog) { - Text("swift-log") - } } } } From a607ccb97da1785701915ae001dd0efc10fc4ae5 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Mon, 6 Oct 2025 11:26:48 +0200 Subject: [PATCH 22/44] bump depolyment targets for senryswiftlog target --- Sentry.xcodeproj/project.pbxproj | 96 ++++++++++++++++---------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/Sentry.xcodeproj/project.pbxproj b/Sentry.xcodeproj/project.pbxproj index ae6e454d825..39faed2f8b9 100644 --- a/Sentry.xcodeproj/project.pbxproj +++ b/Sentry.xcodeproj/project.pbxproj @@ -7478,7 +7478,7 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "@executable_path/Frameworks", "@loader_path/Frameworks", @@ -7488,7 +7488,7 @@ "@loader_path/Frameworks", ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12; MARKETING_VERSION = 1.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; @@ -7511,7 +7511,7 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 13.0; + TVOS_DEPLOYMENT_TARGET = 15.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; WATCHOS_DEPLOYMENT_TARGET = 6.0; @@ -7583,7 +7583,7 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "@executable_path/Frameworks", "@loader_path/Frameworks", @@ -7593,7 +7593,7 @@ "@loader_path/Frameworks", ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12; MARKETING_VERSION = 1.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; @@ -7616,7 +7616,7 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 13.0; + TVOS_DEPLOYMENT_TARGET = 15.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; WATCHOS_DEPLOYMENT_TARGET = 6.0; @@ -7688,7 +7688,7 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "@executable_path/Frameworks", "@loader_path/Frameworks", @@ -7698,7 +7698,7 @@ "@loader_path/Frameworks", ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12; MARKETING_VERSION = 1.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; @@ -7721,7 +7721,7 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 13.0; + TVOS_DEPLOYMENT_TARGET = 15.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; WATCHOS_DEPLOYMENT_TARGET = 6.0; @@ -7787,7 +7787,7 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "@executable_path/Frameworks", "@loader_path/Frameworks", @@ -7797,7 +7797,7 @@ "@loader_path/Frameworks", ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12; MARKETING_VERSION = 1.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; @@ -7818,7 +7818,7 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 13.0; + TVOS_DEPLOYMENT_TARGET = 15.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; WATCHOS_DEPLOYMENT_TARGET = 6.0; @@ -7884,7 +7884,7 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "@executable_path/Frameworks", "@loader_path/Frameworks", @@ -7894,7 +7894,7 @@ "@loader_path/Frameworks", ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12; MARKETING_VERSION = 1.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; @@ -7915,7 +7915,7 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 13.0; + TVOS_DEPLOYMENT_TARGET = 15.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; WATCHOS_DEPLOYMENT_TARGET = 6.0; @@ -7981,7 +7981,7 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "@executable_path/Frameworks", "@loader_path/Frameworks", @@ -7991,7 +7991,7 @@ "@loader_path/Frameworks", ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12; MARKETING_VERSION = 1.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; @@ -8012,7 +8012,7 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 13.0; + TVOS_DEPLOYMENT_TARGET = 15.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; WATCHOS_DEPLOYMENT_TARGET = 6.0; @@ -8078,7 +8078,7 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "@executable_path/Frameworks", "@loader_path/Frameworks", @@ -8088,7 +8088,7 @@ "@loader_path/Frameworks", ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12; MARKETING_VERSION = 1.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; @@ -8109,7 +8109,7 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 13.0; + TVOS_DEPLOYMENT_TARGET = 15.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; WATCHOS_DEPLOYMENT_TARGET = 6.0; @@ -8175,7 +8175,7 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "@executable_path/Frameworks", "@loader_path/Frameworks", @@ -8185,7 +8185,7 @@ "@loader_path/Frameworks", ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12; MARKETING_VERSION = 1.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; @@ -8206,7 +8206,7 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 13.0; + TVOS_DEPLOYMENT_TARGET = 15.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; WATCHOS_DEPLOYMENT_TARGET = 6.0; @@ -8270,9 +8270,9 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12; MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; @@ -8290,7 +8290,7 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 13.0; + TVOS_DEPLOYMENT_TARGET = 15.0; WATCHOS_DEPLOYMENT_TARGET = 6.0; XROS_DEPLOYMENT_TARGET = 1.0; }; @@ -8352,9 +8352,9 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12; MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; @@ -8372,7 +8372,7 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 13.0; + TVOS_DEPLOYMENT_TARGET = 15.0; WATCHOS_DEPLOYMENT_TARGET = 6.0; XROS_DEPLOYMENT_TARGET = 1.0; }; @@ -8434,9 +8434,9 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12; MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; @@ -8454,7 +8454,7 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 13.0; + TVOS_DEPLOYMENT_TARGET = 15.0; WATCHOS_DEPLOYMENT_TARGET = 6.0; XROS_DEPLOYMENT_TARGET = 1.0; }; @@ -8510,9 +8510,9 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12; MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; @@ -8528,7 +8528,7 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 13.0; + TVOS_DEPLOYMENT_TARGET = 15.0; WATCHOS_DEPLOYMENT_TARGET = 6.0; XROS_DEPLOYMENT_TARGET = 1.0; }; @@ -8584,9 +8584,9 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12; MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; @@ -8602,7 +8602,7 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 13.0; + TVOS_DEPLOYMENT_TARGET = 15.0; WATCHOS_DEPLOYMENT_TARGET = 6.0; XROS_DEPLOYMENT_TARGET = 1.0; }; @@ -8658,9 +8658,9 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12; MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; @@ -8676,7 +8676,7 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 13.0; + TVOS_DEPLOYMENT_TARGET = 15.0; WATCHOS_DEPLOYMENT_TARGET = 6.0; XROS_DEPLOYMENT_TARGET = 1.0; }; @@ -8732,9 +8732,9 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12; MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; @@ -8750,7 +8750,7 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 13.0; + TVOS_DEPLOYMENT_TARGET = 15.0; WATCHOS_DEPLOYMENT_TARGET = 6.0; XROS_DEPLOYMENT_TARGET = 1.0; }; @@ -8806,9 +8806,9 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12; MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; @@ -8824,7 +8824,7 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 13.0; + TVOS_DEPLOYMENT_TARGET = 15.0; WATCHOS_DEPLOYMENT_TARGET = 6.0; XROS_DEPLOYMENT_TARGET = 1.0; }; From 3d57dc6f5ca5c4a8daf8ae88cf1ce73ff2835673 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Mon, 6 Oct 2025 11:30:13 +0200 Subject: [PATCH 23/44] add cl entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e47070b3f78..60e50df4c4d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ Removes deprecated user feedback API, this is replaced with the new feedback API (#5591) Removes `enablePerformanceV2` option and makes this the default. The app start duration will now finish when the first frame is drawn instead of when the OS posts the UIWindowDidBecomeVisibleNotification. (#6008) +Structured Logs: Move options out of experimental (#6359) ### Features From 6e50913e003121d0c53a3adbe118f208893050e5 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Wed, 22 Oct 2025 11:59:30 +0200 Subject: [PATCH 24/44] cleanup changelog --- CHANGELOG.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e54fa1c1aec..1bc792e0289 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,6 @@ ### Breaking Changes -Removes deprecated user feedback API, this is replaced with the new feedback API (#5591) -Removes `enablePerformanceV2` option and makes this the default. The app start duration will now finish when the first frame is drawn instead of when the OS posts the UIWindowDidBecomeVisibleNotification. (#6008) -Structured Logs: Move options out of experimental (#6359) - Moves `SentryEventDecoder` to SPI (#6365) - Makes `PreviewRedactOptions`, `SentryProfileOptions`, `SentryRedactViewHelper`, `SentryViewScreenshotOptions`, `SentryReplayOptions`, `SentryUserFeedbackConfiguration`, `SentryUserFeedbackFormConfiguration`, `SentryUserFeedbackThemeConfiguration`, `SentryUserFeedbackWidgetConfiguration`, `SentryFeedback`, and `SentryExperimentalOptions` `final` (#6365) - Removes Decodable conformances from the public API of model classes (#5691) @@ -21,8 +18,8 @@ Structured Logs: Move options out of experimental (#6359) ### Features - Add SentryDistribution as Swift Package Manager target (#6149) -- Add `SentrySwiftLog` Integration ([#6286](https://github.com/getsentry/sentry-cocoa/pull/6286)) - Add option `enablePropagateTraceparent` to support OTel/W3C trace propagation (#6356) +- Structured Logs: Add `SentrySwiftLog` Integration (#6286) ### Fixes From c9356f58fe8d3bf8d830d936a5027a7d1e4d9023 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Wed, 22 Oct 2025 14:47:25 +0200 Subject: [PATCH 25/44] disable automatic signing --- Sentry.xcodeproj/project.pbxproj | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/Sentry.xcodeproj/project.pbxproj b/Sentry.xcodeproj/project.pbxproj index 8e7a0b022ba..9103b834a1f 100644 --- a/Sentry.xcodeproj/project.pbxproj +++ b/Sentry.xcodeproj/project.pbxproj @@ -1211,6 +1211,13 @@ remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; remoteInfo = Sentry; }; + 92024B6E2EA90616009CC844 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6327C5CA1EB8A783004E799B /* Project object */; + proxyType = 1; + remoteGlobalIDString = D84DAD4C2B17428D003CF120; + remoteInfo = SentryTestUtilsDynamic; + }; 92815F9E2E85576B004576C3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 6327C5CA1EB8A783004E799B /* Project object */; @@ -1225,19 +1232,19 @@ remoteGlobalIDString = 92815F6F2E85467F004576C3; remoteInfo = SwiftLogSentry; }; - D4B339FB2EA7823000359F3A /* PBXContainerItemProxy */ = { + 92815FCF2E857776004576C3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 6327C5CA1EB8A783004E799B /* Project object */; proxyType = 1; - remoteGlobalIDString = D84DAD4C2B17428D003CF120; - remoteInfo = SentryTestUtilsDynamic; + remoteGlobalIDString = 8431F00929B284F200D8DC56; + remoteInfo = SentryTestUtils; }; - 92815FCF2E857776004576C3 /* PBXContainerItemProxy */ = { + D4B339FB2EA7823000359F3A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 6327C5CA1EB8A783004E799B /* Project object */; proxyType = 1; - remoteGlobalIDString = 8431F00929B284F200D8DC56; - remoteInfo = SentryTestUtils; + remoteGlobalIDString = D84DAD4C2B17428D003CF120; + remoteInfo = SentryTestUtilsDynamic; }; D4CBA2482DE06D0200581618 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -6751,7 +6758,7 @@ 92815FCD2E85770E004576C3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = D84DAD4C2B17428D003CF120 /* SentryTestUtilsDynamic */; - targetProxy = 92815FCC2E85770E004576C3 /* PBXContainerItemProxy */; + targetProxy = 92024B6E2EA90616009CC844 /* PBXContainerItemProxy */; }; 92815FD02E857776004576C3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -8190,11 +8197,11 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 97JCY7859U; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -8231,6 +8238,7 @@ MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = auto; SKIP_INSTALL = YES; STRING_CATALOG_GENERATE_SYMBOLS = YES; From 306301123c51751dff617d5b95f2ff9f5da8e0af Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Wed, 22 Oct 2025 15:09:30 +0200 Subject: [PATCH 26/44] remove auto code signing --- Sentry.xcodeproj/project.pbxproj | 99 +++++++++++++++++--------------- 1 file changed, 53 insertions(+), 46 deletions(-) diff --git a/Sentry.xcodeproj/project.pbxproj b/Sentry.xcodeproj/project.pbxproj index 9103b834a1f..856df27ed68 100644 --- a/Sentry.xcodeproj/project.pbxproj +++ b/Sentry.xcodeproj/project.pbxproj @@ -7591,11 +7591,11 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 97JCY7859U; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -7639,6 +7639,7 @@ ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = auto; SKIP_INSTALL = YES; STRING_CATALOG_GENERATE_SYMBOLS = YES; @@ -7696,11 +7697,11 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 97JCY7859U; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -7744,6 +7745,7 @@ ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = auto; SKIP_INSTALL = YES; STRING_CATALOG_GENERATE_SYMBOLS = YES; @@ -7801,11 +7803,11 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 97JCY7859U; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -7849,6 +7851,7 @@ ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = auto; SKIP_INSTALL = YES; STRING_CATALOG_GENERATE_SYMBOLS = YES; @@ -7906,11 +7909,11 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 97JCY7859U; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -7947,6 +7950,7 @@ MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = auto; SKIP_INSTALL = YES; STRING_CATALOG_GENERATE_SYMBOLS = YES; @@ -8003,11 +8007,11 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 97JCY7859U; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -8044,6 +8048,7 @@ MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = auto; SKIP_INSTALL = YES; STRING_CATALOG_GENERATE_SYMBOLS = YES; @@ -8100,11 +8105,11 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 97JCY7859U; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -8141,6 +8146,7 @@ MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = auto; SKIP_INSTALL = YES; STRING_CATALOG_GENERATE_SYMBOLS = YES; @@ -8295,11 +8301,11 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 97JCY7859U; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -8336,6 +8342,7 @@ MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = auto; SKIP_INSTALL = YES; STRING_CATALOG_GENERATE_SYMBOLS = YES; @@ -8390,11 +8397,11 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 97JCY7859U; + DEVELOPMENT_TEAM = ""; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -8422,6 +8429,7 @@ ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLogTests; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = auto; STRING_CATALOG_GENERATE_SYMBOLS = NO; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; @@ -8472,11 +8480,11 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 97JCY7859U; + DEVELOPMENT_TEAM = ""; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -8504,6 +8512,7 @@ ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLogTests; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = auto; STRING_CATALOG_GENERATE_SYMBOLS = NO; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; @@ -8554,11 +8563,11 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 97JCY7859U; + DEVELOPMENT_TEAM = ""; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -8586,6 +8595,7 @@ ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLogTests; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = auto; STRING_CATALOG_GENERATE_SYMBOLS = NO; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; @@ -8636,11 +8646,11 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 97JCY7859U; + DEVELOPMENT_TEAM = ""; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -8661,6 +8671,7 @@ MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLogTests; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = auto; STRING_CATALOG_GENERATE_SYMBOLS = NO; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; @@ -8710,11 +8721,11 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 97JCY7859U; + DEVELOPMENT_TEAM = ""; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -8735,6 +8746,7 @@ MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLogTests; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = auto; STRING_CATALOG_GENERATE_SYMBOLS = NO; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; @@ -8784,11 +8796,11 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 97JCY7859U; + DEVELOPMENT_TEAM = ""; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -8809,6 +8821,7 @@ MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLogTests; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = auto; STRING_CATALOG_GENERATE_SYMBOLS = NO; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; @@ -8858,11 +8871,11 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 97JCY7859U; + DEVELOPMENT_TEAM = ""; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -8883,6 +8896,7 @@ MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLogTests; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = auto; STRING_CATALOG_GENERATE_SYMBOLS = NO; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; @@ -8932,11 +8946,11 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 97JCY7859U; + DEVELOPMENT_TEAM = ""; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -8957,6 +8971,7 @@ MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLogTests; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = auto; STRING_CATALOG_GENERATE_SYMBOLS = NO; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; @@ -9568,8 +9583,7 @@ CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; @@ -9622,8 +9636,7 @@ CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; @@ -9676,8 +9689,7 @@ CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; @@ -9728,8 +9740,7 @@ CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; @@ -9780,8 +9791,7 @@ CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; @@ -9832,8 +9842,7 @@ CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; @@ -10056,8 +10065,7 @@ CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; @@ -10332,8 +10340,7 @@ CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; From d04e56ab7fdc9c93902db9a86c2a603e252aa2b2 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Tue, 4 Nov 2025 11:21:20 +0100 Subject: [PATCH 27/44] update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed27b09729d..580fba6bf11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,11 +38,11 @@ - Add SentryDistribution as Swift Package Manager target (#6149) - Moves SentryClient and SentryHub to be written in Swift (#6627) - Add option `enablePropagateTraceparent` to support OTel/W3C trace propagation (#6356) -- Structured Logs: Add `SentrySwiftLog` Integration (#6286) - Move `enableFileManagerSwizzling` from experimental options to top-level options (#6592). This option is still disabled by default and will be enabled in a future major release. - Move `enableDataSwizzling` from experimental options to top-level options (#6592). This option remains enabled by default. - Add `sentry.replay_id` attribute to logs ([#6515](https://github.com/getsentry/sentry-cocoa/pull/6515)) +- Structured Logs: Add `SentrySwiftLog` Integration (#6286) ### Fixes From dcefd41798491dd5033ce88d121070e552cd5161 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Tue, 4 Nov 2025 11:27:10 +0100 Subject: [PATCH 28/44] add comments to package and decisions --- Package.swift | 3 +++ develop-docs/DECISIONS.md | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/Package.swift b/Package.swift index 5c66f4e421a..b8145e90885 100644 --- a/Package.swift +++ b/Package.swift @@ -130,6 +130,9 @@ let package = Package( platforms: [.iOS(.v15), .macOS(.v12), .tvOS(.v15), .watchOS(.v8)], products: products, dependencies: [ + // SPM doesn't support peer-dependencies, so users are locked into our declared version. + // Using `from: "1.6.0"` covers 1.6.0 < 2.0.0, resolving minor versions automatically. + // See develop-docs/DECISIONS.md for discussion. .package(url: "https://github.com/apple/swift-log", from: "1.6.0") ], targets: targets, diff --git a/develop-docs/DECISIONS.md b/develop-docs/DECISIONS.md index d9f8b0d613b..db4ab097d3e 100644 --- a/develop-docs/DECISIONS.md +++ b/develop-docs/DECISIONS.md @@ -449,3 +449,10 @@ Date: October 28, 2025 Contributors: @philprime, @philipphofmann, @itaybre While we keep supporting iOS 16 in the v9 SDK, we will remove testing in iOS 16 due to flakiness when running on GitHub Actions simulators as the test runners keep timing out. + +## swift-log dependency version constraint + +Date: 04.11.2025 +Contributors: @philprime, @denrase + +SPM doesn't support peer-dependencies, so users will be locked into the swift-log version we declare. We use `from: "1.6.0"` which covers `1.6.0 < 2.0.0`, so future minor versions should be correctly resolved. As long as swift-log doesn't regularly change major versions, breaking API changes should be rare. We can always adjust the minimum supported version in future releases. From 8a49b9a87ece3c78352af5ca215265b28fdf7c1c Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Tue, 4 Nov 2025 14:27:37 +0100 Subject: [PATCH 29/44] fix threshold implementation --- Sentry.xcodeproj/project.pbxproj | 24 ++++ Sources/SentrySwiftLog/SentryLogHandler.swift | 5 + .../SentryLogHandlerTests.swift | 119 +++++++++++++++++- 3 files changed, 144 insertions(+), 4 deletions(-) diff --git a/Sentry.xcodeproj/project.pbxproj b/Sentry.xcodeproj/project.pbxproj index bf9e63d642f..bfc9e72fc60 100644 --- a/Sentry.xcodeproj/project.pbxproj +++ b/Sentry.xcodeproj/project.pbxproj @@ -8466,6 +8466,9 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; @@ -8549,6 +8552,9 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; @@ -8632,6 +8638,9 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; @@ -8715,6 +8724,9 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; @@ -8790,6 +8802,9 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; @@ -8865,6 +8880,9 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; @@ -8940,6 +8958,9 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; @@ -9015,6 +9036,9 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; diff --git a/Sources/SentrySwiftLog/SentryLogHandler.swift b/Sources/SentrySwiftLog/SentryLogHandler.swift index 83b0bef0b86..ed0f587dbf4 100644 --- a/Sources/SentrySwiftLog/SentryLogHandler.swift +++ b/Sources/SentrySwiftLog/SentryLogHandler.swift @@ -78,6 +78,11 @@ public struct SentryLogHandler: LogHandler { function: String, line: UInt ) { + // Filter out messages below the configured log level threshold + guard level >= self.logLevel else { + return + } + var attributes: [String: Any] = [:] attributes["sentry.origin"] = "auto.logging.swift-log" attributes["swift-log.level"] = level.rawValue diff --git a/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift b/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift index 6d33b595bd3..863871637d6 100644 --- a/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift +++ b/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift @@ -1,3 +1,4 @@ +internal import _SentryPrivate import Logging @_spi(Private) @testable import Sentry @_spi(Private) @testable import SentrySwiftLog @@ -95,6 +96,8 @@ final class SentryLogHandlerTests: XCTestCase { } func testLog_WithTraceLevel() { + // Set log level to trace to allow trace messages through + sut.logLevel = .trace sut.log(level: .trace, message: "Test trace message", metadata: nil, source: "test", file: "TestFile.swift", function: "testFunction", line: 1) assertLogCaptured( @@ -112,6 +115,8 @@ final class SentryLogHandlerTests: XCTestCase { } func testLog_WithDebugLevel() { + // Set log level to debug to allow debug messages through + sut.logLevel = .debug sut.log(level: .debug, message: "Test debug message", metadata: nil, source: "test", file: "TestFile.swift", function: "testFunction", line: 50) assertLogCaptured( @@ -365,12 +370,110 @@ final class SentryLogHandlerTests: XCTestCase { func testLogLevelConfiguration() { XCTAssertEqual(sut.logLevel, .info) + } + + func testLogLevelFiltering_InfoThreshold_FiltersTraceAndDebug() { + sut.logLevel = .info - sut.logLevel = .debug - XCTAssertEqual(sut.logLevel, .debug) + sut.log(level: .trace, message: "Trace message", metadata: nil, source: "test", file: "TestFile.swift", function: "testFunction", line: 1) + sut.log(level: .debug, message: "Debug message", metadata: nil, source: "test", file: "TestFile.swift", function: "testFunction", line: 2) + + assertNoLogsCaptured() + } + + func testLogLevelFiltering_InfoThreshold_CapturesInfo() { + sut.logLevel = .info + + sut.log(level: .info, message: "Info message", metadata: nil, source: "test", file: "TestFile.swift", function: "testFunction", line: 3) + + assertLogCaptured( + .info, + "Info message", + [ + "sentry.origin": SentryLog.Attribute(string: "auto.logging.swift-log"), + "swift-log.level": SentryLog.Attribute(string: "info"), + "swift-log.source": SentryLog.Attribute(string: "test"), + "swift-log.file": SentryLog.Attribute(string: "TestFile.swift"), + "swift-log.function": SentryLog.Attribute(string: "testFunction"), + "swift-log.line": SentryLog.Attribute(string: "3") + ] + ) + } + + func testLogLevelFiltering_InfoThreshold_CapturesNotice() { + sut.logLevel = .info + + sut.log(level: .notice, message: "Notice message", metadata: nil, source: "test", file: "TestFile.swift", function: "testFunction", line: 4) + + assertLogCaptured( + .info, + "Notice message", + [ + "sentry.origin": SentryLog.Attribute(string: "auto.logging.swift-log"), + "swift-log.level": SentryLog.Attribute(string: "notice"), + "swift-log.source": SentryLog.Attribute(string: "test"), + "swift-log.file": SentryLog.Attribute(string: "TestFile.swift"), + "swift-log.function": SentryLog.Attribute(string: "testFunction"), + "swift-log.line": SentryLog.Attribute(string: "4") + ] + ) + } + + func testLogLevelFiltering_InfoThreshold_CapturesWarning() { + sut.logLevel = .info + + sut.log(level: .warning, message: "Warning message", metadata: nil, source: "test", file: "TestFile.swift", function: "testFunction", line: 5) + + assertLogCaptured( + .warn, + "Warning message", + [ + "sentry.origin": SentryLog.Attribute(string: "auto.logging.swift-log"), + "swift-log.level": SentryLog.Attribute(string: "warning"), + "swift-log.source": SentryLog.Attribute(string: "test"), + "swift-log.file": SentryLog.Attribute(string: "TestFile.swift"), + "swift-log.function": SentryLog.Attribute(string: "testFunction"), + "swift-log.line": SentryLog.Attribute(string: "5") + ] + ) + } + + func testLogLevelFiltering_InfoThreshold_CapturesError() { + sut.logLevel = .info + + sut.log(level: .error, message: "Error message", metadata: nil, source: "test", file: "TestFile.swift", function: "testFunction", line: 6) + + assertLogCaptured( + .error, + "Error message", + [ + "sentry.origin": SentryLog.Attribute(string: "auto.logging.swift-log"), + "swift-log.level": SentryLog.Attribute(string: "error"), + "swift-log.source": SentryLog.Attribute(string: "test"), + "swift-log.file": SentryLog.Attribute(string: "TestFile.swift"), + "swift-log.function": SentryLog.Attribute(string: "testFunction"), + "swift-log.line": SentryLog.Attribute(string: "6") + ] + ) + } + + func testLogLevelFiltering_InfoThreshold_CapturesCritical() { + sut.logLevel = .info - sut.logLevel = .error - XCTAssertEqual(sut.logLevel, .error) + sut.log(level: .critical, message: "Critical message", metadata: nil, source: "test", file: "TestFile.swift", function: "testFunction", line: 7) + + assertLogCaptured( + .fatal, + "Critical message", + [ + "sentry.origin": SentryLog.Attribute(string: "auto.logging.swift-log"), + "swift-log.level": SentryLog.Attribute(string: "critical"), + "swift-log.source": SentryLog.Attribute(string: "test"), + "swift-log.file": SentryLog.Attribute(string: "TestFile.swift"), + "swift-log.function": SentryLog.Attribute(string: "testFunction"), + "swift-log.line": SentryLog.Attribute(string: "7") + ] + ) } func testMetadataSubscript() { @@ -385,6 +488,14 @@ final class SentryLogHandlerTests: XCTestCase { // MARK: - Helper Methods + private func assertNoLogsCaptured( + file: StaticString = #file, + line: UInt = #line + ) { + let logs = fixture.batcher.addInvocations.invocations + XCTAssertEqual(logs.count, 0, "Expected no logs to be captured", file: file, line: line) + } + private func assertLogCaptured( _ expectedLevel: SentryLog.Level, _ expectedBody: String, From efebbf55899f3d7143526b36485402506a4a88ed Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Tue, 4 Nov 2025 14:32:07 +0100 Subject: [PATCH 30/44] remove shared scheme (not needed for runnign tests after all) --- .../xcschemes/SentrySwiftLog.xcscheme | 80 ------------------- 1 file changed, 80 deletions(-) delete mode 100644 Sentry.xcodeproj/xcshareddata/xcschemes/SentrySwiftLog.xcscheme diff --git a/Sentry.xcodeproj/xcshareddata/xcschemes/SentrySwiftLog.xcscheme b/Sentry.xcodeproj/xcshareddata/xcschemes/SentrySwiftLog.xcscheme deleted file mode 100644 index c428d6b3b0d..00000000000 --- a/Sentry.xcodeproj/xcshareddata/xcschemes/SentrySwiftLog.xcscheme +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From c66cee2c45b6c110e09f2ac389553c670c26874b Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Tue, 4 Nov 2025 14:45:45 +0100 Subject: [PATCH 31/44] cleanup project file --- Sentry.xcodeproj/project.pbxproj | 656 +++++++------------------------ 1 file changed, 139 insertions(+), 517 deletions(-) diff --git a/Sentry.xcodeproj/project.pbxproj b/Sentry.xcodeproj/project.pbxproj index bfc9e72fc60..f08389b7447 100644 --- a/Sentry.xcodeproj/project.pbxproj +++ b/Sentry.xcodeproj/project.pbxproj @@ -717,18 +717,18 @@ 92235CAC2E15369900865983 /* SentryLogBatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92235CAB2E15369900865983 /* SentryLogBatcher.swift */; }; 92235CAE2E15549C00865983 /* SentryLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92235CAD2E15549C00865983 /* SentryLogger.swift */; }; 92235CB02E155B2600865983 /* SentryLoggerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92235CAF2E155B2600865983 /* SentryLoggerTests.swift */; }; + 9241AC1C2EBA38CC00E611ED /* SentrySwiftLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9241AC132EBA38CB00E611ED /* SentrySwiftLog.framework */; }; + 9241AC3C2EBA399100E611ED /* libSentryTestUtils.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8431F00A29B284F200D8DC56 /* libSentryTestUtils.a */; }; + 9241AC3F2EBA399500E611ED /* SentryTestUtilsDynamic.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D84DAD4D2B17428D003CF120 /* SentryTestUtilsDynamic.framework */; }; + 9241AC442EBA39A500E611ED /* SentrySwiftLog.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9241AC132EBA38CB00E611ED /* SentrySwiftLog.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 9241AC472EBA39C700E611ED /* Logging in Frameworks */ = {isa = PBXBuildFile; productRef = 9241AC462EBA39C700E611ED /* Logging */; }; + 9241AC4C2EBA39EE00E611ED /* SentryLogHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9241AC4A2EBA39EE00E611ED /* SentryLogHandler.swift */; }; + 9241AC4F2EBA3A0C00E611ED /* SentryLogHandlerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9241AC4D2EBA3A0C00E611ED /* SentryLogHandlerTests.swift */; }; 925824C22CB5897700C9B20B /* SentrySessionReplayIntegration-Hybrid.h in Headers */ = {isa = PBXBuildFile; fileRef = D80382BE2C09C6FD0090E048 /* SentrySessionReplayIntegration-Hybrid.h */; settings = {ATTRIBUTES = (Private, ); }; }; 9264E1EB2E2E385E00B077CF /* SentryLogMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9264E1EA2E2E385B00B077CF /* SentryLogMessage.swift */; }; 9264E1ED2E2E397C00B077CF /* SentryLogMessageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9264E1EC2E2E397400B077CF /* SentryLogMessageTests.swift */; }; 92672BB629C9A2A9006B021C /* SentryBreadcrumb+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 92672BB529C9A2A9006B021C /* SentryBreadcrumb+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; 927A5CC42DD7626B00B82404 /* SentryEnvelopeItemHeaderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 927A5CC32DD7626400B82404 /* SentryEnvelopeItemHeaderTests.swift */; }; - 92815F822E85468F004576C3 /* SentryLogHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 921AA7882E853C8800A8D034 /* SentryLogHandler.swift */; }; - 92815F9D2E854766004576C3 /* Logging in Frameworks */ = {isa = PBXBuildFile; productRef = 92815F9C2E854766004576C3 /* Logging */; }; - 92815FC62E857528004576C3 /* SentryLogHandlerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92815FC42E8574D5004576C3 /* SentryLogHandlerTests.swift */; }; - 92815FC72E8576AA004576C3 /* SentrySwiftLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92815F702E85467F004576C3 /* SentrySwiftLog.framework */; }; - 92815FC82E8576AA004576C3 /* SentrySwiftLog.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 92815F702E85467F004576C3 /* SentrySwiftLog.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 92815FCA2E85770E004576C3 /* SentryTestUtilsDynamic.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D84DAD4D2B17428D003CF120 /* SentryTestUtilsDynamic.framework */; }; - 92815FCE2E857776004576C3 /* libSentryTestUtils.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8431F00A29B284F200D8DC56 /* libSentryTestUtils.a */; }; 928207C42E251B8F009285A4 /* SentryScope+PrivateSwift.h in Headers */ = {isa = PBXBuildFile; fileRef = 928207C32E251B8F009285A4 /* SentryScope+PrivateSwift.h */; }; 9286059529A5096600F96038 /* SentryGeo.h in Headers */ = {isa = PBXBuildFile; fileRef = 9286059429A5096600F96038 /* SentryGeo.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9286059729A5098900F96038 /* SentryGeo.m in Sources */ = {isa = PBXBuildFile; fileRef = 9286059629A5098900F96038 /* SentryGeo.m */; }; @@ -1215,33 +1215,33 @@ remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; remoteInfo = Sentry; }; - 92024B6E2EA90616009CC844 /* PBXContainerItemProxy */ = { + 9241AC1D2EBA38CC00E611ED /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 6327C5CA1EB8A783004E799B /* Project object */; proxyType = 1; - remoteGlobalIDString = D84DAD4C2B17428D003CF120; - remoteInfo = SentryTestUtilsDynamic; + remoteGlobalIDString = 9241AC122EBA38CB00E611ED; + remoteInfo = SentrySwiftLog; }; - 92815F9E2E85576B004576C3 /* PBXContainerItemProxy */ = { + 9241AC3D2EBA399100E611ED /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 6327C5CA1EB8A783004E799B /* Project object */; proxyType = 1; - remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; - remoteInfo = Sentry; + remoteGlobalIDString = 8431F00929B284F200D8DC56; + remoteInfo = SentryTestUtils; }; - 92815FB92E857492004576C3 /* PBXContainerItemProxy */ = { + 9241AC412EBA399500E611ED /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 6327C5CA1EB8A783004E799B /* Project object */; proxyType = 1; - remoteGlobalIDString = 92815F6F2E85467F004576C3; - remoteInfo = SwiftLogSentry; + remoteGlobalIDString = D84DAD4C2B17428D003CF120; + remoteInfo = SentryTestUtilsDynamic; }; - 92815FCF2E857776004576C3 /* PBXContainerItemProxy */ = { + 9241AC482EBA39D600E611ED /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 6327C5CA1EB8A783004E799B /* Project object */; proxyType = 1; - remoteGlobalIDString = 8431F00929B284F200D8DC56; - remoteInfo = SentryTestUtils; + remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; + remoteInfo = Sentry; }; D4B339FB2EA7823000359F3A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -1281,13 +1281,13 @@ /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ - 92815FC92E8576AA004576C3 /* Embed Frameworks */ = { + 9241AC432EBA399500E611ED /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( - 92815FC82E8576AA004576C3 /* SentrySwiftLog.framework in Embed Frameworks */, + 9241AC442EBA39A500E611ED /* SentrySwiftLog.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -2125,17 +2125,17 @@ 8F73BC302B02B87E00C3CEF4 /* SentryInstallationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryInstallationTests.swift; sourceTree = ""; }; 8FF94DF22B06A24C00BCD650 /* SentryCrash+Test.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SentryCrash+Test.h"; sourceTree = ""; }; 92136D662C9D765D002A9FB8 /* SentryNSURLRequestBuilderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryNSURLRequestBuilderTests.swift; sourceTree = ""; }; - 921AA7882E853C8800A8D034 /* SentryLogHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryLogHandler.swift; sourceTree = ""; }; 92235CAB2E15369900865983 /* SentryLogBatcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryLogBatcher.swift; sourceTree = ""; }; 92235CAD2E15549C00865983 /* SentryLogger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryLogger.swift; sourceTree = ""; }; 92235CAF2E155B2600865983 /* SentryLoggerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryLoggerTests.swift; sourceTree = ""; }; + 9241AC132EBA38CB00E611ED /* SentrySwiftLog.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SentrySwiftLog.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9241AC1B2EBA38CC00E611ED /* SentrySwiftLogTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SentrySwiftLogTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 9241AC4A2EBA39EE00E611ED /* SentryLogHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryLogHandler.swift; sourceTree = ""; }; + 9241AC4D2EBA3A0C00E611ED /* SentryLogHandlerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryLogHandlerTests.swift; sourceTree = ""; }; 9264E1EA2E2E385B00B077CF /* SentryLogMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryLogMessage.swift; sourceTree = ""; }; 9264E1EC2E2E397400B077CF /* SentryLogMessageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryLogMessageTests.swift; sourceTree = ""; }; 92672BB529C9A2A9006B021C /* SentryBreadcrumb+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "SentryBreadcrumb+Private.h"; path = "include/HybridPublic/SentryBreadcrumb+Private.h"; sourceTree = ""; }; 927A5CC32DD7626400B82404 /* SentryEnvelopeItemHeaderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryEnvelopeItemHeaderTests.swift; sourceTree = ""; }; - 92815F702E85467F004576C3 /* SentrySwiftLog.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SentrySwiftLog.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 92815FB42E857492004576C3 /* SentrySwiftLogTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SentrySwiftLogTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 92815FC42E8574D5004576C3 /* SentryLogHandlerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryLogHandlerTests.swift; sourceTree = ""; }; 928207C32E251B8F009285A4 /* SentryScope+PrivateSwift.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "SentryScope+PrivateSwift.h"; path = "include/SentryScope+PrivateSwift.h"; sourceTree = ""; }; 9286059429A5096600F96038 /* SentryGeo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SentryGeo.h; path = Public/SentryGeo.h; sourceTree = ""; }; 9286059629A5098900F96038 /* SentryGeo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SentryGeo.m; sourceTree = ""; }; @@ -2626,21 +2626,21 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 92815F6D2E85467F004576C3 /* Frameworks */ = { + 9241AC102EBA38CB00E611ED /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 92815F9D2E854766004576C3 /* Logging in Frameworks */, + 9241AC472EBA39C700E611ED /* Logging in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 92815FB12E857492004576C3 /* Frameworks */ = { + 9241AC182EBA38CC00E611ED /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 92815FCE2E857776004576C3 /* libSentryTestUtils.a in Frameworks */, - 92815FCA2E85770E004576C3 /* SentryTestUtilsDynamic.framework in Frameworks */, - 92815FC72E8576AA004576C3 /* SentrySwiftLog.framework in Frameworks */, + 9241AC3C2EBA399100E611ED /* libSentryTestUtils.a in Frameworks */, + 9241AC3F2EBA399500E611ED /* SentryTestUtilsDynamic.framework in Frameworks */, + 9241AC1C2EBA38CC00E611ED /* SentrySwiftLog.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2941,8 +2941,8 @@ D84DAD4D2B17428D003CF120 /* SentryTestUtilsDynamic.framework */, D833D7342D1321C100961E7A /* SentrySwiftUITests.xctest */, D4CBA2432DE06D0200581618 /* SentryTestUtilsTests.xctest */, - 92815F702E85467F004576C3 /* SentrySwiftLog.framework */, - 92815FB42E857492004576C3 /* SentrySwiftLogTests.xctest */, + 9241AC132EBA38CB00E611ED /* SentrySwiftLog.framework */, + 9241AC1B2EBA38CC00E611ED /* SentrySwiftLogTests.xctest */, ); name = Products; sourceTree = ""; @@ -3073,7 +3073,7 @@ D800942328F82E8D005D3943 /* Swift */, 63FE6FB920DA4C1000CDBAE8 /* SentryCrash */, D8199DB329376ECC0074249E /* SentrySwiftUI */, - 921AA7892E853C8800A8D034 /* SentrySwiftLog */, + 9241AC4B2EBA39EE00E611ED /* SentrySwiftLog */, 63AA75A31EB8AFDF00D153DE /* Configuration */, D8B0542F2A7D35F10056BAF6 /* Resources */, ); @@ -3089,9 +3089,9 @@ 846D3F122E286ECF00D4E7E3 /* DuplicatedSDKTest */, 63AA75931EB8AEDB00D153DE /* SentryTests */, 8431EFDB29B27B3D00D8DC56 /* SentryProfilerTests */, + 9241AC4E2EBA3A0C00E611ED /* SentrySwiftLogTests */, D8F01DE32A125D7B008F4996 /* HybridSDKTest */, D833D60F2D1320DF00961E7A /* SentrySwiftUITests */, - 92815FAF2E85744E004576C3 /* SentrySwiftLogTests */, ); path = Tests; sourceTree = ""; @@ -4273,18 +4273,18 @@ name = Transaction; sourceTree = ""; }; - 921AA7892E853C8800A8D034 /* SentrySwiftLog */ = { + 9241AC4B2EBA39EE00E611ED /* SentrySwiftLog */ = { isa = PBXGroup; children = ( - 921AA7882E853C8800A8D034 /* SentryLogHandler.swift */, + 9241AC4A2EBA39EE00E611ED /* SentryLogHandler.swift */, ); path = SentrySwiftLog; sourceTree = ""; }; - 92815FAF2E85744E004576C3 /* SentrySwiftLogTests */ = { + 9241AC4E2EBA3A0C00E611ED /* SentrySwiftLogTests */ = { isa = PBXGroup; children = ( - 92815FC42E8574D5004576C3 /* SentryLogHandlerTests.swift */, + 9241AC4D2EBA3A0C00E611ED /* SentryLogHandlerTests.swift */, ); path = SentrySwiftLogTests; sourceTree = ""; @@ -5482,7 +5482,7 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 92815F6B2E85467F004576C3 /* Headers */ = { + 9241AC0E2EBA38CB00E611ED /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( @@ -5589,49 +5589,49 @@ productReference = 8431F00A29B284F200D8DC56 /* libSentryTestUtils.a */; productType = "com.apple.product-type.library.static"; }; - 92815F6F2E85467F004576C3 /* SentrySwiftLog */ = { + 9241AC122EBA38CB00E611ED /* SentrySwiftLog */ = { isa = PBXNativeTarget; - buildConfigurationList = 92815F812E854680004576C3 /* Build configuration list for PBXNativeTarget "SentrySwiftLog" */; + buildConfigurationList = 9241AC332EBA38CC00E611ED /* Build configuration list for PBXNativeTarget "SentrySwiftLog" */; buildPhases = ( - 92815F6B2E85467F004576C3 /* Headers */, - 92815F6C2E85467F004576C3 /* Sources */, - 92815F6D2E85467F004576C3 /* Frameworks */, - 92815F6E2E85467F004576C3 /* Resources */, + 9241AC0E2EBA38CB00E611ED /* Headers */, + 9241AC0F2EBA38CB00E611ED /* Sources */, + 9241AC102EBA38CB00E611ED /* Frameworks */, + 9241AC112EBA38CB00E611ED /* Resources */, ); buildRules = ( ); dependencies = ( - 92815F9F2E85576B004576C3 /* PBXTargetDependency */, + 9241AC492EBA39D600E611ED /* PBXTargetDependency */, ); name = SentrySwiftLog; packageProductDependencies = ( - 92815F9C2E854766004576C3 /* Logging */, + 9241AC462EBA39C700E611ED /* Logging */, ); - productName = SwiftLogSentry; - productReference = 92815F702E85467F004576C3 /* SentrySwiftLog.framework */; + productName = SentrySwiftLog; + productReference = 9241AC132EBA38CB00E611ED /* SentrySwiftLog.framework */; productType = "com.apple.product-type.framework"; }; - 92815FB32E857492004576C3 /* SentrySwiftLogTests */ = { + 9241AC1A2EBA38CC00E611ED /* SentrySwiftLogTests */ = { isa = PBXNativeTarget; - buildConfigurationList = 92815FBB2E857492004576C3 /* Build configuration list for PBXNativeTarget "SentrySwiftLogTests" */; + buildConfigurationList = 9241AC342EBA38CC00E611ED /* Build configuration list for PBXNativeTarget "SentrySwiftLogTests" */; buildPhases = ( - 92815FB02E857492004576C3 /* Sources */, - 92815FB12E857492004576C3 /* Frameworks */, - 92815FB22E857492004576C3 /* Resources */, - 92815FC92E8576AA004576C3 /* Embed Frameworks */, + 9241AC172EBA38CC00E611ED /* Sources */, + 9241AC182EBA38CC00E611ED /* Frameworks */, + 9241AC192EBA38CC00E611ED /* Resources */, + 9241AC432EBA399500E611ED /* Embed Frameworks */, ); buildRules = ( ); dependencies = ( - 92815FBA2E857492004576C3 /* PBXTargetDependency */, - 92815FCD2E85770E004576C3 /* PBXTargetDependency */, - 92815FD02E857776004576C3 /* PBXTargetDependency */, + 9241AC1E2EBA38CC00E611ED /* PBXTargetDependency */, + 9241AC3E2EBA399100E611ED /* PBXTargetDependency */, + 9241AC422EBA399500E611ED /* PBXTargetDependency */, ); name = SentrySwiftLogTests; packageProductDependencies = ( ); - productName = SwiftLogSentryTests; - productReference = 92815FB42E857492004576C3 /* SentrySwiftLogTests.xctest */; + productName = SentrySwiftLogTests; + productReference = 9241AC1B2EBA38CC00E611ED /* SentrySwiftLogTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; D4CBA2422DE06D0200581618 /* SentryTestUtilsTests */ = { @@ -5718,7 +5718,7 @@ 6327C5CA1EB8A783004E799B /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 2600; + LastSwiftUpdateCheck = 2610; LastUpgradeCheck = 1400; ORGANIZATIONNAME = Sentry; TargetAttributes = { @@ -5740,11 +5740,11 @@ DevelopmentTeam = 97JCY7859U; ProvisioningStyle = Manual; }; - 92815F6F2E85467F004576C3 = { - CreatedOnToolsVersion = 26.0.1; + 9241AC122EBA38CB00E611ED = { + CreatedOnToolsVersion = 26.1; }; - 92815FB32E857492004576C3 = { - CreatedOnToolsVersion = 26.0.1; + 9241AC1A2EBA38CC00E611ED = { + CreatedOnToolsVersion = 26.1; }; D4CBA2422DE06D0200581618 = { CreatedOnToolsVersion = 16.3; @@ -5767,7 +5767,7 @@ ); mainGroup = 6327C5C91EB8A783004E799B; packageReferences = ( - 92815F9B2E854766004576C3 /* XCRemoteSwiftPackageReference "swift-log" */, + 9241AC452EBA39C700E611ED /* XCRemoteSwiftPackageReference "swift-log" */, ); productRefGroup = 6327C5D41EB8A783004E799B /* Products */; projectDirPath = ""; @@ -5787,8 +5787,8 @@ D84DAD4C2B17428D003CF120 /* SentryTestUtilsDynamic */, D833D61E2D1321C100961E7A /* SentrySwiftUITests */, D4CBA2422DE06D0200581618 /* SentryTestUtilsTests */, - 92815F6F2E85467F004576C3 /* SentrySwiftLog */, - 92815FB32E857492004576C3 /* SentrySwiftLogTests */, + 9241AC122EBA38CB00E611ED /* SentrySwiftLog */, + 9241AC1A2EBA38CC00E611ED /* SentrySwiftLogTests */, ); }; /* End PBXProject section */ @@ -5857,14 +5857,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 92815F6E2E85467F004576C3 /* Resources */ = { + 9241AC112EBA38CB00E611ED /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 92815FB22E857492004576C3 /* Resources */ = { + 9241AC192EBA38CC00E611ED /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -6740,19 +6740,19 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 92815F6C2E85467F004576C3 /* Sources */ = { + 9241AC0F2EBA38CB00E611ED /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 92815F822E85468F004576C3 /* SentryLogHandler.swift in Sources */, + 9241AC4C2EBA39EE00E611ED /* SentryLogHandler.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 92815FB02E857492004576C3 /* Sources */ = { + 9241AC172EBA38CC00E611ED /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 92815FC62E857528004576C3 /* SentryLogHandlerTests.swift in Sources */, + 9241AC4F2EBA3A0C00E611ED /* SentryLogHandlerTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -6824,25 +6824,25 @@ target = 63AA759A1EB8AEF500D153DE /* Sentry */; targetProxy = 84B7FA3729B2860500AD93B1 /* PBXContainerItemProxy */; }; - 92815F9F2E85576B004576C3 /* PBXTargetDependency */ = { + 9241AC1E2EBA38CC00E611ED /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 63AA759A1EB8AEF500D153DE /* Sentry */; - targetProxy = 92815F9E2E85576B004576C3 /* PBXContainerItemProxy */; + target = 9241AC122EBA38CB00E611ED /* SentrySwiftLog */; + targetProxy = 9241AC1D2EBA38CC00E611ED /* PBXContainerItemProxy */; }; - 92815FBA2E857492004576C3 /* PBXTargetDependency */ = { + 9241AC3E2EBA399100E611ED /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 92815F6F2E85467F004576C3 /* SentrySwiftLog */; - targetProxy = 92815FB92E857492004576C3 /* PBXContainerItemProxy */; + target = 8431F00929B284F200D8DC56 /* SentryTestUtils */; + targetProxy = 9241AC3D2EBA399100E611ED /* PBXContainerItemProxy */; }; - 92815FCD2E85770E004576C3 /* PBXTargetDependency */ = { + 9241AC422EBA399500E611ED /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = D84DAD4C2B17428D003CF120 /* SentryTestUtilsDynamic */; - targetProxy = 92024B6E2EA90616009CC844 /* PBXContainerItemProxy */; + targetProxy = 9241AC412EBA399500E611ED /* PBXContainerItemProxy */; }; - 92815FD02E857776004576C3 /* PBXTargetDependency */ = { + 9241AC492EBA39D600E611ED /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 8431F00929B284F200D8DC56 /* SentryTestUtils */; - targetProxy = 92815FCF2E857776004576C3 /* PBXContainerItemProxy */; + target = 63AA759A1EB8AEF500D153DE /* Sentry */; + targetProxy = 9241AC482EBA39D600E611ED /* PBXContainerItemProxy */; }; D4B339FC2EA7823000359F3A /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -7625,7 +7625,7 @@ }; name = ReleaseWithoutUIKit; }; - 92815F742E854680004576C3 /* Debug */ = { + 9241AC222EBA38CC00E611ED /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; @@ -7660,6 +7660,9 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; @@ -7723,121 +7726,13 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 15.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; - WATCHOS_DEPLOYMENT_TARGET = 6.0; XROS_DEPLOYMENT_TARGET = 1.0; }; name = Debug; }; - 92815F752E854680004576C3 /* DebugV9 */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - BUILD_LIBRARY_FOR_DISTRIBUTION = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 12; - MARKETING_VERSION = 1.0; - MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; - MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = auto; - SKIP_INSTALL = YES; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; - SUPPORTS_MACCATALYST = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_INSTALL_MODULE = YES; - SWIFT_INSTALL_OBJC_HEADER = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 15.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - WATCHOS_DEPLOYMENT_TARGET = 6.0; - XROS_DEPLOYMENT_TARGET = 1.0; - }; - name = DebugV9; - }; - 92815F762E854680004576C3 /* DebugWithoutUIKit */ = { + 9241AC232EBA38CC00E611ED /* DebugWithoutUIKit */ = { isa = XCBuildConfiguration; buildSettings = { ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; @@ -7872,6 +7767,9 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; @@ -7935,15 +7833,13 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 15.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; - WATCHOS_DEPLOYMENT_TARGET = 6.0; XROS_DEPLOYMENT_TARGET = 1.0; }; name = DebugWithoutUIKit; }; - 92815F772E854680004576C3 /* Test */ = { + 9241AC242EBA38CC00E611ED /* Test */ = { isa = XCBuildConfiguration; buildSettings = { ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; @@ -8033,15 +7929,13 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 15.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; - WATCHOS_DEPLOYMENT_TARGET = 6.0; XROS_DEPLOYMENT_TARGET = 1.0; }; name = Test; }; - 92815F782E854680004576C3 /* TestCI */ = { + 9241AC252EBA38CC00E611ED /* TestCI */ = { isa = XCBuildConfiguration; buildSettings = { ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; @@ -8131,15 +8025,13 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 15.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; - WATCHOS_DEPLOYMENT_TARGET = 6.0; XROS_DEPLOYMENT_TARGET = 1.0; }; name = TestCI; }; - 92815F792E854680004576C3 /* Release */ = { + 9241AC262EBA38CC00E611ED /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; @@ -8229,113 +8121,13 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 15.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; - WATCHOS_DEPLOYMENT_TARGET = 6.0; XROS_DEPLOYMENT_TARGET = 1.0; }; name = Release; }; - 92815F7A2E854680004576C3 /* ReleaseV9 */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - BUILD_LIBRARY_FOR_DISTRIBUTION = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 12; - MARKETING_VERSION = 1.0; - MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; - MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = auto; - SKIP_INSTALL = YES; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; - SUPPORTS_MACCATALYST = YES; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_INSTALL_MODULE = YES; - SWIFT_INSTALL_OBJC_HEADER = NO; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 15.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - WATCHOS_DEPLOYMENT_TARGET = 6.0; - XROS_DEPLOYMENT_TARGET = 1.0; - }; - name = ReleaseV9; - }; - 92815F7B2E854680004576C3 /* ReleaseWithoutUIKit */ = { + 9241AC272EBA38CC00E611ED /* ReleaseWithoutUIKit */ = { isa = XCBuildConfiguration; buildSettings = { ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; @@ -8425,17 +8217,16 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 15.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; - WATCHOS_DEPLOYMENT_TARGET = 6.0; XROS_DEPLOYMENT_TARGET = 1.0; }; name = ReleaseWithoutUIKit; }; - 92815FBC2E857492004576C3 /* Debug */ = { + 9241AC282EBA38CC00E611ED /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; @@ -8513,101 +8304,14 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 15.0; - WATCHOS_DEPLOYMENT_TARGET = 6.0; XROS_DEPLOYMENT_TARGET = 1.0; }; name = Debug; }; - 92815FBD2E857492004576C3 /* DebugV9 */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_ALLOWED = NO; - CODE_SIGNING_REQUIRED = NO; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = ""; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 12; - MARKETING_VERSION = 1.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLogTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = auto; - STRING_CATALOG_GENERATE_SYMBOLS = NO; - SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; - SUPPORTS_MACCATALYST = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 15.0; - WATCHOS_DEPLOYMENT_TARGET = 6.0; - XROS_DEPLOYMENT_TARGET = 1.0; - }; - name = DebugV9; - }; - 92815FBE2E857492004576C3 /* DebugWithoutUIKit */ = { + 9241AC292EBA38CC00E611ED /* DebugWithoutUIKit */ = { isa = XCBuildConfiguration; buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; @@ -8685,15 +8389,14 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 15.0; - WATCHOS_DEPLOYMENT_TARGET = 6.0; XROS_DEPLOYMENT_TARGET = 1.0; }; name = DebugWithoutUIKit; }; - 92815FBF2E857492004576C3 /* Test */ = { + 9241AC2A2EBA38CC00E611ED /* Test */ = { isa = XCBuildConfiguration; buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; @@ -8763,15 +8466,14 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 15.0; - WATCHOS_DEPLOYMENT_TARGET = 6.0; XROS_DEPLOYMENT_TARGET = 1.0; }; name = Test; }; - 92815FC02E857492004576C3 /* TestCI */ = { + 9241AC2B2EBA38CC00E611ED /* TestCI */ = { isa = XCBuildConfiguration; buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; @@ -8841,15 +8543,14 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 15.0; - WATCHOS_DEPLOYMENT_TARGET = 6.0; XROS_DEPLOYMENT_TARGET = 1.0; }; name = TestCI; }; - 92815FC12E857492004576C3 /* Release */ = { + 9241AC2C2EBA38CC00E611ED /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; @@ -8919,93 +8620,14 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 15.0; - WATCHOS_DEPLOYMENT_TARGET = 6.0; XROS_DEPLOYMENT_TARGET = 1.0; }; name = Release; }; - 92815FC22E857492004576C3 /* ReleaseV9 */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_ALLOWED = NO; - CODE_SIGNING_REQUIRED = NO; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 12; - MARKETING_VERSION = 1.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLogTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = auto; - STRING_CATALOG_GENERATE_SYMBOLS = NO; - SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; - SUPPORTS_MACCATALYST = YES; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 15.0; - WATCHOS_DEPLOYMENT_TARGET = 6.0; - XROS_DEPLOYMENT_TARGET = 1.0; - }; - name = ReleaseV9; - }; - 92815FC32E857492004576C3 /* ReleaseWithoutUIKit */ = { + 9241AC2D2EBA38CC00E611ED /* ReleaseWithoutUIKit */ = { isa = XCBuildConfiguration; buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; @@ -9075,8 +8697,6 @@ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - TVOS_DEPLOYMENT_TARGET = 15.0; - WATCHOS_DEPLOYMENT_TARGET = 6.0; XROS_DEPLOYMENT_TARGET = 1.0; }; name = ReleaseWithoutUIKit; @@ -9674,7 +9294,8 @@ CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = ""; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; @@ -9727,7 +9348,8 @@ CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = ""; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; @@ -9780,7 +9402,8 @@ CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = ""; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; @@ -9831,7 +9454,8 @@ CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = ""; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; @@ -9882,7 +9506,8 @@ CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = ""; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; @@ -9933,7 +9558,8 @@ CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = ""; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; @@ -10038,32 +9664,28 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 92815F812E854680004576C3 /* Build configuration list for PBXNativeTarget "SentrySwiftLog" */ = { + 9241AC332EBA38CC00E611ED /* Build configuration list for PBXNativeTarget "SentrySwiftLog" */ = { isa = XCConfigurationList; buildConfigurations = ( - 92815F742E854680004576C3 /* Debug */, - 92815F752E854680004576C3 /* DebugV9 */, - 92815F762E854680004576C3 /* DebugWithoutUIKit */, - 92815F772E854680004576C3 /* Test */, - 92815F782E854680004576C3 /* TestCI */, - 92815F792E854680004576C3 /* Release */, - 92815F7A2E854680004576C3 /* ReleaseV9 */, - 92815F7B2E854680004576C3 /* ReleaseWithoutUIKit */, + 9241AC222EBA38CC00E611ED /* Debug */, + 9241AC232EBA38CC00E611ED /* DebugWithoutUIKit */, + 9241AC242EBA38CC00E611ED /* Test */, + 9241AC252EBA38CC00E611ED /* TestCI */, + 9241AC262EBA38CC00E611ED /* Release */, + 9241AC272EBA38CC00E611ED /* ReleaseWithoutUIKit */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 92815FBB2E857492004576C3 /* Build configuration list for PBXNativeTarget "SentrySwiftLogTests" */ = { + 9241AC342EBA38CC00E611ED /* Build configuration list for PBXNativeTarget "SentrySwiftLogTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 92815FBC2E857492004576C3 /* Debug */, - 92815FBD2E857492004576C3 /* DebugV9 */, - 92815FBE2E857492004576C3 /* DebugWithoutUIKit */, - 92815FBF2E857492004576C3 /* Test */, - 92815FC02E857492004576C3 /* TestCI */, - 92815FC12E857492004576C3 /* Release */, - 92815FC22E857492004576C3 /* ReleaseV9 */, - 92815FC32E857492004576C3 /* ReleaseWithoutUIKit */, + 9241AC282EBA38CC00E611ED /* Debug */, + 9241AC292EBA38CC00E611ED /* DebugWithoutUIKit */, + 9241AC2A2EBA38CC00E611ED /* Test */, + 9241AC2B2EBA38CC00E611ED /* TestCI */, + 9241AC2C2EBA38CC00E611ED /* Release */, + 9241AC2D2EBA38CC00E611ED /* ReleaseWithoutUIKit */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -10123,7 +9745,7 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ - 92815F9B2E854766004576C3 /* XCRemoteSwiftPackageReference "swift-log" */ = { + 9241AC452EBA39C700E611ED /* XCRemoteSwiftPackageReference "swift-log" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/apple/swift-log"; requirement = { @@ -10134,9 +9756,9 @@ /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ - 92815F9C2E854766004576C3 /* Logging */ = { + 9241AC462EBA39C700E611ED /* Logging */ = { isa = XCSwiftPackageProductDependency; - package = 92815F9B2E854766004576C3 /* XCRemoteSwiftPackageReference "swift-log" */; + package = 9241AC452EBA39C700E611ED /* XCRemoteSwiftPackageReference "swift-log" */; productName = Logging; }; /* End XCSwiftPackageProductDependency section */ From 234b64aba5730e19fab6a551b21cd90a41049479 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Tue, 4 Nov 2025 14:48:32 +0100 Subject: [PATCH 32/44] update test.yml --- .github/workflows/test.yml | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 11fc22f45f3..438b4b77467 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -330,15 +330,6 @@ jobs: device: "iPhone 15 Pro" scheme: "SentrySwiftUI" - # iOS 17 - - name: iOS 17 SentrySwiftLog - runs-on: macos-14 - platform: "iOS" - xcode: "15.4" - test-destination-os: "17.5" - device: "iPhone 15 Pro" - scheme: "SentrySwiftLog" - # tvOS 18 - name: tvOS 18 Sentry runs-on: macos-15 @@ -358,6 +349,16 @@ jobs: device: "Apple TV" scheme: "Sentry" + # iOS 17 - Use pre-installed iOS 17.5 runtime on macOS-14 with Xcode 15.4 + - name: iOS 17 SentrySwiftLog + runs-on: macos-14 + xcode: "15.4" + test-destination-os: "17.5" + platform: "iOS" + create_device: true + device: "iPhone 15 Pro" + scheme: "SentrySwiftLog" + steps: - uses: actions/checkout@v5 - run: ./scripts/ci-select-xcode.sh ${{matrix.xcode}} From b1bda95d6060ac6ec98c2ab7e5cb0174fee262b4 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Tue, 4 Nov 2025 15:24:02 +0100 Subject: [PATCH 33/44] =?UTF-8?q?fix=20=E2=80=9Ebloated=E2=80=9C=20pbxproj?= =?UTF-8?q?=20file=20by=20adding=20shared=20xcconfig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sentry.xcodeproj/project.pbxproj | 522 +----------------- Sources/Configuration/SentrySwiftLog.xcconfig | 25 + 2 files changed, 45 insertions(+), 502 deletions(-) create mode 100644 Sources/Configuration/SentrySwiftLog.xcconfig diff --git a/Sentry.xcodeproj/project.pbxproj b/Sentry.xcodeproj/project.pbxproj index f08389b7447..e79dcce6d71 100644 --- a/Sentry.xcodeproj/project.pbxproj +++ b/Sentry.xcodeproj/project.pbxproj @@ -717,12 +717,12 @@ 92235CAC2E15369900865983 /* SentryLogBatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92235CAB2E15369900865983 /* SentryLogBatcher.swift */; }; 92235CAE2E15549C00865983 /* SentryLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92235CAD2E15549C00865983 /* SentryLogger.swift */; }; 92235CB02E155B2600865983 /* SentryLoggerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92235CAF2E155B2600865983 /* SentryLoggerTests.swift */; }; + 92275AAA2EBA402D00F31AB9 /* Logging in Frameworks */ = {isa = PBXBuildFile; productRef = 92275AA92EBA402D00F31AB9 /* Logging */; }; + 92275AAB2EBA417700F31AB9 /* SentryLogHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9241AC4A2EBA39EE00E611ED /* SentryLogHandler.swift */; }; 9241AC1C2EBA38CC00E611ED /* SentrySwiftLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9241AC132EBA38CB00E611ED /* SentrySwiftLog.framework */; }; 9241AC3C2EBA399100E611ED /* libSentryTestUtils.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8431F00A29B284F200D8DC56 /* libSentryTestUtils.a */; }; 9241AC3F2EBA399500E611ED /* SentryTestUtilsDynamic.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D84DAD4D2B17428D003CF120 /* SentryTestUtilsDynamic.framework */; }; 9241AC442EBA39A500E611ED /* SentrySwiftLog.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9241AC132EBA38CB00E611ED /* SentrySwiftLog.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 9241AC472EBA39C700E611ED /* Logging in Frameworks */ = {isa = PBXBuildFile; productRef = 9241AC462EBA39C700E611ED /* Logging */; }; - 9241AC4C2EBA39EE00E611ED /* SentryLogHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9241AC4A2EBA39EE00E611ED /* SentryLogHandler.swift */; }; 9241AC4F2EBA3A0C00E611ED /* SentryLogHandlerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9241AC4D2EBA3A0C00E611ED /* SentryLogHandlerTests.swift */; }; 925824C22CB5897700C9B20B /* SentrySessionReplayIntegration-Hybrid.h in Headers */ = {isa = PBXBuildFile; fileRef = D80382BE2C09C6FD0090E048 /* SentrySessionReplayIntegration-Hybrid.h */; settings = {ATTRIBUTES = (Private, ); }; }; 9264E1EB2E2E385E00B077CF /* SentryLogMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9264E1EA2E2E385B00B077CF /* SentryLogMessage.swift */; }; @@ -2412,6 +2412,7 @@ D8F8F5562B835BC600AC5465 /* SentryMsgPackSerializerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SentryMsgPackSerializerTests.m; sourceTree = ""; }; D8FC98AA2CD0DAAC0009824C /* BreadcrumbExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BreadcrumbExtension.swift; sourceTree = ""; }; D8FFE50B2703DAAE00607131 /* SwizzlingCallTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwizzlingCallTests.swift; sourceTree = ""; }; + D92A1BCF2EBA3A0000E611ED /* SentrySwiftLog.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = SentrySwiftLog.xcconfig; sourceTree = ""; }; F40E42342EA1887000E53876 /* SentryFramesTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryFramesTracker.swift; sourceTree = ""; }; F40E423B2EA18E8000E53876 /* SentryDelayedFramesTrackerWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryDelayedFramesTrackerWrapper.swift; sourceTree = ""; }; F40E42FA2EAAAD4500E53876 /* PrivateSentrySDKOnlyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrivateSentrySDKOnlyTests.swift; sourceTree = ""; }; @@ -2630,7 +2631,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9241AC472EBA39C700E611ED /* Logging in Frameworks */, + 92275AAA2EBA402D00F31AB9 /* Logging in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3161,6 +3162,7 @@ 84EACEDF2C3DCAE2009B8753 /* DeploymentTargets.xcconfig */, 63AA75C51EB8B00100D153DE /* Sentry.xcconfig */, D8199DCF29376FF40074249E /* SentrySwiftUI.xcconfig */, + D92A1BCF2EBA3A0000E611ED /* SentrySwiftLog.xcconfig */, ); path = Configuration; sourceTree = ""; @@ -5605,7 +5607,7 @@ ); name = SentrySwiftLog; packageProductDependencies = ( - 9241AC462EBA39C700E611ED /* Logging */, + 92275AA92EBA402D00F31AB9 /* Logging */, ); productName = SentrySwiftLog; productReference = 9241AC132EBA38CB00E611ED /* SentrySwiftLog.framework */; @@ -6744,7 +6746,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9241AC4C2EBA39EE00E611ED /* SentryLogHandler.swift in Sources */, + 92275AAB2EBA417700F31AB9 /* SentryLogHandler.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -7627,599 +7629,115 @@ }; 9241AC222EBA38CC00E611ED /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D92A1BCF2EBA3A0000E611ED /* SentrySwiftLog.xcconfig */; buildSettings = { - ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - BUILD_LIBRARY_FOR_DISTRIBUTION = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_ALLOWED = NO; - CODE_SIGNING_REQUIRED = NO; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 12; - MARKETING_VERSION = 1.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = auto; - SKIP_INSTALL = YES; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; - SUPPORTS_MACCATALYST = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_INSTALL_MODULE = YES; SWIFT_INSTALL_OBJC_HEADER = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_SWIFT3_OBJC_INFERENCE = Off; SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - XROS_DEPLOYMENT_TARGET = 1.0; }; name = Debug; }; 9241AC232EBA38CC00E611ED /* DebugWithoutUIKit */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D92A1BCF2EBA3A0000E611ED /* SentrySwiftLog.xcconfig */; buildSettings = { - ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - BUILD_LIBRARY_FOR_DISTRIBUTION = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_ALLOWED = NO; - CODE_SIGNING_REQUIRED = NO; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 12; - MARKETING_VERSION = 1.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = auto; - SKIP_INSTALL = YES; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; - SUPPORTS_MACCATALYST = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_INSTALL_MODULE = YES; SWIFT_INSTALL_OBJC_HEADER = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_SWIFT3_OBJC_INFERENCE = Off; SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - XROS_DEPLOYMENT_TARGET = 1.0; }; name = DebugWithoutUIKit; }; 9241AC242EBA38CC00E611ED /* Test */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D92A1BCF2EBA3A0000E611ED /* SentrySwiftLog.xcconfig */; buildSettings = { - ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - BUILD_LIBRARY_FOR_DISTRIBUTION = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 12; - MARKETING_VERSION = 1.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = auto; - SKIP_INSTALL = YES; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; - SUPPORTS_MACCATALYST = YES; SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_INSTALL_MODULE = YES; SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_SWIFT3_OBJC_INFERENCE = Off; SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - XROS_DEPLOYMENT_TARGET = 1.0; }; name = Test; }; 9241AC252EBA38CC00E611ED /* TestCI */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D92A1BCF2EBA3A0000E611ED /* SentrySwiftLog.xcconfig */; buildSettings = { - ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - BUILD_LIBRARY_FOR_DISTRIBUTION = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 12; - MARKETING_VERSION = 1.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = auto; - SKIP_INSTALL = YES; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; - SUPPORTS_MACCATALYST = YES; SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_INSTALL_MODULE = YES; SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_SWIFT3_OBJC_INFERENCE = Off; SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - XROS_DEPLOYMENT_TARGET = 1.0; }; name = TestCI; }; 9241AC262EBA38CC00E611ED /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D92A1BCF2EBA3A0000E611ED /* SentrySwiftLog.xcconfig */; buildSettings = { - ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - BUILD_LIBRARY_FOR_DISTRIBUTION = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 12; - MARKETING_VERSION = 1.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = auto; - SKIP_INSTALL = YES; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; - SUPPORTS_MACCATALYST = YES; SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_INSTALL_MODULE = YES; SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_SWIFT3_OBJC_INFERENCE = Off; SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - XROS_DEPLOYMENT_TARGET = 1.0; }; name = Release; }; 9241AC272EBA38CC00E611ED /* ReleaseWithoutUIKit */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D92A1BCF2EBA3A0000E611ED /* SentrySwiftLog.xcconfig */; buildSettings = { - ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - BUILD_LIBRARY_FOR_DISTRIBUTION = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_STYLE = Manual; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Sentry. All rights reserved."; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 12; - MARKETING_VERSION = 1.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = io.sentry.SentrySwiftLog; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SDKROOT = auto; - SKIP_INSTALL = YES; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; - SUPPORTS_MACCATALYST = YES; SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_INSTALL_MODULE = YES; SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_SWIFT3_OBJC_INFERENCE = Off; SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,3,4,7"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - XROS_DEPLOYMENT_TARGET = 1.0; }; name = ReleaseWithoutUIKit; }; @@ -9756,7 +9274,7 @@ /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ - 9241AC462EBA39C700E611ED /* Logging */ = { + 92275AA92EBA402D00F31AB9 /* Logging */ = { isa = XCSwiftPackageProductDependency; package = 9241AC452EBA39C700E611ED /* XCRemoteSwiftPackageReference "swift-log" */; productName = Logging; diff --git a/Sources/Configuration/SentrySwiftLog.xcconfig b/Sources/Configuration/SentrySwiftLog.xcconfig new file mode 100644 index 00000000000..847b6262aeb --- /dev/null +++ b/Sources/Configuration/SentrySwiftLog.xcconfig @@ -0,0 +1,25 @@ +#include "SDK.xcconfig" + +PRODUCT_NAME = SentrySwiftLog + +MACOSX_DEPLOYMENT_TARGET = 12 +IPHONEOS_DEPLOYMENT_TARGET = 15.0 +WATCHOS_DEPLOYMENT_TARGET = 8.0 +TVOS_DEPLOYMENT_TARGET = 15.0 +MACH_O_TYPE = mh_dylib + +OTHER_LDFLAGS_DebugWithoutUIKit = -framework SentryWithoutUIKit +OTHER_LDFLAGS_ReleaseWithoutUIKit = -framework SentryWithoutUIKit +OTHER_LDFLAGS_Debug = -framework Sentry +OTHER_LDFLAGS_Test = -framework Sentry +OTHER_LDFLAGS_TestCI = -framework Sentry +OTHER_LDFLAGS_Release = -framework Sentry +OTHER_LDFLAGS = $(OTHER_LDFLAGS_$(CONFIGURATION)) +// Exclude arm64e because the external Logging SPM dependency doesn't support it +ARCHS = $(ARCHS_STANDARD) +ARCHS[sdk=*simulator] = $(ARCHS_STANDARD) + +CODE_SIGN_STYLE = Manual +DEVELOPMENT_TEAM = +CODE_SIGN_IDENTITY = +PROVISIONING_PROFILE_SPECIFIER = From 8b90e4f740a45052143a5b07d11b474b5aba9c6b Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Tue, 4 Nov 2025 15:25:36 +0100 Subject: [PATCH 34/44] udate --- Sources/Configuration/SentrySwiftLog.xcconfig | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Sources/Configuration/SentrySwiftLog.xcconfig b/Sources/Configuration/SentrySwiftLog.xcconfig index 847b6262aeb..f858ad3d6e6 100644 --- a/Sources/Configuration/SentrySwiftLog.xcconfig +++ b/Sources/Configuration/SentrySwiftLog.xcconfig @@ -1,6 +1,5 @@ -#include "SDK.xcconfig" - PRODUCT_NAME = SentrySwiftLog +CURRENT_PROJECT_VERSION = 8.57.1 MACOSX_DEPLOYMENT_TARGET = 12 IPHONEOS_DEPLOYMENT_TARGET = 15.0 @@ -15,7 +14,6 @@ OTHER_LDFLAGS_Test = -framework Sentry OTHER_LDFLAGS_TestCI = -framework Sentry OTHER_LDFLAGS_Release = -framework Sentry OTHER_LDFLAGS = $(OTHER_LDFLAGS_$(CONFIGURATION)) -// Exclude arm64e because the external Logging SPM dependency doesn't support it ARCHS = $(ARCHS_STANDARD) ARCHS[sdk=*simulator] = $(ARCHS_STANDARD) From de91c84c98cb7d534972fb38850d0088bcb91b35 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Wed, 5 Nov 2025 10:29:16 +0100 Subject: [PATCH 35/44] Set GENERATE_INFOPLIST_FILE for text.yaml to run --- .github/workflows/test.yml | 20 +++++++++---------- Sources/Configuration/SentrySwiftLog.xcconfig | 2 ++ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 438b4b77467..1929f89d2b2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -330,6 +330,16 @@ jobs: device: "iPhone 15 Pro" scheme: "SentrySwiftUI" + # iOS 17 - Use pre-installed iOS 17.5 runtime on macOS-14 with Xcode 15.4 + - name: iOS 17 SentrySwiftLog + runs-on: macos-14 + xcode: "15.4" + test-destination-os: "17.5" + platform: "iOS" + create_device: true + device: "iPhone 15 Pro" + scheme: "SentrySwiftLog" + # tvOS 18 - name: tvOS 18 Sentry runs-on: macos-15 @@ -349,16 +359,6 @@ jobs: device: "Apple TV" scheme: "Sentry" - # iOS 17 - Use pre-installed iOS 17.5 runtime on macOS-14 with Xcode 15.4 - - name: iOS 17 SentrySwiftLog - runs-on: macos-14 - xcode: "15.4" - test-destination-os: "17.5" - platform: "iOS" - create_device: true - device: "iPhone 15 Pro" - scheme: "SentrySwiftLog" - steps: - uses: actions/checkout@v5 - run: ./scripts/ci-select-xcode.sh ${{matrix.xcode}} diff --git a/Sources/Configuration/SentrySwiftLog.xcconfig b/Sources/Configuration/SentrySwiftLog.xcconfig index f858ad3d6e6..aaf87017393 100644 --- a/Sources/Configuration/SentrySwiftLog.xcconfig +++ b/Sources/Configuration/SentrySwiftLog.xcconfig @@ -1,6 +1,8 @@ PRODUCT_NAME = SentrySwiftLog CURRENT_PROJECT_VERSION = 8.57.1 +GENERATE_INFOPLIST_FILE = YES + MACOSX_DEPLOYMENT_TARGET = 12 IPHONEOS_DEPLOYMENT_TARGET = 15.0 WATCHOS_DEPLOYMENT_TARGET = 8.0 From 91af0b7a54d0c9d811072ec82dd28918cdee0fde Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Wed, 5 Nov 2025 11:04:29 +0100 Subject: [PATCH 36/44] add testplan --- Plans/SentrySwiftLog_Base.xctestplan | 24 ++++++ .../xcschemes/SentrySwiftLog.xcscheme | 85 +++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 Plans/SentrySwiftLog_Base.xctestplan create mode 100644 Sentry.xcodeproj/xcshareddata/xcschemes/SentrySwiftLog.xcscheme diff --git a/Plans/SentrySwiftLog_Base.xctestplan b/Plans/SentrySwiftLog_Base.xctestplan new file mode 100644 index 00000000000..a012f4b55e6 --- /dev/null +++ b/Plans/SentrySwiftLog_Base.xctestplan @@ -0,0 +1,24 @@ +{ + "configurations" : [ + { + "id" : "EBB4F92C-3CA9-47E0-8589-7934881F1E4B", + "name" : "Configuration 1", + "options" : { + + } + } + ], + "defaultOptions" : { + "codeCoverage" : true + }, + "testTargets" : [ + { + "target" : { + "containerPath" : "container:Sentry.xcodeproj", + "identifier" : "9241AC1A2EBA38CC00E611ED", + "name" : "SentrySwiftLogTests" + } + } + ], + "version" : 1 +} diff --git a/Sentry.xcodeproj/xcshareddata/xcschemes/SentrySwiftLog.xcscheme b/Sentry.xcodeproj/xcshareddata/xcschemes/SentrySwiftLog.xcscheme new file mode 100644 index 00000000000..6b6fac2bdd2 --- /dev/null +++ b/Sentry.xcodeproj/xcshareddata/xcschemes/SentrySwiftLog.xcscheme @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 9f33d01083c9ec8abaec60cc0ffef57d2a741013 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Wed, 5 Nov 2025 11:15:36 +0100 Subject: [PATCH 37/44] Enable AccessLevelOnImport --- Sentry.xcodeproj/project.pbxproj | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Sentry.xcodeproj/project.pbxproj b/Sentry.xcodeproj/project.pbxproj index afd37261139..555c9ce8af3 100644 --- a/Sentry.xcodeproj/project.pbxproj +++ b/Sentry.xcodeproj/project.pbxproj @@ -7820,6 +7820,7 @@ SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; SUPPORTS_MACCATALYST = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + OTHER_SWIFT_FLAGS = "-enable-experimental-feature AccessLevelOnImport"; SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -7905,6 +7906,7 @@ SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; SUPPORTS_MACCATALYST = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + OTHER_SWIFT_FLAGS = "-enable-experimental-feature AccessLevelOnImport"; SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -7982,6 +7984,7 @@ STRING_CATALOG_GENERATE_SYMBOLS = NO; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; SUPPORTS_MACCATALYST = YES; + OTHER_SWIFT_FLAGS = "-enable-experimental-feature AccessLevelOnImport"; SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_EMIT_LOC_STRINGS = NO; @@ -8059,6 +8062,7 @@ STRING_CATALOG_GENERATE_SYMBOLS = NO; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; SUPPORTS_MACCATALYST = YES; + OTHER_SWIFT_FLAGS = "-enable-experimental-feature AccessLevelOnImport"; SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_EMIT_LOC_STRINGS = NO; @@ -8136,6 +8140,7 @@ STRING_CATALOG_GENERATE_SYMBOLS = NO; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; SUPPORTS_MACCATALYST = YES; + OTHER_SWIFT_FLAGS = "-enable-experimental-feature AccessLevelOnImport"; SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_EMIT_LOC_STRINGS = NO; @@ -8213,6 +8218,7 @@ STRING_CATALOG_GENERATE_SYMBOLS = NO; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; SUPPORTS_MACCATALYST = YES; + OTHER_SWIFT_FLAGS = "-enable-experimental-feature AccessLevelOnImport"; SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_EMIT_LOC_STRINGS = NO; From 0814443ad21911d65a58342a65e69dd442e94fa9 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Wed, 5 Nov 2025 11:27:24 +0100 Subject: [PATCH 38/44] Add SENTRY_TEST and SENTRY_TEST_CI flags --- Sentry.xcodeproj/project.pbxproj | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Sentry.xcodeproj/project.pbxproj b/Sentry.xcodeproj/project.pbxproj index 555c9ce8af3..c5db3b9d6c3 100644 --- a/Sentry.xcodeproj/project.pbxproj +++ b/Sentry.xcodeproj/project.pbxproj @@ -7819,7 +7819,7 @@ STRING_CATALOG_GENERATE_SYMBOLS = NO; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; SUPPORTS_MACCATALYST = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG SENTRY_TEST $(inherited)"; OTHER_SWIFT_FLAGS = "-enable-experimental-feature AccessLevelOnImport"; SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_EMIT_LOC_STRINGS = NO; @@ -7905,7 +7905,7 @@ STRING_CATALOG_GENERATE_SYMBOLS = NO; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; SUPPORTS_MACCATALYST = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG SENTRY_TEST $(inherited)"; OTHER_SWIFT_FLAGS = "-enable-experimental-feature AccessLevelOnImport"; SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_EMIT_LOC_STRINGS = NO; @@ -7984,6 +7984,7 @@ STRING_CATALOG_GENERATE_SYMBOLS = NO; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; SUPPORTS_MACCATALYST = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) SENTRY_TEST"; OTHER_SWIFT_FLAGS = "-enable-experimental-feature AccessLevelOnImport"; SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_COMPILATION_MODE = wholemodule; @@ -8062,6 +8063,7 @@ STRING_CATALOG_GENERATE_SYMBOLS = NO; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx watchos watchsimulator xros xrsimulator"; SUPPORTS_MACCATALYST = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) SENTRY_TEST_CI"; OTHER_SWIFT_FLAGS = "-enable-experimental-feature AccessLevelOnImport"; SWIFT_APPROACHABLE_CONCURRENCY = YES; SWIFT_COMPILATION_MODE = wholemodule; From d24582cfeb84bb6556e9192bea34e7dbd6342fc2 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Wed, 5 Nov 2025 11:34:19 +0100 Subject: [PATCH 39/44] add SentrySwiftLog.xcconfig to versionbump --- Utils/VersionBump/main.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Utils/VersionBump/main.swift b/Utils/VersionBump/main.swift index 5a1924f802d..928c7f3e4f4 100644 --- a/Utils/VersionBump/main.swift +++ b/Utils/VersionBump/main.swift @@ -50,7 +50,8 @@ let files = [ let restrictFiles = [ "./Sources/Configuration/SDK.xcconfig", "./Sources/Configuration/Versioning.xcconfig", - "./Sources/Configuration/SentrySwiftUI.xcconfig" + "./Sources/Configuration/SentrySwiftUI.xcconfig", + "./Sources/Configuration/SentrySwiftLog.xcconfig" ] let args = CommandLine.arguments From c430869b1da8000c0e88f89ac1a74f4a4474d91c Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Wed, 5 Nov 2025 13:14:24 +0100 Subject: [PATCH 40/44] add tsts for missed lines (codecov) --- Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift b/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift index 863871637d6..3f9ad0babdc 100644 --- a/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift +++ b/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift @@ -61,6 +61,11 @@ final class SentryLogHandlerTests: XCTestCase { // MARK: - Basic Logging Tests + func testDefaultInit() { + let sut = SentryLogHandler(logLevel: .info) + XCTAssertNotNil(sut) // Init with SDK logger completes error free + } + func testLog_WithInfoLevel() { sut.log(level: .info, message: "Test info message", metadata: nil, source: "test", file: "TestFile.swift", function: "testFunction", line: 42) @@ -478,12 +483,15 @@ final class SentryLogHandlerTests: XCTestCase { func testMetadataSubscript() { XCTAssertNil(sut.metadata["test_key"]) + XCTAssertNil(sut[metadataKey: "test_key"]) sut.metadata["test_key"] = "test_value" XCTAssertEqual(sut.metadata["test_key"], .string("test_value")) + XCTAssertEqual(sut[metadataKey: "test_key"], .string("test_value")) sut.metadata["test_key"] = nil XCTAssertNil(sut.metadata["test_key"]) + XCTAssertNil(sut[metadataKey: "test_key"]) } // MARK: - Helper Methods From 95d02acd88032165ac9a2d336d7572be2dbc5f9f Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Wed, 5 Nov 2025 13:22:24 +0100 Subject: [PATCH 41/44] check if sdklogger is really used --- .../SentryLogHandlerTests.swift | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift b/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift index 3f9ad0babdc..d5fdebc1b2a 100644 --- a/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift +++ b/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift @@ -61,9 +61,31 @@ final class SentryLogHandlerTests: XCTestCase { // MARK: - Basic Logging Tests - func testDefaultInit() { + func testDefaultInit_UsesSDKLogger() throws { + let options = Options() + options.dsn = TestConstants.dsnAsString(username: "SentryLogHandlerTests") + options.enableLogs = true + let testClient = TestClient(options: options)! + let testHub = TestHub(client: testClient, andScope: Scope()) + + SentrySDKInternal.setStart(with: options) + SentrySDKInternal.setCurrentHub(testHub) + + // Create handler with default init (uses SentrySDK.logger) let sut = SentryLogHandler(logLevel: .info) - XCTAssertNotNil(sut) // Init with SDK logger completes error free + XCTAssertNotNil(sut) + + sut.log(level: .info, message: "Test message from default init", metadata: nil, source: "test", file: "TestFile.swift", function: "testDefaultInit", line: 1) + SentrySDK.flush(timeout: 0.25) + + let invocation = try XCTUnwrap(testClient.captureLogsDataInvocations.invocations.first) + let jsonObject = try XCTUnwrap(JSONSerialization.jsonObject(with: invocation.data) as? [String: Any]) + let items = try XCTUnwrap(jsonObject["items"] as? [[String: Any]]) + let item = try XCTUnwrap(items.first) + XCTAssertEqual(1, items.count) + XCTAssertEqual("Test message from default init", item["body"] as? String) + + SentrySDKInternal.close() } func testLog_WithInfoLevel() { From 93a45380ac22f1b7517ef9d0873a7b7e13a23d12 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Wed, 5 Nov 2025 13:37:09 +0100 Subject: [PATCH 42/44] test subscript setter --- Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift b/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift index d5fdebc1b2a..3af5830a305 100644 --- a/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift +++ b/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift @@ -509,11 +509,15 @@ final class SentryLogHandlerTests: XCTestCase { sut.metadata["test_key"] = "test_value" XCTAssertEqual(sut.metadata["test_key"], .string("test_value")) - XCTAssertEqual(sut[metadataKey: "test_key"], .string("test_value")) + + sut[metadataKey: "test_key_2"] = "test_value_2" + XCTAssertEqual(sut[metadataKey: "test_key_2"], .string("test_value_2")) sut.metadata["test_key"] = nil XCTAssertNil(sut.metadata["test_key"]) - XCTAssertNil(sut[metadataKey: "test_key"]) + + sut[metadataKey: "test_key_2"] = nil + XCTAssertNil(sut[metadataKey: "test_key_2"]) } // MARK: - Helper Methods From a94b3bd7dba551ce9377b8334dad9164f40082de Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Wed, 5 Nov 2025 13:37:38 +0100 Subject: [PATCH 43/44] use correct key --- Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift b/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift index 3af5830a305..06217668f22 100644 --- a/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift +++ b/Tests/SentrySwiftLogTests/SentryLogHandlerTests.swift @@ -505,7 +505,7 @@ final class SentryLogHandlerTests: XCTestCase { func testMetadataSubscript() { XCTAssertNil(sut.metadata["test_key"]) - XCTAssertNil(sut[metadataKey: "test_key"]) + XCTAssertNil(sut[metadataKey: "test_key_2"]) sut.metadata["test_key"] = "test_value" XCTAssertEqual(sut.metadata["test_key"], .string("test_value")) From 3c15f44294d1bb382ac4dcdbf45e6569792d4de8 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Wed, 5 Nov 2025 14:20:20 +0100 Subject: [PATCH 44/44] set product bundle id --- Sources/Configuration/SentrySwiftLog.xcconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/Sources/Configuration/SentrySwiftLog.xcconfig b/Sources/Configuration/SentrySwiftLog.xcconfig index aaf87017393..a1dfeb47c98 100644 --- a/Sources/Configuration/SentrySwiftLog.xcconfig +++ b/Sources/Configuration/SentrySwiftLog.xcconfig @@ -2,6 +2,7 @@ PRODUCT_NAME = SentrySwiftLog CURRENT_PROJECT_VERSION = 8.57.1 GENERATE_INFOPLIST_FILE = YES +PRODUCT_BUNDLE_IDENTIFIER = io.sentry.$(PRODUCT_NAME) MACOSX_DEPLOYMENT_TARGET = 12 IPHONEOS_DEPLOYMENT_TARGET = 15.0