@barrysolomon/mobile-react-native 0.4.0-alpha → 0.5.2-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -8
- package/android/build.gradle +50 -15
- package/android/gradle.properties +4 -4
- package/android/src/test/java/com/dash0/mobile/reactnative/OTelNetworkInterceptorTest.kt +5 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +4 -1
- package/lib/instrumentation/navigation.d.ts.map +1 -1
- package/lib/instrumentation/navigation.js +6 -1
- package/package.json +13 -3
- package/src/index.ts +4 -1
- package/src/instrumentation/navigation.ts +10 -1
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@ existing native Android (`otel-android-mobile`) and iOS (`otel-ios-mobile`)
|
|
|
5
5
|
SDKs — native owns buffering, policy evaluation, OTLP export, and crash
|
|
6
6
|
recovery. JS stays thin.
|
|
7
7
|
|
|
8
|
-
**Version:** `0.
|
|
8
|
+
**Version:** `0.5.2-alpha`, published under the `alpha` dist-tag.
|
|
9
9
|
|
|
10
10
|
**Status:** Validated end-to-end in Dash0. All 4 platforms (Android native,
|
|
11
11
|
iOS native, RN Android, RN iOS) have a UAT matrix of 12/12 cells green.
|
|
@@ -17,7 +17,7 @@ iOS native, RN Android, RN iOS) have a UAT matrix of 12/12 cells green.
|
|
|
17
17
|
# resolves the OLD 0.1.0-alpha — always pin the dist-tag or version):
|
|
18
18
|
npm install @barrysolomon/mobile-react-native@alpha
|
|
19
19
|
# or pin the exact version:
|
|
20
|
-
# npm install @barrysolomon/mobile-react-native@0.
|
|
20
|
+
# npm install @barrysolomon/mobile-react-native@0.5.2-alpha
|
|
21
21
|
|
|
22
22
|
cd ios && pod install
|
|
23
23
|
```
|
|
@@ -25,17 +25,21 @@ cd ios && pod install
|
|
|
25
25
|
This JS package wraps the native SDKs; install those too:
|
|
26
26
|
|
|
27
27
|
- **iOS** — add the Swift Package `https://github.com/barrysolomon/mobile-otel`
|
|
28
|
-
at tag `v0.
|
|
28
|
+
at tag `v0.5.2-alpha` to your app target, then copy
|
|
29
29
|
`OTelMobileCallSink.swift` (+ `BoundedLiveSpanStore.swift`) from this package
|
|
30
30
|
into your app target and call
|
|
31
31
|
`Dash0MobileModule.installSink { OTelMobileCallSink() }`. The pod intentionally
|
|
32
32
|
excludes the sink because it depends on the SwiftPM SDK delivered on the app
|
|
33
33
|
side.
|
|
34
|
-
- **Android** — `io.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
- **Android** — `io.github.barrysolomon:mobile:0.5.2-alpha` from the public
|
|
35
|
+
Maven repo on GitHub Pages
|
|
36
|
+
(`https://barrysolomon.github.io/mobile-otel/maven`) — no PAT / no
|
|
37
|
+
authentication required. As of 0.2.0-alpha the full module set
|
|
38
|
+
(`mobile-core` + all `mobile-instrumentation-*` modules) publishes there, so
|
|
39
|
+
the dependency tree resolves. (Legacy / transition: the artifact is also
|
|
40
|
+
still available from GitHub Packages at
|
|
41
|
+
`https://maven.pkg.github.com/barrysolomon/mobile-otel`, which requires a
|
|
42
|
+
`read:packages` PAT — prefer the public repo above.)
|
|
39
43
|
|
|
40
44
|
## Quickstart
|
|
41
45
|
|
package/android/build.gradle
CHANGED
|
@@ -76,11 +76,15 @@ android {
|
|
|
76
76
|
repositories {
|
|
77
77
|
google()
|
|
78
78
|
mavenCentral()
|
|
79
|
-
// The native Android SDK (io.
|
|
80
|
-
//
|
|
81
|
-
//
|
|
82
|
-
//
|
|
83
|
-
//
|
|
79
|
+
// The native Android SDK (io.github.barrysolomon:mobile) is this repo's own
|
|
80
|
+
// artifact. It is published to a PUBLIC, no-auth Maven repo on GitHub Pages —
|
|
81
|
+
// this is what a clean-room consumer resolves it from (see the README RN
|
|
82
|
+
// section). Host-autolinked builds resolve via the CONSUMER's settings.gradle
|
|
83
|
+
// repositories (RepositoriesMode.PREFER_SETTINGS ignores this module block),
|
|
84
|
+
// so the README instructs the consumer to add this same URL there.
|
|
85
|
+
maven { url "https://barrysolomon.github.io/mobile-otel/maven" }
|
|
86
|
+
// mavenLocal last: lets a dev who ran `examples/demo-app` publishReleaseToMavenLocal
|
|
87
|
+
// consume an unreleased build without hitting the network.
|
|
84
88
|
mavenLocal()
|
|
85
89
|
}
|
|
86
90
|
|
|
@@ -90,14 +94,45 @@ repositories {
|
|
|
90
94
|
// build against the version this package's package.json devDepends on.
|
|
91
95
|
ext.reactAndroidVersion = project.findProperty('Dash0Mobile_reactAndroidVersion') ?: '+'
|
|
92
96
|
|
|
93
|
-
// Version of the native Android SDK (io.
|
|
94
|
-
// module depends on.
|
|
95
|
-
//
|
|
96
|
-
//
|
|
97
|
-
//
|
|
98
|
-
//
|
|
99
|
-
//
|
|
100
|
-
|
|
97
|
+
// Version of the native Android SDK (io.github.barrysolomon:mobile) this RN
|
|
98
|
+
// module depends on. DERIVED from this package's own package.json `version`,
|
|
99
|
+
// which carries the lockstep release version shared by all three artifacts
|
|
100
|
+
// (npm + Android Maven + iOS SwiftPM — see docs/VERSIONING.md). Deriving it
|
|
101
|
+
// means the consumer can never drift from the published SDK: a release bump
|
|
102
|
+
// touches package.json (release-checklist item #1) and this tracks it
|
|
103
|
+
// automatically, instead of being a 4th place a human must remember to edit.
|
|
104
|
+
// A consumer can still pin an explicit SDK build via -PDash0Mobile_sdkVersion.
|
|
105
|
+
//
|
|
106
|
+
// History: a HARDCODED pin here silently drifted from the published version
|
|
107
|
+
// TWICE — 0.1.0 vs 0.2.0, then 0.4.1 vs 0.4.2 — each time breaking clean-.m2
|
|
108
|
+
// CI (the RN-android job) while passing on caches that still held the old
|
|
109
|
+
// artifact. Deriving from package.json removes that failure mode at the root.
|
|
110
|
+
ext.dash0SdkVersion = project.findProperty('Dash0Mobile_sdkVersion')
|
|
111
|
+
?: new groovy.json.JsonSlurper().parse(file('../package.json')).version
|
|
112
|
+
|
|
113
|
+
// Maven groupId of the native Android SDK. Migrated from io.opentelemetry.android
|
|
114
|
+
// (that namespace belongs to the OpenTelemetry project and cannot ship to Maven
|
|
115
|
+
// Central) to io.github.barrysolomon (Central Portal auto-verifies io.github.<user>
|
|
116
|
+
// against GitHub ownership). Consumers can override via -PDash0Mobile_sdkGroupId.
|
|
117
|
+
ext.dash0SdkGroupId = project.findProperty('Dash0Mobile_sdkGroupId') ?: 'io.github.barrysolomon'
|
|
118
|
+
|
|
119
|
+
// Pin the transitive kotlin-stdlib down to a version our Kotlin compiler can
|
|
120
|
+
// read. io.github.barrysolomon:mobile (>= 0.5.0-alpha) depends on
|
|
121
|
+
// opentelemetry-android 1.5.0, which transitively declares kotlin-stdlib 2.4.0.
|
|
122
|
+
// This module compiles with Kotlin 2.1.20 (matching RN 0.85's bundled Kotlin —
|
|
123
|
+
// see settings.gradle), and a 2.1.x compiler cannot parse 2.4.0 stdlib metadata:
|
|
124
|
+
// FirIncompatibleClassExpressionChecker throws "source must not be null" and the
|
|
125
|
+
// build dies with an internal compiler error. The SDK's own 2.2.10 classes are
|
|
126
|
+
// fine for 2.1.20; only the stdlib jump is fatal.
|
|
127
|
+
//
|
|
128
|
+
// Mirrors the demo-app's subprojects force. This also protects real RN hosts:
|
|
129
|
+
// any consumer on Kotlin 2.1.x autolinking this module would otherwise hit the
|
|
130
|
+
// same ICE. stdlib is backward-compatible, so pinning to 2.2.10 is safe.
|
|
131
|
+
configurations.all {
|
|
132
|
+
resolutionStrategy {
|
|
133
|
+
force "org.jetbrains.kotlin:kotlin-stdlib:2.2.10"
|
|
134
|
+
}
|
|
135
|
+
}
|
|
101
136
|
|
|
102
137
|
dependencies {
|
|
103
138
|
implementation "com.facebook.react:react-android:$reactAndroidVersion"
|
|
@@ -114,7 +149,7 @@ dependencies {
|
|
|
114
149
|
// (not `compileOnly`) so Kotlin can resolve transitive config classes
|
|
115
150
|
// (TextInputConfig, BreadcrumbConfig, VitalsConfig, etc.) referenced
|
|
116
151
|
// through MobileConfig's constructor signature.
|
|
117
|
-
implementation "
|
|
152
|
+
implementation "${dash0SdkGroupId}:mobile:${dash0SdkVersion}"
|
|
118
153
|
implementation 'io.opentelemetry:opentelemetry-api:1.58.0'
|
|
119
154
|
|
|
120
155
|
testImplementation 'junit:junit:4.13.2'
|
|
@@ -123,7 +158,7 @@ dependencies {
|
|
|
123
158
|
// on Java 25 ("Could not modify all classes ... ReactApplicationContext").
|
|
124
159
|
testImplementation 'org.mockito:mockito-core:5.18.0'
|
|
125
160
|
testImplementation 'org.mockito.kotlin:mockito-kotlin:5.4.0'
|
|
126
|
-
testImplementation "
|
|
161
|
+
testImplementation "${dash0SdkGroupId}:mobile:${dash0SdkVersion}"
|
|
127
162
|
testImplementation 'io.opentelemetry:opentelemetry-api:1.58.0'
|
|
128
163
|
|
|
129
164
|
// Network-interceptor unit tests: real OkHttp + the OTel SDK in-memory
|
|
@@ -10,10 +10,10 @@ org.gradle.jvmargs=-Xmx2g -Dfile.encoding=UTF-8
|
|
|
10
10
|
# 0.76-stable OkHttpClientProvider APIs and compiles here.)
|
|
11
11
|
Dash0Mobile_standaloneTestBuild=true
|
|
12
12
|
|
|
13
|
-
#
|
|
14
|
-
#
|
|
15
|
-
#
|
|
16
|
-
|
|
13
|
+
# NOTE: the native Android SDK version (io.opentelemetry.android:mobile) is NOT
|
|
14
|
+
# pinned here anymore — build.gradle derives it from this package's package.json
|
|
15
|
+
# `version` (the lockstep release version), so the consumer can't drift from the
|
|
16
|
+
# published SDK. Set -PDash0Mobile_sdkVersion only to pin an explicit override.
|
|
17
17
|
|
|
18
18
|
# Pin the Kotlin version the module's build.gradle reads (it defaults to
|
|
19
19
|
# 2.1.20 and honors this property) so stdlib matches the compiler the
|
|
@@ -369,11 +369,14 @@ private class InvalidContextSpanBuilder : io.opentelemetry.api.trace.SpanBuilder
|
|
|
369
369
|
override fun setNoParent() = this
|
|
370
370
|
override fun addLink(spanContext: io.opentelemetry.api.trace.SpanContext) = this
|
|
371
371
|
override fun addLink(spanContext: io.opentelemetry.api.trace.SpanContext, attributes: io.opentelemetry.api.common.Attributes) = this
|
|
372
|
-
|
|
372
|
+
// OTel API 1.63.0 added nullness annotations to SpanBuilder: the object-typed
|
|
373
|
+
// setAttribute value params are now @Nullable (String? / T?). The primitive
|
|
374
|
+
// overloads are unannotated (a primitive can't be null), so they stay non-null.
|
|
375
|
+
override fun setAttribute(key: String, value: String?) = this
|
|
373
376
|
override fun setAttribute(key: String, value: Long) = this
|
|
374
377
|
override fun setAttribute(key: String, value: Double) = this
|
|
375
378
|
override fun setAttribute(key: String, value: Boolean) = this
|
|
376
|
-
override fun <T : Any
|
|
379
|
+
override fun <T : Any> setAttribute(key: io.opentelemetry.api.common.AttributeKey<T>, value: T?) = this
|
|
377
380
|
override fun setSpanKind(spanKind: io.opentelemetry.api.trace.SpanKind) = this
|
|
378
381
|
override fun setStartTimestamp(startTimestamp: Long, unit: java.util.concurrent.TimeUnit) = this
|
|
379
382
|
// Span.getInvalid() carries an invalid SpanContext and is a no-op.
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EACV,UAAU,EAEV,uBAAuB,EAEvB,cAAc,EACd,QAAQ,EAER,WAAW,EACZ,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC9F,OAAO,EAAE,qCAAqC,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,MAAM,WAAW,UAAU;IACzB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IAClE,SAAS,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1D,GAAG,IAAI,IAAI,CAAC;CACb;AA8ED,wBAAgB,gCAAgC,IAAI,IAAI,CAGvD;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EACV,UAAU,EAEV,uBAAuB,EAEvB,cAAc,EACd,QAAQ,EAER,WAAW,EACZ,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC9F,OAAO,EAAE,qCAAqC,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,MAAM,WAAW,UAAU;IACzB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IAClE,SAAS,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1D,GAAG,IAAI,IAAI,CAAC;CACb;AA8ED,wBAAgB,gCAAgC,IAAI,IAAI,CAGvD;AA4CD,eAAO,MAAM,WAAW;kBACF,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;cAoFrC,MAAM,eAAc,UAAU,aAAiB,cAAc,GAAO,IAAI;oBAwBlE,MAAM,eAAc,UAAU,aAAiB,QAAQ,GAAgB,UAAU;SAsDtF,CAAC,QACJ,MAAM,MACR,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,eAC7B,UAAU,GACtB,OAAO,CAAC,CAAC,CAAC;uBAeL,MAAM,SACL,MAAM,mBACG,SAAS,GAAG,WAAW,GAAG,OAAO,eACrC,UAAU,GACrB,IAAI;yBAYoB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjD,4FAA4F;uBACnE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAOxD,4FAA4F;0BAChE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlD,4FAA4F;gCAC3D,MAAM,GAAc,OAAO,CAAC,IAAI,CAAC;IAOlE,4FAA4F;+BAC5D,MAAM,GAAc,OAAO,CAAC,IAAI,CAAC;gBAO/C,OAAO,CAAC,IAAI,CAAC;CAgBhC,CAAC;AA6EF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI,GAAG,IAAI,CAElF;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC"}
|
package/lib/index.js
CHANGED
|
@@ -105,7 +105,10 @@ function resolveNative() {
|
|
|
105
105
|
// callers and correlate issues to a specific bridge release. Keep this in
|
|
106
106
|
// sync with package.json on each release.
|
|
107
107
|
const DISTRO_NAME = 'dash0-react-native';
|
|
108
|
-
|
|
108
|
+
// Keep in lockstep with package.json `version`. The publish CI job asserts this
|
|
109
|
+
// equals the npm version + git tag + native gradle version
|
|
110
|
+
// (scripts/ci/check-version-parity.sh), so a drift here fails the release.
|
|
111
|
+
const DISTRO_VERSION = '0.5.2-alpha';
|
|
109
112
|
function resolveReactNativeVersion() {
|
|
110
113
|
try {
|
|
111
114
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/instrumentation/navigation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,UAAU,UAAU;IAClB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5D,eAAe,IAAI;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CACjD;AAED,wBAAgB,qCAAqC,CACnD,MAAM,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,GACpC,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/instrumentation/navigation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,UAAU,UAAU;IAClB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5D,eAAe,IAAI;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CACjD;AAED,wBAAgB,qCAAqC,CACnD,MAAM,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,GACpC,MAAM,IAAI,CAuEZ"}
|
|
@@ -28,7 +28,12 @@ export function installReactNavigationInstrumentation(navRef) {
|
|
|
28
28
|
return;
|
|
29
29
|
endCurrentSpan();
|
|
30
30
|
currentName = route.name;
|
|
31
|
-
|
|
31
|
+
// Semconv screen-name convergence (docs/SEMCONV_AUDIT.md): upstream
|
|
32
|
+
// opentelemetry-android renamed `screen.name` -> `app.screen.name` in 1.5.0.
|
|
33
|
+
// RN has a single screen-name emit site (unlike native's ~20), so we emit
|
|
34
|
+
// the new key directly here alongside the legacy `screen.name` alias rather
|
|
35
|
+
// than relying on a native choke-point mirror. The legacy alias drops at 1.0.
|
|
36
|
+
Dash0Mobile.log('ui.screen_view', { 'screen.name': route.name, 'app.screen.name': route.name }, 9);
|
|
32
37
|
currentSpan = Dash0Mobile.startSpan(`page.${route.name}`);
|
|
33
38
|
};
|
|
34
39
|
const unsub = navRef.addListener('state', onState);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@barrysolomon/mobile-react-native",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Dash0 Mobile Observability SDK for React Native (JS/TS bridge). For native iOS use the Swift Package at https://github.com/barrysolomon/mobile-otel. For native Android use io.
|
|
3
|
+
"version": "0.5.2-alpha",
|
|
4
|
+
"description": "Dash0 Mobile Observability SDK for React Native (JS/TS bridge) — OpenTelemetry auto-instrumentation for React Native apps: network/fetch spans, JS errors, crash recovery, offline buffering, native Android + iOS SDKs. For native iOS use the Swift Package at https://github.com/barrysolomon/mobile-otel. For native Android use io.github.barrysolomon:mobile from the public Maven repo (https://barrysolomon.github.io/mobile-otel/maven).",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib/index.js",
|
|
7
7
|
"types": "lib/index.d.ts",
|
|
@@ -34,10 +34,20 @@
|
|
|
34
34
|
"keywords": [
|
|
35
35
|
"react-native",
|
|
36
36
|
"opentelemetry",
|
|
37
|
+
"otel",
|
|
37
38
|
"observability",
|
|
38
39
|
"dash0",
|
|
39
40
|
"mobile",
|
|
40
|
-
"rum"
|
|
41
|
+
"rum",
|
|
42
|
+
"telemetry",
|
|
43
|
+
"tracing",
|
|
44
|
+
"monitoring",
|
|
45
|
+
"instrumentation",
|
|
46
|
+
"apm",
|
|
47
|
+
"crash-reporting",
|
|
48
|
+
"expo",
|
|
49
|
+
"android",
|
|
50
|
+
"ios"
|
|
41
51
|
],
|
|
42
52
|
"repository": "https://github.com/barrysolomon/mobile-otel",
|
|
43
53
|
"license": "Apache-2.0",
|
package/src/index.ts
CHANGED
|
@@ -142,7 +142,10 @@ function resolveNative(): NativeDash0MobileModule | null {
|
|
|
142
142
|
// callers and correlate issues to a specific bridge release. Keep this in
|
|
143
143
|
// sync with package.json on each release.
|
|
144
144
|
const DISTRO_NAME = 'dash0-react-native';
|
|
145
|
-
|
|
145
|
+
// Keep in lockstep with package.json `version`. The publish CI job asserts this
|
|
146
|
+
// equals the npm version + git tag + native gradle version
|
|
147
|
+
// (scripts/ci/check-version-parity.sh), so a drift here fails the release.
|
|
148
|
+
const DISTRO_VERSION = '0.5.2-alpha';
|
|
146
149
|
|
|
147
150
|
function resolveReactNativeVersion(): string | undefined {
|
|
148
151
|
try {
|
|
@@ -40,7 +40,16 @@ export function installReactNavigationInstrumentation(
|
|
|
40
40
|
endCurrentSpan();
|
|
41
41
|
|
|
42
42
|
currentName = route.name;
|
|
43
|
-
|
|
43
|
+
// Semconv screen-name convergence (docs/SEMCONV_AUDIT.md): upstream
|
|
44
|
+
// opentelemetry-android renamed `screen.name` -> `app.screen.name` in 1.5.0.
|
|
45
|
+
// RN has a single screen-name emit site (unlike native's ~20), so we emit
|
|
46
|
+
// the new key directly here alongside the legacy `screen.name` alias rather
|
|
47
|
+
// than relying on a native choke-point mirror. The legacy alias drops at 1.0.
|
|
48
|
+
Dash0Mobile.log(
|
|
49
|
+
'ui.screen_view',
|
|
50
|
+
{ 'screen.name': route.name, 'app.screen.name': route.name },
|
|
51
|
+
9,
|
|
52
|
+
);
|
|
44
53
|
currentSpan = Dash0Mobile.startSpan(`page.${route.name}`);
|
|
45
54
|
};
|
|
46
55
|
|