|
1 | | -# Upgrading from 5.x to 6.x |
2 | | - |
3 | | -In this version there are a few breaking changes. This guide should help you to update your code. |
4 | | - |
5 | | -## Configuration Changes |
6 | | - |
7 | | -With this version we changed a few things for the configuration: |
8 | | - |
9 | | -- [Auto Session Tracking](https://github.com/getsentry/sentry-cocoa/blob/7876949ca78aebfe7883432e35727993c5c30829/Sources/Sentry/include/SentryOptions.h#L101) |
10 | | -is enabled per default. |
11 | | -[This feature](https://docs.sentry.io/product/releases/health/) |
12 | | -is collecting and sending health data about the usage of your |
13 | | -application. |
14 | | - |
15 | | -- [Attach stacktraces](https://github.com/getsentry/sentry-cocoa/blob/b5bf9769a158c66a34352556ade243e55f163a27/Sources/Sentry/Public/SentryOptions.h#L109) |
16 | | - is enabled per default. |
17 | | - |
18 | | -- We bumped the minimum iOS version to 9.0. |
19 | | - |
20 | | -- Use a BOOL in SentryOptions instead of NSNumber to store booleans. |
21 | | - |
22 | | -- We removed [enabled](https://github.com/getsentry/sentry-cocoa/blob/5.2.2/Sources/Sentry/include/SentryOptions.h#L63) on the SentryOptions. |
23 | | - |
24 | | -## Breaking Changes |
25 | | - |
26 | | -### Store Endpoint |
27 | | - |
28 | | -This version uses the [envelope endpoint](https://develop.sentry.dev/sdk/envelopes/). |
29 | | -If you are using an on-premise installation it requires Sentry version |
30 | | -`>= v20.6.0` to work. If you are using sentry.io nothing will change and |
31 | | -no action is needed. For this change, we also cache events now in envelopes on the disk. |
32 | | -We decided not to take the effort to migrate these few cached events from 5.x to 6.x into |
33 | | -envelopes. Instead we remove them from the disk. This means you might lose a few cached |
34 | | -events of your users when upgrading. |
35 | | - |
36 | | -### SDK Inits |
37 | | - |
38 | | -We removed the [deprecated SDK inits](https://github.com/getsentry/sentry-cocoa/blob/5.2.2/Sources/Sentry/include/SentrySDK.h#L35-L47). The recommended way to initialize Sentry is now: |
39 | | - |
40 | | -```swift |
41 | | -SentrySDK.start { options in |
42 | | - options.dsn = "___PUBLIC_DSN___" |
43 | | - // ... |
44 | | -} |
45 | | -``` |
46 | | - |
47 | | -```objective-c |
48 | | -[SentrySDK startWithConfigureOptions:^(SentryOptions *options) { |
49 | | - options.dsn = @"___PUBLIC_DSN___"; |
50 | | - // ... |
51 | | -}]; |
52 | | -``` |
53 | | -
|
54 | | -### Cleanup Public Headers |
55 | | -
|
56 | | -We cleaned up our public headers and made most of our classes private. If you can't access one |
57 | | -of the classes you need please [open an issue](https://github.com/getsentry/sentry-cocoa/issues/new/choose) |
58 | | -and tell us your use case so we either make the class public again or provide another API for you. |
59 | | -
|
60 | | -### New type SentryId for eventId |
61 | | -
|
62 | | -In 5.x we use a nullable NSString to represent an event ID. The SDK, Hub and Client returned this |
63 | | -nullable NSString for the event ID for capturing messages, events, errors, etc. With 6.x we have a new type SentryId which is not nullable to represent an event ID. |
64 | | -Instead of returning `nil` when an event couldn't be queued for submission we return `SentryId.empty`. |
65 | | -
|
66 | | -`5.x` |
67 | | -
|
68 | | -```swift |
69 | | -let eventId = SentrySDK.capture(message: "A message") |
70 | | -if (nil != eventId) { |
71 | | - // event was queued for submission |
72 | | -} else { |
73 | | - // event wasn't queued for submission |
74 | | -} |
75 | | -``` |
76 | | - |
77 | | -```objective-c |
78 | | -SentryId *eventId = [SentrySDK captureMessage:@"A message"]; |
79 | | -if (nil != eventId) { |
80 | | - // event was queued for submission |
81 | | -} else { |
82 | | - // event wasn't queued for submission |
83 | | -} |
84 | | -``` |
85 | | -
|
86 | | -`6.x` |
87 | | -
|
88 | | -```swift |
89 | | -let eventId = SentrySDK.capture(message: "A message") |
90 | | -if (eventId != SentryId.empty) { |
91 | | - // event was queued for submission |
92 | | -} else { |
93 | | - // event wasn't queued for submission |
94 | | -} |
95 | | -``` |
96 | | - |
97 | | -```objective-c |
98 | | -SentryId *eventId = [SentrySDK captureMessage:@"A message"]; |
99 | | -if (eventId != SentryId.empty) { |
100 | | - // event was queued for submission |
101 | | -} else { |
102 | | - // event wasn't queued for submission |
103 | | -} |
104 | | -``` |
105 | | -
|
106 | | -### New type SentryMessage for Event.message |
107 | | -
|
108 | | -In 6.x we introduce a new type [SentryMessage](https://develop.sentry.dev/sdk/event-payloads/message/) |
109 | | -for `event.message`. SentryMessage gives you the possibilty to pass a format string with parameters |
110 | | -to Sentry, which can help to group similar messages into the same issue. |
111 | | -
|
112 | | -`5.x` |
113 | | -
|
114 | | -```swift |
115 | | -let event = Event() |
116 | | -event.message = "Hello World" |
117 | | -``` |
118 | | - |
119 | | -```objective-c |
120 | | -SentryEvent *event = [[SentryEvent alloc] init]; |
121 | | -event.message = "Hello World"; |
122 | | -``` |
123 | | - |
124 | | -`6.x` |
125 | | - |
126 | | -```swift |
127 | | -let event = Event() |
128 | | -event.message = SentryMessage(formatted: "Hello World") |
129 | | -``` |
130 | | - |
131 | | -```objective-c |
132 | | -SentryEvent *event = [[SentryEvent alloc] init]; |
133 | | -event.message = [SentryMessage messageWithFormatted:"Hello World"]; |
134 | | -``` |
135 | | -
|
136 | | -### Make Scope nonnull for capture methods |
137 | | -
|
138 | | -In 5.x you could pass a nullable scope to capture methods of the SDK, Hub and Client, such as |
139 | | -`SentrySdk.captureMessage()`. In 6.x we changed the Scope to nonnull and provide overloads |
140 | | -for the Hub and the Client. |
141 | | -
|
142 | | -Please checkout the [Changelog](CHANGELOG.md) for a complete list of changes. |
143 | | -
|
144 | | -# Upgrading from 4.x to 5.x |
145 | | -
|
146 | | -Here are some examples of how the new SDK works. |
147 | | -
|
148 | | -### Initialization |
149 | | -
|
150 | | -`4.x.x` |
151 | | -
|
152 | | -```swift |
153 | | -do { |
154 | | - Client.shared = try Client(dsn: "___PUBLIC_DSN___") |
155 | | - try Client.shared?.startCrashHandler() |
156 | | -} catch let error { |
157 | | - print("\(error)") |
158 | | -} |
159 | | -``` |
160 | | - |
161 | | -```objective-c |
162 | | -NSError *error = nil; |
163 | | -SentryClient *client = [[SentryClient alloc] initWithDsn:@"___PUBLIC_DSN___" didFailWithError:&error]; |
164 | | -SentryClient.sharedClient = client; |
165 | | -[SentryClient.sharedClient startCrashHandlerWithError:&error]; |
166 | | -if (nil != error) { |
167 | | - NSLog(@"%@", error); |
168 | | -} |
169 | | -``` |
170 | | -
|
171 | | -`5.x.x` |
172 | | -
|
173 | | -
|
174 | | -```swift |
175 | | -SentrySDK.start(options: [ |
176 | | - "dsn": "___PUBLIC_DSN___", |
177 | | - "debug": true |
178 | | -]) |
179 | | -``` |
180 | | - |
181 | | -```objective-c |
182 | | -[SentrySDK startWithOptions:@{ |
183 | | - @"dsn": @"___PUBLIC_DSN___", |
184 | | - @"debug": @(YES) |
185 | | -}]; |
186 | | -``` |
187 | | -
|
188 | | -### Add Breadcrumb |
189 | | -
|
190 | | -`4.x.x` |
191 | | -
|
192 | | -```swift |
193 | | -Client.shared?.breadcrumbs.add(Breadcrumb(level: .info, category: "test")) |
194 | | -``` |
195 | | - |
196 | | -```objective-c |
197 | | -[SentryClient.sharedClient.breadcrumbs addBreadcrumb:[[SentryBreadcrumb alloc] initWithLevel:kSentrySeverityInfo category:@"test"]]; |
198 | | -``` |
199 | | -
|
200 | | -`5.x.x` |
201 | | -
|
202 | | -```swift |
203 | | -SentrySDK.addBreadcrumb(Breadcrumb(level: .info, category: "test")) |
204 | | -``` |
205 | | - |
206 | | -```objective-c |
207 | | -[SentrySDK addBreadcrumb:[[SentryBreadcrumb alloc] initWithLevel:kSentrySeverityInfo category:@"test"]]; |
208 | | -``` |
209 | | -
|
210 | | -### CaptureMessage with tags/environment/extra |
211 | | -
|
212 | | -`4.x.x` |
213 | | -
|
214 | | -```swift |
215 | | -let event = Event(level: .debug) |
216 | | -event.message = "Test Message" |
217 | | -event.environment = "staging" |
218 | | -event.extra = ["ios": true] |
219 | | -Client.shared?.send(event: event) |
220 | | -``` |
221 | | - |
222 | | -```objective-c |
223 | | -SentryEvent *event = [[SentryEvent alloc] initWithLevel:kSentrySeverityDebug]; |
224 | | -event.message = @"Test Message"; |
225 | | -event.environment = @"staging"; |
226 | | -event.extra = @{@"ios": @(YES)}; |
227 | | -[SentryClient.sharedClient sendEvent:event withCompletionHandler:nil]; |
228 | | -``` |
229 | | -
|
230 | | -`5.x.x` |
231 | | -
|
232 | | -```swift |
233 | | -SentrySDK.capture(message: "Test Message") { (scope) in |
234 | | - scope.setEnvironment("staging") |
235 | | - scope.setExtras(["ios": true]) |
236 | | - let u = Sentry.User(userId: "1") |
237 | | - |
238 | | - scope.setUser(u) |
239 | | -} |
240 | | -``` |
241 | | - |
242 | | -```objective-c |
243 | | -[SentrySDK captureMessage:@"Test Message" withScopeBlock:^(SentryScope * _Nonnull scope) { |
244 | | - [scope setEnvironment:@"staging"]; |
245 | | - [scope setExtras:@{@"ios": @(YES)}]; |
246 | | - SentryUser *user = [[SentryUser alloc] initWithUserId:@"1"]; |
247 | | - user.email = @" [email protected]"; |
248 | | - [scope setUser:user]; |
249 | | -}]; |
250 | | -``` |
251 | | -
|
252 | | -### setUser |
253 | | -
|
254 | | -`4.x.x` |
255 | | -
|
256 | | -```swift |
257 | | -let u = User(userId: "1") |
258 | | - |
259 | | -Client.shared?.user = user |
260 | | -``` |
261 | | - |
262 | | -```objective-c |
263 | | -SentryUser *user = [[SentryUser alloc] initWithUserId:@"1"]; |
264 | | -user.email = @" [email protected]"; |
265 | | -SentryClient.sharedClient.user = user; |
266 | | -``` |
267 | | -
|
268 | | -`5.x.x` |
269 | | -
|
270 | | -```swift |
271 | | -let u = Sentry.User(userId: "1") |
272 | | - |
273 | | -SentrySDK.setUser(u) |
274 | | -``` |
275 | | - |
276 | | -```objective-c |
277 | | -SentryUser *user = [[SentryUser alloc] initWithUserId:@"1"]; |
278 | | -user.email = @" [email protected]"; |
279 | | -[SentrySDK setUser:user]; |
280 | | -``` |
281 | | -
|
282 | | -For more features, usage examples and configuration options, please visit: https://docs.sentry.io/platforms/cocoa/ |
| 1 | +We moved the migration guide to the [docs](https://docs.sentry.io/platforms/apple/migration/). |
0 commit comments