@@ -18,6 +18,7 @@ SDK v7.2.x — the platform asymmetry is hidden behind a shared TS contract.
1818- [ Running the example app] ( #running-the-example-app )
1919- [ Repo layout] ( #repo-layout )
2020- [ Developing the package] ( #developing-the-package )
21+ - [ Upgrading] ( #upgrading )
2122- [ Releasing] ( #releasing )
2223
2324## Install in your app
@@ -268,6 +269,90 @@ re-install.
268269 re-running ` npx expo prebuild --clean ` in ` example/ ` . The injected blocks
269270 are wrapped in ` @generated ` markers and de-duplicated on re-run.
270271
272+ ## Upgrading
273+
274+ The repo has four independent upgrade axes — keep them as separate PRs / commits
275+ so [ release-please] ( #releasing ) classifies each one correctly. The iOS and
276+ Android SDK versions drift on purpose (see [ AGENTS.md] ( AGENTS.md ) ) — don't align
277+ them just because they're both bumpable.
278+
279+ ### Where to check for new versions
280+
281+ | What | Source |
282+ | --- | --- |
283+ | MotionTag iOS SDK changelog | [ api.motion-tag.de/developer/ios?locale=en&os_aspect=changelog] ( https://api.motion-tag.de/developer/ios?locale=en&os_aspect=changelog ) |
284+ | MotionTag iOS integration guide | [ api.motion-tag.de/developer/ios?locale=en&os_aspect=sdk] ( https://api.motion-tag.de/developer/ios?locale=en&os_aspect=sdk ) |
285+ | MotionTag Android SDK changelog | [ api.motion-tag.de/developer/android?locale=en&os_aspect=changelog] ( https://api.motion-tag.de/developer/android?locale=en&os_aspect=changelog ) |
286+ | MotionTag Android integration guide | [ api.motion-tag.de/developer/android?locale=en&os_aspect=sdk] ( https://api.motion-tag.de/developer/android?locale=en&os_aspect=sdk ) |
287+ | Expo SDK upgrade walkthrough | [ docs.expo.dev/workflow/upgrading-expo-sdk-walkthrough] ( https://docs.expo.dev/workflow/upgrading-expo-sdk-walkthrough/ ) |
288+ | Expo config-plugins changelog | [ github.com/expo/expo/.../config-plugins/CHANGELOG.md] ( https://github.com/expo/expo/blob/main/packages/%40expo/config-plugins/CHANGELOG.md ) |
289+ | react-native-builder-bob releases | [ github.com/callstack/react-native-builder-bob/releases] ( https://github.com/callstack/react-native-builder-bob/releases ) |
290+ | React Native upgrade helper (rarely needed here) | [ react-native-community.github.io/upgrade-helper] ( https://react-native-community.github.io/upgrade-helper/ ) |
291+
292+ The two MotionTag changelog endpoints are the authoritative source — the vendor
293+ doesn't publish a GitHub release feed. Both ` locale=en ` and ` locale=de ` work.
294+
295+ ### Pinned versions to compare against
296+
297+ | Axis | Pinned in | Currently |
298+ | --- | --- | --- |
299+ | iOS SDK | [ ` react-native-motiontag.podspec ` ] ( react-native-motiontag.podspec ) | ` MotionTagSDK ~> 6.5.0 ` |
300+ | Android SDK | [ ` android/build.gradle ` ] ( android/build.gradle ) | ` de.motiontag:tracker:7.2.5 ` |
301+ | Example Expo SDK | [ ` example/package.json ` ] ( example/package.json ) | ` expo ~55 ` |
302+ | Library build tooling | [ ` package.json ` ] ( package.json ) | ` react-native-builder-bob ` , ` @expo/config-plugins ` , ` typescript ` |
303+
304+ ### When the changelog mentions integration changes
305+
306+ A version bump is ** not** "just" a version bump when the changelog touches:
307+
308+ - iOS ` Info.plist ` keys (especially ` BGTaskSchedulerPermittedIdentifiers ` and
309+ ` UIBackgroundModes ` ) → update both the [ bare-RN snippet above] ( #ios--appdelegateswift )
310+ and the Expo plugin's Info.plist injection in ` plugin/ ` .
311+ - iOS bootstrap signature (` MotionTagBootstrap.bootstrap ` ,
312+ ` processBackgroundSessionEvents ` ) → update ` ios/MotionTagBootstrap.swift ` , the
313+ README snippet, and the plugin's AppDelegate injection.
314+ - Android manifest permissions or foreground-service contract → update
315+ ` android/src/main/AndroidManifest.xml ` , the plugin's manifest edits, and the
316+ Android section above.
317+ - Android bootstrap signature (` MotionTagBootstrap.init ` ) → update the Kotlin
318+ source, the README snippet, and the plugin's MainApplication injection.
319+
320+ Treat these as ` feat: ` (or ` feat!: ` if hosts must change code) rather than
321+ ` fix: ` so release-please bumps the minor/major correctly.
322+
323+ ### Bumping the example app's Expo SDK
324+
325+ The library itself is SDK-agnostic — only ` example/ ` pins an Expo version:
326+
327+ ``` sh
328+ cd example
329+ npx expo install expo@< target>
330+ npx expo install --fix # realigns react, react-native, expo-*
331+ npx expo prebuild --clean # mandatory across SDK majors
332+ npx expo run:ios && npx expo run:android
333+ ```
334+
335+ If the new Expo SDK pulls in an RN version above this package's peer range
336+ (` react-native >=0.79.0 ` ), widen the peer range in the root ` package.json ` in
337+ the same PR. Don't tighten the lower bound.
338+
339+ ### Verifying before opening the PR
340+
341+ After any axis bump:
342+
343+ ``` sh
344+ yarn install && yarn prepare # at the root
345+ npx tsc -p tsconfig.build.json --noEmit # typecheck
346+ cd example && yarn install
347+ npx expo prebuild --clean
348+ npx expo run:ios # ideally on a device
349+ npx expo run:android # ideally on a device
350+ ```
351+
352+ Walk the golden path in the example: paste JWT → start → events stream → stop.
353+ Simulators can't generate motion-sensor data, so a physical device is the only
354+ way to fully validate a MotionTag SDK bump.
355+
271356## Releasing
272357
273358Releases are fully automated via [ release-please] ( https://github.com/googleapis/release-please )
0 commit comments