-
-
Notifications
You must be signed in to change notification settings - Fork 80.7k
iOS Location Always needs explicit permission flow and use-case contract #99229
Copy link
Copy link
Closed
Labels
P2Normal backlog priority with limited blast radius.Normal backlog priority with limited blast radius.clawsweeper:linked-pr-openClawSweeper found an open linked pull request for this issue.ClawSweeper found an open linked pull request for this issue.clawsweeper:needs-live-reproClawSweeper needs live local, crabbox, or manual validation to confirm this issue.ClawSweeper needs live local, crabbox, or manual validation to confirm this issue.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.ClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:needs-product-decisionClawSweeper marked this issue as needing a product or behavior decision.ClawSweeper marked this issue as needing a product or behavior decision.clawsweeper:needs-security-reviewClawSweeper marked this issue as needing security-sensitive review.ClawSweeper marked this issue as needing security-sensitive review.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.ClawSweeper does not recommend queueing a new automated fix PR for this issue.impact:securitySecurity boundary, credential, authz, sandbox, or sensitive-data risk.Security boundary, credential, authz, sandbox, or sensitive-data risk.issue-rating: 🐚 platinum hermitGood issue quality with a plausible reproduction path needing some confirmation.Good issue quality with a plausible reproduction path needing some confirmation.maturity:stableIssue affects a taxonomy feature currently scored M4/M5.Issue affects a taxonomy feature currently scored M4/M5.staleMarked as stale due to inactivityMarked as stale due to inactivity
Description
Metadata
Metadata
Assignees
Labels
P2Normal backlog priority with limited blast radius.Normal backlog priority with limited blast radius.clawsweeper:linked-pr-openClawSweeper found an open linked pull request for this issue.ClawSweeper found an open linked pull request for this issue.clawsweeper:needs-live-reproClawSweeper needs live local, crabbox, or manual validation to confirm this issue.ClawSweeper needs live local, crabbox, or manual validation to confirm this issue.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.ClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:needs-product-decisionClawSweeper marked this issue as needing a product or behavior decision.ClawSweeper marked this issue as needing a product or behavior decision.clawsweeper:needs-security-reviewClawSweeper marked this issue as needing security-sensitive review.ClawSweeper marked this issue as needing security-sensitive review.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.ClawSweeper does not recommend queueing a new automated fix PR for this issue.impact:securitySecurity boundary, credential, authz, sandbox, or sensitive-data risk.Security boundary, credential, authz, sandbox, or sensitive-data risk.issue-rating: 🐚 platinum hermitGood issue quality with a plausible reproduction path needing some confirmation.Good issue quality with a plausible reproduction path needing some confirmation.maturity:stableIssue affects a taxonomy feature currently scored M4/M5.Issue affects a taxonomy feature currently scored M4/M5.staleMarked as stale due to inactivityMarked as stale due to inactivity
Type
Fields
Priority
None yet
Summary
The iOS app exposes a Location setting with
Off,While Using, andAlways, and the runtime already has code paths that depend onAlwaysfor background location. But the product/use-case contract is still under-specified: users need a clear, intentional permission flow that explains whenAlwaysis useful, why the app is asking, and what behavior changes when they choose it.This is related to #86217, which tracks the lower-level
UIBackgroundModes=location/ bundle configuration decision. This issue is about the user-facing feature shape and acceptance criteria aroundAlwayslocation.Current source state
From current iOS source inspection:
Settings -> LocationoffersOff,While Using, andAlways.LocationService.ensureAuthorization(mode:)can callrequestAlwaysAuthorization()afterauthorizedWhenInUse.NodeAppModel.handleLocationInvokerejects backgroundlocation.getunless the app mode is.alwaysand iOS authorization isauthorizedAlways.SignificantLocationMonitoronly starts for.alwaysplusauthorizedAlways, then sendslocation.updateevents to the gateway.Info.plistcopy says OpenClaw can share location in the background when Always is enabled.locationbackground mode or remove/soften the background-location claim.Use cases that justify an explicit Always flow
These are the use cases worth designing for if maintainers keep background location as an intended iOS capability:
Presence-aware automations
Gateway-initiated location query while the app is not foregrounded
location.getwhen the phone app is in the background.Always, granted iOSAlways, and the command policy allows location access.Significant-location wake events
location.updateevent.Context for mobile assistant workflows
Reliability across foreground/background transitions
While Usingis enough for an active foreground request.Alwaysis required for background requests and location-change wakes.Alwaysbut end up with onlyWhen In Useat the OS level.Product / privacy requirements
If this feature remains intended:
Off.Alwaysmust be an explicit user action, not implied by enabling general device capabilities.Always;Always;While Using,Always, denied, restricted, or not determined;Always.Acceptance criteria
Location -> Alwaysfollows a deliberate flow:When In Usefirst when needed;Always;When In Use.location.getand significant-location updates work only with app mode.alwaysand iOSauthorizedAlways.UIBackgroundModes=locationto the processed app bundle and keeping docs/copy/runtime aligned.Alwaysoption, background runtime paths, and background-location copy are removed or softened together.Alwaysrequest flow state transitions;location.getallowed/blocked behavior;Suggested implementation shape
OpenClawLocationModemodel, but distinguish desired app mode from effective OS authorization in the UI.LocationService.ensureAuthorization(mode:)as the platform boundary, but avoid relying on a single picker change to communicate the privacy meaning of Always.Open questions