M2-04: Location opt-in and the permission prompt #31
Labels
No labels
area/agent
area/capture
area/editor
area/geo
area/security
area/sync
area/transcription
area/ui
area/vault
area/voice-memos
blocked
milestone/M1
milestone/M2
milestone/M3
milestone/M4
needs-decision
needs-hardware
p0
p1
p2
type/bug
type/enhancement
type/feature
type/idea
type/infrastructure
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Stash/stash-ios#31
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
A Settings toggle that turns location capture on, and the entitlement prompt behind it.
Wes: "GPS tracking as an opt-in setting. Prompt for the location entitlement, collect only while
recording a memo."
Why this is its own issue
Nothing is collected until this is on, so it lands before anything that collects. It is also the
whole privacy surface of the feature in one screen, which makes it worth reviewing on its own
rather than buried in the change that starts a
CLLocationManager.The authorization decision
Decided 2026-08-08: "When In Use", with background location updates.
allowsBackgroundLocationUpdateson a When-In-Use authorization is what keeps points arrivingwhile the phone is locked and Stash is in the background — which is every recording that matters,
because roughly all of them happen on a walk. It requires
locationinUIBackgroundModesalongside the
audiomode already there.The accepted cost: the blue location indicator will sit on the lock screen next to the Live
Activity for the whole recording. "Always" authorization avoids the indicator and was rejected
as asking for far more than a voice memo needs — Stash has no reason to know where the phone is
when it is not recording.
Scope
to Settings. A toggle that reads as on while iOS is refusing is the failure to avoid.
disk.
otherwise, written to a
.gpxbeside the memo and never sent anywhere — there is no sync untilM3, and the relay is blind by design when it arrives.
empty state. One string source used in both places: two descriptions of a privacy behaviour is
how they drift, and the one nobody updates is the one somebody reads.
Not in this
No collection, no writing, no map. The toggle sets a preference and holds the authorization; the
next two issues use it.
Done when
Milestone 2 of the Stash v3 rebuild. M2 is still app-side — no sync, no account, no server. It
turns a list of memos into something you can open, listen to, read and see the route of. Sync
arrives in M3. There is no
milestone/M2label yet (creating org labels needs owner rights), sothe title carries the milestone.
Working agreement for every issue in this repo: feature branch, tested before the PR opens
(on-device where the label says so), then Wes reviews the PR and we walk the code together. Docs
update in the same commit. A PR that takes more than 20 minutes to review is too big — say so and
split it.