Skip to content

Play upload: drop the Bluetooth plugin's capped location permissions, fail on rejection - #273

Merged
bubulux merged 1 commit into
mainfrom
fix/play-upload-location-permission
Oct 27, 2026
Merged

bubulux merged 1 commit into
mainfrom
fix/play-upload-location-permission

Conversation

@bubulux

@bubulux bubulux commented Oct 27, 2026

Copy link
Copy Markdown
Collaborator

The v0.13.0 Staging · Update built and "uploaded" the staging app, but Google Play still shows 0.11.0.

What went wrong

  • Play rejected the bundle: Duplicate declarations of <uses-permission> element 'android.permission.ACCESS_COARSE_LOCATION' in manifest with different maxSdkVersions.
  • Cause: @sfourdrinier/react-native-ble-plx (lights Lights 1: fixtures foundation, Worker sync, BLE link and pairing #208) with neverForLocation: true declares both location permissions again as uses-permission-sdk-23 capped at maxSdkVersion 30, next to the app's own uncapped declarations (app.json, expo-location). v0.12.0 was the last bundle before the plugin and uploaded fine; every bundle since would be rejected, production included.
  • The run stayed green because the upload step piped the script into tee, so the step took tee's exit code.

Fix

  • withUncappedLocation in apps/mobile/app.config.ts removes the capped copies; Bluetooth scanning keeps neverForLocation.
  • set -o pipefail in the upload step of build-phone-app.yml: a rejected upload now fails the run.
  • Known issues: a note on the plugin interaction.

Checked

  • expo config --type introspect (production and staging): before, two uses-permission-sdk-23 location entries with maxSdkVersion 30; after, each location permission once, uncapped.
  • make check green.
  • Not yet checked against Play itself: the next Staging · Update shows it.

🤖 Generated with Claude Code

… fail on rejection

Google Play rejected the v0.13.0 staging bundle: the ble-plx plugin with
neverForLocation declares ACCESS_COARSE/FINE_LOCATION again as
uses-permission-sdk-23 with maxSdkVersion 30, next to the app's own
uncapped declarations. withUncappedLocation removes the capped copies.

The rejection went unnoticed because the upload step piped into tee and
took its exit code; set -o pipefail makes a rejected upload fail the run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@bubulux
bubulux merged commit c1ddf91 into main Oct 27, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant