---
title: "Upgrade from 4.x to 5.x"
description: "Learn about migrating from Sentry Cocoa SDK 4.x to 5.x."
url: https://docs.sentry.io/platforms/apple/migration/v4-to-v5/
---

# Upgrade from 4.x to 5.x | Sentry for Apple

The samples below illustrate how the SDK works:

## [Initialization](https://docs.sentry.io/platforms/apple/migration/v4-to-v5.md#initialization)

Example in 4.x:

**Swift**

```swift
do {
    Client.shared = try Client(dsn: "___PUBLIC_DSN___")
    try Client.shared?.startCrashHandler()
} catch let error {
    print("\(error)")
}
```

**Objective-C**

```objc
NSError *error = nil;
SentryClient *client = [[SentryClient alloc] initWithDsn:@"___PUBLIC_DSN___" didFailWithError:&error];
SentryClient.sharedClient = client;
[SentryClient.sharedClient startCrashHandlerWithError:&error];
if (nil != error) {
    NSLog(@"%@", error);
}
```

Example in 5.x:

**Swift**

```swift
SentrySDK.start(options: [
    "dsn": "___PUBLIC_DSN___",
    "debug": true
])
```

**Objective-C**

```objc
[SentrySDK startWithOptions:@{
    @"dsn": @"___PUBLIC_DSN___",
    @"debug": @(YES)
}];
```

## [Add Breadcrumb](https://docs.sentry.io/platforms/apple/migration/v4-to-v5.md#add-breadcrumb)

Example in 4.x:\`

**Swift**

```swift
Client.shared?.breadcrumbs.add(Breadcrumb(level: .info, category: "test"))
```

**Objective-C**

```objc
[SentryClient.sharedClient.breadcrumbs addBreadcrumb:[[SentryBreadcrumb alloc] initWithLevel:kSentrySeverityInfo category:@"test"]];
```

Example in 5.x:

**Swift**

```swift
SentrySDK.addBreadcrumb(Breadcrumb(level: .info, category: "test"))
```

**Objective-C**

```objc
[SentrySDK addBreadcrumb:[[SentryBreadcrumb alloc] initWithLevel:kSentrySeverityInfo category:@"test"]];
```

## [CaptureMessage with tags/environment/extra](https://docs.sentry.io/platforms/apple/migration/v4-to-v5.md#capturemessage-with-tagsenvironmentextra)

Example in 4.x:

**Swift**

```swift
let event = Event(level: .debug)
event.message = "Test Message"
event.environment = "staging"
event.extra = ["ios": true]
Client.shared?.send(event: event)
```

**Objective-C**

```objc
SentryEvent *event = [[SentryEvent alloc] initWithLevel:kSentrySeverityDebug];
event.message = @"Test Message";
event.environment = @"staging";
event.extra = @{@"ios": @(YES)};
[SentryClient.sharedClient sendEvent:event withCompletionHandler:nil];
```

Example in 5.x:

**Swift**

```swift
SentrySDK.capture(message: "Test Message") { (scope) in
    scope.setEnvironment("staging")
    scope.setExtras(["ios": true])
    let u = Sentry.User(userId: "1")
    u.email = "tony@example.com"
    scope.setUser(u)
}
```

**Objective-C**

```objc
[SentrySDK captureMessage:@"Test Message" withScopeBlock:^(SentryScope * _Nonnull scope) {
    [scope setEnvironment:@"staging"];
    [scope setExtras:@{@"ios": @(YES)}];
    SentryUser *user = [[SentryUser alloc] initWithUserId:@"1"];
    user.email = @"tony@example.com";
    [scope setUser:user];
}];
```

## [setUser](https://docs.sentry.io/platforms/apple/migration/v4-to-v5.md#setuser)

Example in 4.x:

**Swift**

```swift
let u = User(userId: "1")
u.email = "tony@example.com"
Client.shared?.user = user
```

**Objective-C**

```objc
SentryUser *user = [[SentryUser alloc] initWithUserId:@"1"];
user.email = @"tony@example.com";
SentryClient.sharedClient.user = user;
```

Example in 5.x:

**Swift**

```swift
let u = Sentry.User(userId: "1")
u.email = "tony@example.com"
SentrySDK.setUser(u)
```

**Objective-C**

```objc
SentryUser *user = [[SentryUser alloc] initWithUserId:@"1"];
user.email = @"tony@example.com";
[SentrySDK setUser:user];
```
