---
title: "Swizzling"
description: "Learn which features use swizzling"
url: https://docs.sentry.io/platforms/apple/guides/ios/configuration/swizzling/
---

# Swizzling | Sentry for iOS

The Cocoa SDK uses [swizzling](https://nshipster.com/method-swizzling/) to provide some features out of the box without boilerplate code. The following features use swizzling:

**macOS**

* [Breadcrumbs for touch events](https://docs.sentry.io/platforms/apple/guides/ios/enriching-events/breadcrumbs.md)
* [Auto instrumentation for HTTP requests](https://docs.sentry.io/platforms/apple/guides/ios/tracing/instrumentation/automatic-instrumentation.md#network-tracking)
* [Auto instrumentation for File I/O operations](https://docs.sentry.io/platforms/apple/guides/ios/tracing/instrumentation/automatic-instrumentation.md#file-io-tracing)
* [Auto instrumentation for Core Data operations](https://docs.sentry.io/platforms/apple/guides/ios/tracing/instrumentation/automatic-instrumentation.md#core-data-tracing)
* [Automatically added sentry-trace header to HTTP requests for distributed tracing](https://docs.sentry.io/platforms/apple/guides/ios/tracing/trace-propagation.md)
* [HTTP Client Errors](https://docs.sentry.io/platforms/apple/guides/ios/configuration/http-client-errors.md)

**iOS, tvOS and Catalyst**

* [Breadcrumbs for touch events and navigation with UIViewControllers](https://docs.sentry.io/platforms/apple/guides/ios/enriching-events/breadcrumbs.md)
* [Auto instrumentation for UIViewControllers](https://docs.sentry.io/platforms/apple/guides/ios/tracing/instrumentation/automatic-instrumentation.md#uiviewcontroller-tracing)
* [Auto instrumentation for HTTP requests](https://docs.sentry.io/platforms/apple/guides/ios/tracing/instrumentation/automatic-instrumentation.md#network-tracking)
* [Auto instrumentation for File I/O operations](https://docs.sentry.io/platforms/apple/guides/ios/tracing/instrumentation/automatic-instrumentation.md#file-io-tracing)
* [Auto instrumentation for Core Data operations](https://docs.sentry.io/platforms/apple/guides/ios/tracing/instrumentation/automatic-instrumentation.md#core-data-tracing)
* [Automatically added sentry-trace header to HTTP requests for distributed tracing](https://docs.sentry.io/platforms/apple/guides/ios/tracing/trace-propagation.md)
* [User interaction transactions for UI clicks](https://docs.sentry.io/platforms/apple/guides/ios/tracing/instrumentation/automatic-instrumentation.md#user-interaction-tracing)
* [HTTP Client Errors](https://docs.sentry.io/platforms/apple/guides/ios/configuration/http-client-errors.md)

Since Cocoa 7.5.0, you can opt out of swizzling using options. When you disable swizzling, the SDK disables the features above:

```swift
import Sentry

SentrySDK.start { options in
    options.dsn = "___PUBLIC_DSN___"
    options.enableSwizzling = false
}
```

## [Deactivate Swizzling for Specific Classes](https://docs.sentry.io/platforms/apple/guides/ios/configuration/swizzling.md#deactivate-swizzling-for-specific-classes)

To deactivate swizzling for specific classes, you can use the option `swizzleClassNameExcludes`, which is available with Sentry Cocoa SDK version `8.23.0` and above. The SDK checks if the name of a class it intends to swizzle contains any class name configured using this option. For example, if you add `MyUIViewController` to this list, the Sentry Cocoa SDK excludes the following classes from swizzling:

* `YourApp.MyUIViewController`
* `YourApp.MyUIViewControllerA`
* `MyApp.MyUIViewController`

```swift
import Sentry

SentrySDK.start { options in
    options.swizzleClassNameExcludes = [
      "MyUIViewController",
    ]
}
```
