diff --git a/CHANGELOG.md b/CHANGELOG.md index d33fb216b9e..22934486fc4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,9 @@ - Add SentryDistribution as Swift Package Manager target (#6149) - Add option `enablePropagateTraceparent` to support OTel/W3C trace propagation (#6356) +- Move `enableFileManagerSwizzling` from experimental options to top-level options (#6592). + This option is still disabled by default and will be enabled in a future major release. +- Move `enableDataSwizzling` from experimental options to top-level options (#6592). This option remains enabled by default. ### Fixes diff --git a/Samples/SentrySampleShared/SentrySampleShared/SentrySDKWrapper.swift b/Samples/SentrySampleShared/SentrySampleShared/SentrySDKWrapper.swift index 86bd929f51a..cf3704da187 100644 --- a/Samples/SentrySampleShared/SentrySampleShared/SentrySDKWrapper.swift +++ b/Samples/SentrySampleShared/SentrySampleShared/SentrySDKWrapper.swift @@ -161,7 +161,7 @@ public struct SentrySDKWrapper { options.enableLogs = true // Experimental features - options.experimental.enableFileManagerSwizzling = !SentrySDKOverrides.Other.disableFileManagerSwizzling.boolValue + options.enableFileManagerSwizzling = !SentrySDKOverrides.Other.disableFileManagerSwizzling.boolValue options.experimental.enableUnhandledCPPExceptionsV2 = true } diff --git a/Samples/iOS-ObjectiveC/iOS-ObjectiveC/AppDelegate.m b/Samples/iOS-ObjectiveC/iOS-ObjectiveC/AppDelegate.m index c6d1ea03e5b..c3b90611eb6 100644 --- a/Samples/iOS-ObjectiveC/iOS-ObjectiveC/AppDelegate.m +++ b/Samples/iOS-ObjectiveC/iOS-ObjectiveC/AppDelegate.m @@ -63,7 +63,7 @@ - (BOOL)application:(UIApplication *)application enableViewRendererV2:![args containsObject:@"--disable-view-renderer-v2"] enableFastViewRendering:![args containsObject:@"--disable-fast-view-rendering"]]; - options.experimental.enableFileManagerSwizzling + options.enableFileManagerSwizzling = ![args containsObject:@"--disable-filemanager-swizzling"]; options.initialScope = ^(SentryScope *scope) { diff --git a/Sources/Sentry/Public/SentryOptions.h b/Sources/Sentry/Public/SentryOptions.h index 8a6b1fed7f0..bfc38dd7e90 100644 --- a/Sources/Sentry/Public/SentryOptions.h +++ b/Sources/Sentry/Public/SentryOptions.h @@ -407,6 +407,20 @@ NS_SWIFT_NAME(Options) */ @property (nonatomic, assign) BOOL enableFileIOTracing; +/** + * When enabled, the SDK tracks performance for file IO reads and writes with NSData if auto + * performance tracking and enableSwizzling are enabled. + * @note The default is @c YES . + */ +@property (nonatomic, assign) BOOL enableDataSwizzling; + +/** + * When enabled, the SDK tracks performance for file IO operations with NSFileManager if auto + * performance tracking and enableSwizzling are enabled. + * @note The default is @c NO . + */ +@property (nonatomic, assign) BOOL enableFileManagerSwizzling; + /** * Indicates the percentage of the tracing data that is collected. * @discussion Specifying @c 0 or @c nil discards all trace data, @c 1.0 collects all trace data, diff --git a/Sources/Sentry/SentryNSDataSwizzling.m b/Sources/Sentry/SentryNSDataSwizzling.m index 15e6acd817d..ebd4a3ad855 100644 --- a/Sources/Sentry/SentryNSDataSwizzling.m +++ b/Sources/Sentry/SentryNSDataSwizzling.m @@ -30,7 +30,7 @@ - (void)startWithOptions:(SentryOptions *)options tracker:(SentryFileIOTracker * return; } - if (!options.experimental.enableDataSwizzling) { + if (!options.enableDataSwizzling) { SENTRY_LOG_DEBUG( @"Auto-tracking of NSData is disabled because enableDataSwizzling is false"); return; diff --git a/Sources/Sentry/SentryNSFileManagerSwizzling.m b/Sources/Sentry/SentryNSFileManagerSwizzling.m index e1224d6be44..fb6afc20715 100644 --- a/Sources/Sentry/SentryNSFileManagerSwizzling.m +++ b/Sources/Sentry/SentryNSFileManagerSwizzling.m @@ -31,7 +31,7 @@ - (void)startWithOptions:(SentryOptions *)options tracker:(SentryFileIOTracker * return; } - if (!options.experimental.enableFileManagerSwizzling) { + if (!options.enableFileManagerSwizzling) { SENTRY_LOG_DEBUG(@"Auto-tracking of NSFileManager is disabled because " @"enableFileManagerSwizzling is false"); return; diff --git a/Sources/Sentry/SentryOptions.m b/Sources/Sentry/SentryOptions.m index 9ae85f683b7..3cc73ae9a27 100644 --- a/Sources/Sentry/SentryOptions.m +++ b/Sources/Sentry/SentryOptions.m @@ -113,6 +113,8 @@ - (instancetype)init self.enablePropagateTraceparent = NO; self.enableNetworkTracking = YES; self.enableFileIOTracing = YES; + self.enableFileManagerSwizzling = NO; + self.enableDataSwizzling = YES; self.enableNetworkBreadcrumbs = YES; self.enableLogs = NO; self.tracesSampleRate = nil; diff --git a/Sources/Swift/Helper/SentryEnabledFeaturesBuilder.swift b/Sources/Swift/Helper/SentryEnabledFeaturesBuilder.swift index ff1a2c7b806..187c78ba097 100644 --- a/Sources/Swift/Helper/SentryEnabledFeaturesBuilder.swift +++ b/Sources/Swift/Helper/SentryEnabledFeaturesBuilder.swift @@ -36,10 +36,10 @@ import Foundation } #endif // (os(iOS) || os(tvOS)) && !SENTRY_NO_UIKIT - if options.experimental.enableDataSwizzling { + if options.enableDataSwizzling { features.append("dataSwizzling") } - if options.experimental.enableFileManagerSwizzling { + if options.enableFileManagerSwizzling { features.append("fileManagerSwizzling") } if options.experimental.enableUnhandledCPPExceptionsV2 { diff --git a/Sources/Swift/Integrations/Performance/IO/Data+SentryTracing.swift b/Sources/Swift/Integrations/Performance/IO/Data+SentryTracing.swift index c72a764bdf8..70c2defa9a5 100644 --- a/Sources/Swift/Integrations/Performance/IO/Data+SentryTracing.swift +++ b/Sources/Swift/Integrations/Performance/IO/Data+SentryTracing.swift @@ -13,7 +13,7 @@ public extension Data { /// /// - Important: Using this method with auto-instrumentation for file operations enabled can lead to duplicate spans on older operating system versions. /// It is recommended to use either automatic or manual instrumentation. You can disable automatic instrumentation by setting - /// `options.experimental.enableDataSwizzling` to `false` when initializing Sentry. + /// `options.enableDataSwizzling` to `false` when initializing Sentry. /// - Parameters: /// - url: The location on disk of the data to read. /// - options: The mask specifying the options to use when reading the data. For more information, see ``NSData.ReadingOptions``. @@ -44,7 +44,7 @@ public extension Data { /// /// - Important: Using this method with auto-instrumentation for file operations enabled can lead to duplicate spans on older operating system versions. /// It is recommended to use either automatic or manual instrumentation. You can disable automatic instrumentation by setting - /// `options.experimental.enableDataSwizzling` to `false` when initializing Sentry. + /// `options.enableDataSwizzling` to `false` when initializing Sentry. /// - Parameters: /// - url: The location to write the data into. /// - options: Options for writing the data. Default value is `[]`. diff --git a/Sources/Swift/Integrations/Performance/IO/FileManager+SentryTracing.swift b/Sources/Swift/Integrations/Performance/IO/FileManager+SentryTracing.swift index d4536497e7f..780dd9b9f06 100644 --- a/Sources/Swift/Integrations/Performance/IO/FileManager+SentryTracing.swift +++ b/Sources/Swift/Integrations/Performance/IO/FileManager+SentryTracing.swift @@ -14,7 +14,7 @@ public extension FileManager { /// /// - Important: Using this method with auto-instrumentation for file operations enabled can lead to duplicate spans on older operating system versions. /// It is recommended to use either automatic or manual instrumentation. You can disable automatic instrumentation by setting - /// `options.experimental.enableFileManagerSwizzling` to `false` when initializing Sentry. + /// `options.enableFileManagerSwizzling` to `false` when initializing Sentry. /// - Parameters: /// - path: The path for the new file. /// - data: A data object containing the contents of the new file. @@ -48,7 +48,7 @@ public extension FileManager { /// /// - Important: Using this method with auto-instrumentation for file operations enabled can lead to duplicate spans on older operating system versions. /// It is recommended to use either automatic or manual instrumentation. You can disable automatic instrumentation by setting - /// `options.experimental.enableFileManagerSwizzling` to `false` when initializing Sentry. + /// `options.enableFileManagerSwizzling` to `false` when initializing Sentry. /// - Parameter url: A file URL specifying the file or directory to remove. /// If the URL specifies a directory, the contents of that directory are recursively removed. /// - Note: See ``FileManager.removeItem(at:)`` for more information. @@ -73,7 +73,7 @@ public extension FileManager { /// /// - Important: Using this method with auto-instrumentation for file operations enabled can lead to duplicate spans on older operating system versions. /// It is recommended to use either automatic or manual instrumentation. You can disable automatic instrumentation by setting - /// `options.experimental.enableFileManagerSwizzling` to `false` when initializing Sentry. + /// `options.enableFileManagerSwizzling` to `false` when initializing Sentry. /// - Parameter path: A path string indicating the file or directory to remove. /// If the path specifies a directory, the contents of that directory are recursively removed. /// - Note: See ``FileManager.removeItem(atPath:)`` for more information. @@ -100,7 +100,7 @@ public extension FileManager { /// /// - Important: Using this method with auto-instrumentation for file operations enabled can lead to duplicate spans on older operating system versions. /// It is recommended to use either automatic or manual instrumentation. You can disable automatic instrumentation by setting - /// `options.experimental.enableFileManagerSwizzling` to `false` when initializing Sentry. + /// `options.enableFileManagerSwizzling` to `false` when initializing Sentry. /// - Parameters: /// - srcURL: The file URL that identifies the file you want to copy. /// The URL in this parameter must not be a file reference URL. @@ -128,7 +128,7 @@ public extension FileManager { /// /// - Important: Using this method with auto-instrumentation for file operations enabled can lead to duplicate spans on older operating system versions. /// It is recommended to use either automatic or manual instrumentation. You can disable automatic instrumentation by setting - /// `options.experimental.enableFileManagerSwizzling` to `false` when initializing Sentry. + /// `options.enableFileManagerSwizzling` to `false` when initializing Sentry. /// - Parameters: /// - srcPath: The path to the file or directory you want to move. /// - dstPath: The path at which to place the copy of `srcPath`. @@ -155,7 +155,7 @@ public extension FileManager { /// /// - Important: Using this method with auto-instrumentation for file operations enabled can lead to duplicate spans on older operating system versions. /// It is recommended to use either automatic or manual instrumentation. You can disable automatic instrumentation by setting - /// `options.experimental.enableFileManagerSwizzling` to `false` when initializing Sentry. + /// `options.enableFileManagerSwizzling` to `false` when initializing Sentry. /// - Parameters: /// - srcURL: The file URL that identifies the file or directory you want to move. /// The URL in this parameter must not be a file reference URL. @@ -188,7 +188,7 @@ public extension FileManager { /// /// - Important: Using this method with auto-instrumentation for file operations enabled can lead to duplicate spans on older operating system versions. /// It is recommended to use either automatic or manual instrumentation. You can disable automatic instrumentation by setting - /// `options.experimental.enableFileManagerSwizzling` to `false` when initializing Sentry. + /// `options.enableFileManagerSwizzling` to `false` when initializing Sentry. /// - Parameters: /// - srcPath: The path to the file or directory you want to move. /// - dstPath: The new path for the item in `srcPath`. diff --git a/Sources/Swift/SentryExperimentalOptions.swift b/Sources/Swift/SentryExperimentalOptions.swift index dccb6879c0c..a0d666479bf 100644 --- a/Sources/Swift/SentryExperimentalOptions.swift +++ b/Sources/Swift/SentryExperimentalOptions.swift @@ -2,25 +2,6 @@ import Foundation @objcMembers public final class SentryExperimentalOptions: NSObject { - /** - * Enables swizzling of`NSData` to automatically track file operations. - * - * - Note: Swizzling is enabled by setting ``SentryOptions.enableSwizzling`` to `true`. - * This option allows you to disable swizzling for `NSData` only, while keeping swizzling enabled for other classes. - * This is useful if you want to use manual tracing for file operations. - */ - public var enableDataSwizzling = true - - /** - * Enables swizzling of`NSFileManager` to automatically track file operations. - * - * - Note: Swizzling is enabled by setting ``SentryOptions.enableSwizzling`` to `true`. - * This option allows you to disable swizzling for `NSFileManager` only, while keeping swizzling enabled for other classes. - * This is useful if you want to use manual tracing for file operations. - * - Experiment: This is an experimental feature and is therefore disabled by default. We'll enable it by default in a future release. - */ - public var enableFileManagerSwizzling = false - /** * A more reliable way to report unhandled C++ exceptions. * diff --git a/Tests/SentryTests/Helper/SentryEnabledFeaturesBuilderTests.swift b/Tests/SentryTests/Helper/SentryEnabledFeaturesBuilderTests.swift index 0ba55ac90ea..906a4380bc2 100644 --- a/Tests/SentryTests/Helper/SentryEnabledFeaturesBuilderTests.swift +++ b/Tests/SentryTests/Helper/SentryEnabledFeaturesBuilderTests.swift @@ -127,7 +127,7 @@ final class SentryEnabledFeaturesBuilderTests: XCTestCase { // -- Arrange -- let options = Options() - options.experimental.enableDataSwizzling = true + options.enableDataSwizzling = true // -- Act -- let features = SentryEnabledFeaturesBuilder.getEnabledFeatures(options: options) @@ -140,7 +140,7 @@ final class SentryEnabledFeaturesBuilderTests: XCTestCase { // -- Arrange -- let options = Options() - options.experimental.enableDataSwizzling = false + options.enableDataSwizzling = false // -- Act -- let features = SentryEnabledFeaturesBuilder.getEnabledFeatures(options: options) @@ -153,7 +153,7 @@ final class SentryEnabledFeaturesBuilderTests: XCTestCase { // -- Arrange -- let options = Options() - options.experimental.enableFileManagerSwizzling = true + options.enableFileManagerSwizzling = true // -- Act -- let features = SentryEnabledFeaturesBuilder.getEnabledFeatures(options: options) @@ -166,7 +166,7 @@ final class SentryEnabledFeaturesBuilderTests: XCTestCase { // -- Arrange -- let options = Options() - options.experimental.enableFileManagerSwizzling = false + options.enableFileManagerSwizzling = false // -- Act -- let features = SentryEnabledFeaturesBuilder.getEnabledFeatures(options: options) diff --git a/Tests/SentryTests/Integrations/Performance/IO/DataSentryTracingIntegrationTests.swift b/Tests/SentryTests/Integrations/Performance/IO/DataSentryTracingIntegrationTests.swift index 3e5f1478df9..52e1101f86b 100644 --- a/Tests/SentryTests/Integrations/Performance/IO/DataSentryTracingIntegrationTests.swift +++ b/Tests/SentryTests/Integrations/Performance/IO/DataSentryTracingIntegrationTests.swift @@ -44,8 +44,8 @@ class DataSentryTracingIntegrationTests: XCTestCase { // NOTE: We are not testing for the case where swizzling is enabled, as it could lead to duplicate spans on older OS versions. // Instead we are recommending to disable swizzling and use manual tracing. options.enableSwizzling = true - options.experimental.enableDataSwizzling = false - options.experimental.enableFileManagerSwizzling = false + options.enableDataSwizzling = false + options.enableFileManagerSwizzling = false } // The base path is not unique for the DSN, therefore we need to make it unique diff --git a/Tests/SentryTests/Integrations/Performance/IO/FileManagerTracingIntegrationTests.swift b/Tests/SentryTests/Integrations/Performance/IO/FileManagerTracingIntegrationTests.swift index 198c152b5f5..3073e671e60 100644 --- a/Tests/SentryTests/Integrations/Performance/IO/FileManagerTracingIntegrationTests.swift +++ b/Tests/SentryTests/Integrations/Performance/IO/FileManagerTracingIntegrationTests.swift @@ -47,8 +47,8 @@ class FileManagerSentryTracingIntegrationTests: XCTestCase { // NOTE: We are not testing for the case where swizzling is enabled, as it could lead to duplicate spans on older OS versions. // Instead we are recommending to disable swizzling and use manual tracing. options.enableSwizzling = true - options.experimental.enableDataSwizzling = false - options.experimental.enableFileManagerSwizzling = false + options.enableDataSwizzling = false + options.enableFileManagerSwizzling = false } // Get the working directory of the SDK, as the path is using the DSN hash to avoid conflicts diff --git a/Tests/SentryTests/Integrations/Performance/IO/SentryFileIOTrackingIntegrationObjCTests.m b/Tests/SentryTests/Integrations/Performance/IO/SentryFileIOTrackingIntegrationObjCTests.m index 25167024433..5270a631d9e 100644 --- a/Tests/SentryTests/Integrations/Performance/IO/SentryFileIOTrackingIntegrationObjCTests.m +++ b/Tests/SentryTests/Integrations/Performance/IO/SentryFileIOTrackingIntegrationObjCTests.m @@ -55,7 +55,7 @@ - (void)setUp options.enableFileIOTracing = YES; options.tracesSampleRate = @1; - options.experimental.enableFileManagerSwizzling = YES; + options.enableFileManagerSwizzling = YES; }]; } diff --git a/Tests/SentryTests/Integrations/Performance/IO/SentryFileIOTrackingIntegrationTests.swift b/Tests/SentryTests/Integrations/Performance/IO/SentryFileIOTrackingIntegrationTests.swift index 2371f84860e..08f90aca150 100644 --- a/Tests/SentryTests/Integrations/Performance/IO/SentryFileIOTrackingIntegrationTests.swift +++ b/Tests/SentryTests/Integrations/Performance/IO/SentryFileIOTrackingIntegrationTests.swift @@ -18,8 +18,8 @@ class SentryFileIOTrackingIntegrationTests: XCTestCase { result.enableFileIOTracing = enableFileIOTracing result.enableSwizzling = enableSwizzling result.tracesSampleRate = tracesSampleRate - result.experimental.enableDataSwizzling = enableDataSwizzling - result.experimental.enableFileManagerSwizzling = enableFileManagerSwizzling + result.enableDataSwizzling = enableDataSwizzling + result.enableFileManagerSwizzling = enableFileManagerSwizzling return result } diff --git a/Tests/SentryTests/Integrations/Performance/IO/SentryNSFileManagerSwizzlingTests.m b/Tests/SentryTests/Integrations/Performance/IO/SentryNSFileManagerSwizzlingTests.m index 33b9e51bd74..5e4d25bf265 100644 --- a/Tests/SentryTests/Integrations/Performance/IO/SentryNSFileManagerSwizzlingTests.m +++ b/Tests/SentryTests/Integrations/Performance/IO/SentryNSFileManagerSwizzlingTests.m @@ -54,7 +54,7 @@ - (void)setUp - (void)setUpNSFileManagerSwizzlingWithEnabledFlag:(bool)enableFileManagerSwizzling { SentryOptions *options = [[SentryOptions alloc] init]; - options.experimental.enableFileManagerSwizzling = enableFileManagerSwizzling; + options.enableFileManagerSwizzling = enableFileManagerSwizzling; SentryThreadInspector *threadInspector = [[SentryThreadInspector alloc] initWithOptions:options]; diff --git a/sdk_api.json b/sdk_api.json index 045ce4df921..631d1437e9f 100644 --- a/sdk_api.json +++ b/sdk_api.json @@ -18742,6 +18742,172 @@ } ] }, + { + "kind": "Var", + "name": "enableDataSwizzling", + "printedName": "enableDataSwizzling", + "children": [ + { + "kind": "TypeNominal", + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" + } + ], + "declKind": "Var", + "usr": "c:objc(cs)SentryOptions(py)enableDataSwizzling", + "moduleName": "Sentry", + "isOpen": true, + "objc_name": "enableDataSwizzling", + "declAttributes": [ + "ObjC", + "Dynamic" + ], + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" + } + ], + "declKind": "Accessor", + "usr": "c:objc(cs)SentryOptions(im)enableDataSwizzling", + "moduleName": "Sentry", + "isOpen": true, + "objc_name": "enableDataSwizzling", + "declAttributes": [ + "DiscardableResult", + "ObjC", + "Dynamic" + ], + "accessorKind": "get" + }, + { + "kind": "Accessor", + "name": "Set", + "printedName": "Set()", + "children": [ + { + "kind": "TypeNameAlias", + "name": "Void", + "printedName": "Swift.Void", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + } + ] + }, + { + "kind": "TypeNominal", + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" + } + ], + "declKind": "Accessor", + "usr": "c:objc(cs)SentryOptions(im)setEnableDataSwizzling:", + "moduleName": "Sentry", + "isOpen": true, + "objc_name": "setEnableDataSwizzling:", + "declAttributes": [ + "ObjC", + "Dynamic" + ], + "accessorKind": "set" + } + ] + }, + { + "kind": "Var", + "name": "enableFileManagerSwizzling", + "printedName": "enableFileManagerSwizzling", + "children": [ + { + "kind": "TypeNominal", + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" + } + ], + "declKind": "Var", + "usr": "c:objc(cs)SentryOptions(py)enableFileManagerSwizzling", + "moduleName": "Sentry", + "isOpen": true, + "objc_name": "enableFileManagerSwizzling", + "declAttributes": [ + "ObjC", + "Dynamic" + ], + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" + } + ], + "declKind": "Accessor", + "usr": "c:objc(cs)SentryOptions(im)enableFileManagerSwizzling", + "moduleName": "Sentry", + "isOpen": true, + "objc_name": "enableFileManagerSwizzling", + "declAttributes": [ + "DiscardableResult", + "ObjC", + "Dynamic" + ], + "accessorKind": "get" + }, + { + "kind": "Accessor", + "name": "Set", + "printedName": "Set()", + "children": [ + { + "kind": "TypeNameAlias", + "name": "Void", + "printedName": "Swift.Void", + "children": [ + { + "kind": "TypeNominal", + "name": "Void", + "printedName": "()" + } + ] + }, + { + "kind": "TypeNominal", + "name": "Bool", + "printedName": "Swift.Bool", + "usr": "s:Sb" + } + ], + "declKind": "Accessor", + "usr": "c:objc(cs)SentryOptions(im)setEnableFileManagerSwizzling:", + "moduleName": "Sentry", + "isOpen": true, + "objc_name": "setEnableFileManagerSwizzling:", + "declAttributes": [ + "ObjC", + "Dynamic" + ], + "accessorKind": "set" + } + ] + }, { "kind": "Var", "name": "tracesSampleRate", @@ -53124,158 +53290,6 @@ "name": "SentryExperimentalOptions", "printedName": "SentryExperimentalOptions", "children": [ - { - "kind": "Var", - "name": "enableDataSwizzling", - "printedName": "enableDataSwizzling", - "children": [ - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - } - ], - "declKind": "Var", - "usr": "c:@M@Sentry@objc(cs)SentryExperimentalOptions(py)enableDataSwizzling", - "mangledName": "$s6Sentry0A19ExperimentalOptionsC19enableDataSwizzlingSbvp", - "moduleName": "Sentry", - "declAttributes": [ - "Final", - "ObjC", - "HasStorage" - ], - "hasStorage": true, - "accessors": [ - { - "kind": "Accessor", - "name": "Get", - "printedName": "Get()", - "children": [ - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - } - ], - "declKind": "Accessor", - "usr": "c:@M@Sentry@objc(cs)SentryExperimentalOptions(im)enableDataSwizzling", - "mangledName": "$s6Sentry0A19ExperimentalOptionsC19enableDataSwizzlingSbvg", - "moduleName": "Sentry", - "implicit": true, - "declAttributes": [ - "Final", - "ObjC" - ], - "accessorKind": "get" - }, - { - "kind": "Accessor", - "name": "Set", - "printedName": "Set()", - "children": [ - { - "kind": "TypeNominal", - "name": "Void", - "printedName": "()" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - } - ], - "declKind": "Accessor", - "usr": "c:@M@Sentry@objc(cs)SentryExperimentalOptions(im)setEnableDataSwizzling:", - "mangledName": "$s6Sentry0A19ExperimentalOptionsC19enableDataSwizzlingSbvs", - "moduleName": "Sentry", - "implicit": true, - "declAttributes": [ - "Final", - "ObjC" - ], - "accessorKind": "set" - } - ] - }, - { - "kind": "Var", - "name": "enableFileManagerSwizzling", - "printedName": "enableFileManagerSwizzling", - "children": [ - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - } - ], - "declKind": "Var", - "usr": "c:@M@Sentry@objc(cs)SentryExperimentalOptions(py)enableFileManagerSwizzling", - "mangledName": "$s6Sentry0A19ExperimentalOptionsC26enableFileManagerSwizzlingSbvp", - "moduleName": "Sentry", - "declAttributes": [ - "Final", - "ObjC", - "HasStorage" - ], - "hasStorage": true, - "accessors": [ - { - "kind": "Accessor", - "name": "Get", - "printedName": "Get()", - "children": [ - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - } - ], - "declKind": "Accessor", - "usr": "c:@M@Sentry@objc(cs)SentryExperimentalOptions(im)enableFileManagerSwizzling", - "mangledName": "$s6Sentry0A19ExperimentalOptionsC26enableFileManagerSwizzlingSbvg", - "moduleName": "Sentry", - "implicit": true, - "declAttributes": [ - "Final", - "ObjC" - ], - "accessorKind": "get" - }, - { - "kind": "Accessor", - "name": "Set", - "printedName": "Set()", - "children": [ - { - "kind": "TypeNominal", - "name": "Void", - "printedName": "()" - }, - { - "kind": "TypeNominal", - "name": "Bool", - "printedName": "Swift.Bool", - "usr": "s:Sb" - } - ], - "declKind": "Accessor", - "usr": "c:@M@Sentry@objc(cs)SentryExperimentalOptions(im)setEnableFileManagerSwizzling:", - "mangledName": "$s6Sentry0A19ExperimentalOptionsC26enableFileManagerSwizzlingSbvs", - "moduleName": "Sentry", - "implicit": true, - "declAttributes": [ - "Final", - "ObjC" - ], - "accessorKind": "set" - } - ] - }, { "kind": "Var", "name": "enableUnhandledCPPExceptionsV2",