Skip to content

Commit 90c25c6

Browse files
authored
Move replay options out of experimental (#367)
* Move replay out of experimental * Move replay out of experimental * Update api * Update CHANGELOG * Update test
1 parent ca9b001 commit 90c25c6

File tree

10 files changed

+46
-41
lines changed

10 files changed

+46
-41
lines changed

CHANGELOG.md

+7-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
## Unreleased
44

5+
### Feature
6+
7+
- Move replay options out of experimental ([#367](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/367))
8+
- You can now access the replay options via `options.sessionReplay`
9+
510
### Fixes
611

712
- Do not throw if exec operation fails ([#360](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/360))
@@ -43,8 +48,8 @@
4348
```kotlin
4449
Sentry.init { options ->
4550
// Adjust these values for production
46-
options.experimental.sessionReplay.onErrorSampleRate = 1.0
47-
options.experimental.sessionReplay.sessionSampleRate = 1.0
51+
options.sessionReplay.onErrorSampleRate = 1.0
52+
options.sessionReplay.sessionSampleRate = 1.0
4853
}
4954
```
5055
- Add `Sentry.isEnabled()` API to common code ([#273](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/273))

sentry-kotlin-multiplatform/api/android/sentry-kotlin-multiplatform.api

+2-2
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ public class io/sentry/kotlin/multiplatform/SentryOptions {
185185
public final fun getRelease ()Ljava/lang/String;
186186
public final fun getSampleRate ()Ljava/lang/Double;
187187
public final fun getSdk ()Lio/sentry/kotlin/multiplatform/protocol/SdkVersion;
188+
public final fun getSessionReplay ()Lio/sentry/kotlin/multiplatform/SentryReplayOptions;
188189
public final fun getSessionTrackingIntervalMillis ()J
189190
public final fun getTracesSampleRate ()Ljava/lang/Double;
190191
public final fun isAnrEnabled ()Z
@@ -213,14 +214,13 @@ public class io/sentry/kotlin/multiplatform/SentryOptions {
213214
public final fun setRelease (Ljava/lang/String;)V
214215
public final fun setSampleRate (Ljava/lang/Double;)V
215216
public final fun setSdk (Lio/sentry/kotlin/multiplatform/protocol/SdkVersion;)V
217+
public final fun setSessionReplay (Lio/sentry/kotlin/multiplatform/SentryReplayOptions;)V
216218
public final fun setSessionTrackingIntervalMillis (J)V
217219
public final fun setTracesSampleRate (Ljava/lang/Double;)V
218220
}
219221

220222
public final class io/sentry/kotlin/multiplatform/SentryOptions$ExperimentalOptions {
221223
public fun <init> ()V
222-
public final fun getSessionReplay ()Lio/sentry/kotlin/multiplatform/SentryReplayOptions;
223-
public final fun setSessionReplay (Lio/sentry/kotlin/multiplatform/SentryReplayOptions;)V
224224
}
225225

226226
public final class io/sentry/kotlin/multiplatform/SentryReplayOptions {

sentry-kotlin-multiplatform/api/jvm/sentry-kotlin-multiplatform.api

+2-2
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@ public class io/sentry/kotlin/multiplatform/SentryOptions {
182182
public final fun getRelease ()Ljava/lang/String;
183183
public final fun getSampleRate ()Ljava/lang/Double;
184184
public final fun getSdk ()Lio/sentry/kotlin/multiplatform/protocol/SdkVersion;
185+
public final fun getSessionReplay ()Lio/sentry/kotlin/multiplatform/SentryReplayOptions;
185186
public final fun getSessionTrackingIntervalMillis ()J
186187
public final fun getTracesSampleRate ()Ljava/lang/Double;
187188
public final fun isAnrEnabled ()Z
@@ -210,14 +211,13 @@ public class io/sentry/kotlin/multiplatform/SentryOptions {
210211
public final fun setRelease (Ljava/lang/String;)V
211212
public final fun setSampleRate (Ljava/lang/Double;)V
212213
public final fun setSdk (Lio/sentry/kotlin/multiplatform/protocol/SdkVersion;)V
214+
public final fun setSessionReplay (Lio/sentry/kotlin/multiplatform/SentryReplayOptions;)V
213215
public final fun setSessionTrackingIntervalMillis (J)V
214216
public final fun setTracesSampleRate (Ljava/lang/Double;)V
215217
}
216218

217219
public final class io/sentry/kotlin/multiplatform/SentryOptions$ExperimentalOptions {
218220
public fun <init> ()V
219-
public final fun getSessionReplay ()Lio/sentry/kotlin/multiplatform/SentryReplayOptions;
220-
public final fun setSessionReplay (Lio/sentry/kotlin/multiplatform/SentryReplayOptions;)V
221221
}
222222

223223
public final class io/sentry/kotlin/multiplatform/SentryReplayOptions {

sentry-kotlin-multiplatform/src/androidMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.android.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,15 @@ internal fun SentryOptions.toAndroidSentryOptionsCallback(): (SentryAndroidOptio
2222

2323
// Replay options
2424
androidOptions.sessionReplay.maskAllText =
25-
kmpOptions.experimental.sessionReplay.maskAllText
25+
kmpOptions.sessionReplay.maskAllText
2626
androidOptions.sessionReplay.maskAllImages =
27-
kmpOptions.experimental.sessionReplay.maskAllImages
27+
kmpOptions.sessionReplay.maskAllImages
2828
androidOptions.sessionReplay.sessionSampleRate =
29-
kmpOptions.experimental.sessionReplay.sessionSampleRate
29+
kmpOptions.sessionReplay.sessionSampleRate
3030
androidOptions.sessionReplay.onErrorSampleRate =
31-
kmpOptions.experimental.sessionReplay.onErrorSampleRate
31+
kmpOptions.sessionReplay.onErrorSampleRate
3232
androidOptions.sessionReplay.quality =
33-
kmpOptions.experimental.sessionReplay.quality.toAndroidSentryQuality()
33+
kmpOptions.sessionReplay.quality.toAndroidSentryQuality()
3434

3535
// kForEach solves an issue with linter where it thinks forEach is the Java version
3636
// see here: https://stackoverflow.com/questions/44751469/kotlin-extension-functions-suddenly-require-api-level-24/68897591#68897591

sentry-kotlin-multiplatform/src/androidUnitTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.android.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ actual fun PlatformOptions.assertPlatformSpecificOptions(kmpOptions: SentryOptio
8888
assertEquals(androidOptions.isAnrEnabled, kmpOptions.isAnrEnabled)
8989
assertEquals(androidOptions.anrTimeoutIntervalMillis, kmpOptions.anrTimeoutIntervalMillis)
9090

91-
val kmpReplayOptions = kmpOptions.experimental.sessionReplay
91+
val kmpReplayOptions = kmpOptions.sessionReplay
9292
assertViewClassMasking(
9393
kmpReplayOptions.maskAllText,
9494
androidOptions.sessionReplay.maskViewClasses,

sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt

+7-7
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,12 @@ public open class SentryOptions {
185185
*/
186186
public var enableWatchdogTerminationTracking: Boolean = true
187187

188+
/**
189+
* The options for session replay.
190+
* Currently available for **Android** and **iOS**.
191+
*/
192+
public var sessionReplay: SentryReplayOptions = SentryReplayOptions()
193+
188194
/**
189195
* Experimental options for new features, these options are going to be promoted to SentryOptions
190196
* before GA.
@@ -200,11 +206,5 @@ public open class SentryOptions {
200206
*
201207
* Beware that experimental options can change at any time.
202208
*/
203-
public class ExperimentalOptions {
204-
/**
205-
* Experimental feature. The options for session replay.
206-
* Currently available for **Android** and **iOS**.
207-
*/
208-
public var sessionReplay: SentryReplayOptions = SentryReplayOptions()
209-
}
209+
public class ExperimentalOptions
210210
}

sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/SentryOptionsTest.kt

+10-10
Original file line numberDiff line numberDiff line change
@@ -127,11 +127,11 @@ class SentryOptionsTest : BaseSentryTest() {
127127
assertEquals(2000L, options.appHangTimeoutIntervalMillis)
128128
assertTrue(options.isAnrEnabled)
129129
assertEquals(5000L, options.anrTimeoutIntervalMillis)
130-
assertNull(options.experimental.sessionReplay.onErrorSampleRate)
131-
assertNull(options.experimental.sessionReplay.sessionSampleRate)
132-
assertTrue(options.experimental.sessionReplay.maskAllText)
133-
assertTrue(options.experimental.sessionReplay.maskAllImages)
134-
assertEquals(SentryReplayOptions.Quality.MEDIUM, options.experimental.sessionReplay.quality)
130+
assertNull(options.sessionReplay.onErrorSampleRate)
131+
assertNull(options.sessionReplay.sessionSampleRate)
132+
assertTrue(options.sessionReplay.maskAllText)
133+
assertTrue(options.sessionReplay.maskAllImages)
134+
assertEquals(SentryReplayOptions.Quality.MEDIUM, options.sessionReplay.quality)
135135
assertTrue(options.enableWatchdogTerminationTracking)
136136
}
137137

@@ -158,11 +158,11 @@ class SentryOptionsTest : BaseSentryTest() {
158158
isAnrEnabled = false
159159
anrTimeoutIntervalMillis = 1000L
160160
enableWatchdogTerminationTracking = false
161-
experimental.sessionReplay.onErrorSampleRate = 0.5
162-
experimental.sessionReplay.sessionSampleRate = 0.5
163-
experimental.sessionReplay.maskAllText = false
164-
experimental.sessionReplay.maskAllImages = false
165-
experimental.sessionReplay.quality = SentryReplayOptions.Quality.LOW
161+
sessionReplay.onErrorSampleRate = 0.5
162+
sessionReplay.sessionSampleRate = 0.5
163+
sessionReplay.maskAllText = false
164+
sessionReplay.maskAllImages = false
165+
sessionReplay.quality = SentryReplayOptions.Quality.LOW
166166
}
167167

168168
val platformOptions = createPlatformOptions()

sentry-kotlin-multiplatform/src/iosMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.ios.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ internal fun SentryOptions.toIosOptionsConfiguration(): (CocoaSentryOptions?) ->
2020
dictionary = mapOf(
2121
// Setting the onErrorSampleRate like this, using setOnErrorSampleRate
2222
// crashes on compose multiplatform for some unknown reason
23-
"errorSampleRate" to kmpOptions.experimental.sessionReplay.onErrorSampleRate?.toFloat()
23+
"errorSampleRate" to kmpOptions.sessionReplay.onErrorSampleRate?.toFloat()
2424
)
2525
).apply {
26-
setMaskAllText(kmpOptions.experimental.sessionReplay.maskAllText)
27-
setMaskAllImages(kmpOptions.experimental.sessionReplay.maskAllImages)
28-
kmpOptions.experimental.sessionReplay.sessionSampleRate?.let { setSessionSampleRate(it.toFloat()) }
29-
setQuality(kmpOptions.experimental.sessionReplay.quality.ordinal.toLong())
26+
setMaskAllText(kmpOptions.sessionReplay.maskAllText)
27+
setMaskAllImages(kmpOptions.sessionReplay.maskAllImages)
28+
kmpOptions.sessionReplay.sessionSampleRate?.let { setSessionSampleRate(it.toFloat()) }
29+
setQuality(kmpOptions.sessionReplay.quality.ordinal.toLong())
3030
}
3131
cocoaOptions.setSessionReplay(replayOptions)
3232
} ?: run {

sentry-kotlin-multiplatform/src/iosTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.ios.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ actual fun ApplePlatformOptions.assertApplePlatformSpecificOptions(options: Sent
4040
assertEquals(attachViewHierarchy, options.attachViewHierarchy)
4141
assertEquals(enableAppHangTracking, options.enableAppHangTracking)
4242
assertEquals(appHangTimeoutIntervalMillis, options.appHangTimeoutIntervalMillis)
43-
assertEquals(sessionReplay.maskAllText(), options.experimental.sessionReplay.maskAllText)
44-
assertEquals(sessionReplay.maskAllImages(), options.experimental.sessionReplay.maskAllImages)
45-
assertEquals(sessionReplay.onErrorSampleRate().toDouble(), options.experimental.sessionReplay.onErrorSampleRate)
46-
assertEquals(sessionReplay.sessionSampleRate().toDouble(), options.experimental.sessionReplay.sessionSampleRate)
47-
assertEquals(sessionReplay.quality(), options.experimental.sessionReplay.quality.ordinal.toLong())
43+
assertEquals(sessionReplay.maskAllText(), options.sessionReplay.maskAllText)
44+
assertEquals(sessionReplay.maskAllImages(), options.sessionReplay.maskAllImages)
45+
assertEquals(sessionReplay.onErrorSampleRate().toDouble(), options.sessionReplay.onErrorSampleRate)
46+
assertEquals(sessionReplay.sessionSampleRate().toDouble(), options.sessionReplay.sessionSampleRate)
47+
assertEquals(sessionReplay.quality(), options.sessionReplay.quality.ordinal.toLong())
4848
}

sentry-samples/kmp-app-cocoapods/shared/src/commonMain/kotlin/sample.kmp.app/SentrySetup.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ private fun optionsConfiguration(): OptionsConfiguration {
4646
it.debug = true
4747
it.failedRequestStatusCodes = listOf(HttpStatusCodeRange(400, 599))
4848
it.failedRequestTargets = listOf("httpbin.org")
49-
it.experimental.sessionReplay.onErrorSampleRate = 1.0
50-
it.experimental.sessionReplay.sessionSampleRate = 1.0
49+
it.sessionReplay.onErrorSampleRate = 1.0
50+
it.sessionReplay.sessionSampleRate = 1.0
5151
it.beforeBreadcrumb = { breadcrumb ->
5252
breadcrumb.message = "Add message before every breadcrumb"
5353
breadcrumb

0 commit comments

Comments
 (0)