From a72802e57300310689498cfa8ed4f6113cc1b3a0 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Thu, 25 Sep 2025 13:24:03 +0200 Subject: [PATCH 01/23] 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/23] 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/23] 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/23] 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/23] 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/23] 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/23] 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/23] 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/23] 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/23] 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/23] 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/23] 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/23] 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/23] 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/23] 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/23] 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/23] 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/23] 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/23] 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/23] 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/23] 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/23] 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/23] 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