WLOC

Core Location · permission QA

Test the permission journey, not only the Allow button

iOS location permission testing needs more than one successful system prompt. People can deny a request, allow access only while using the app, change the choice later in Settings, or limit accuracy. A useful matrix pairs each platform state with the exact feature that requested it, the explanation a person saw, the fallback they can use, and the result after authorization changes.

ByWLOC Product & QA TeamPractical location testing guidance
References4 cited linksPlatform, policy, and product documentation
RegionUnited StatesExamples and terminology for U.S. readers
UpdatedPlatform and policy links checked

Direct answer

Which iOS location permission states should an app test?

Cover not determined, denied, restricted, When In Use, and Always where the product truly requires it. Cross those states with full and reduced accuracy where available, plus app relaunch and a Settings change. Verify the usage description, request timing, authorization callback, product fallback, and data minimization at each supported branch.

Before you begin

Who this guide is for

iOS product, privacy, accessibility, and QA teams validating an owned U.S. app's Core Location request and fallback experience

Run this permission matrix on your own app and approved test devices. Supplying a mock location or developer fixture does not grant consent, and it must never be used to obscure how the product handles a person's privacy choice.

Key checks

Work through the guide

Start with the section that matches your task, then follow the evidence and recovery steps before calling the test complete.

01

Request the least access at the moment it becomes understandable

Apple describes When in Use as the preferred authorization level because of its privacy and battery implications, and reserves Always access for features that need delivery outside active use. Test that the app asks only after a person reaches a feature whose value is clear. A prompt on first launch, before any relevant action, makes the usage description carry too much explanatory work and gives the team little evidence about informed intent.

The Info.plist usage string and the in-app context should agree in plain language. Verify the When in Use description whenever the app requests location, and the additional Always description if the product requests elevated access. Apple documents that missing required usage keys can cause authorization requests to fail. Include a release-build check so a development configuration cannot hide a missing or inaccurate string.

  • Tie the request to a user-initiated feature such as nearby results or trip recording.
  • Explain the feature benefit, not a vague need to improve the experience.
  • Prefer When in Use unless a documented background behavior requires more.
  • Verify every shipping localization of the usage description.
02

Treat authorization level and accuracy as separate axes

An allowed app may still receive reduced rather than full accuracy. Check CLLocationManager accuracyAuthorization and design the feature for the precision it actually needs. A city-level discovery screen may work well with approximate data; a turn-by-turn or narrow-boundary feature may need to explain why temporary full accuracy is useful at the moment of use. Do not repeatedly pressure people who keep reduced accuracy.

Apple's API reference notes that reduced accuracy affects requested precision and prevents region monitoring and beacon ranging. A permission matrix must therefore assert feature capability, not merely a green authorization label. If geofencing is unavailable under the chosen accuracy, present an honest alternative such as a manual place, saved region, or foreground check instead of silently showing stale results.

  • Record CLAuthorizationStatus and CLAccuracyAuthorization independently.
  • Test the same screen with full and reduced accuracy where the feature supports both.
  • Request temporary full accuracy only for a named, immediate purpose.
  • Keep a usable fallback when precise data is declined.
03

Verify denial, Settings changes, relaunch, and data cleanup

Denial is a normal product state, not a broken test. The app should preserve the user's work, explain which feature is unavailable, and offer a non-coercive path to Settings only when changing the decision would restore a requested function. Test Restricted separately because the person may not be able to change it. A manual city, address, or map search can keep many experiences useful without automatic location.

People can change authorization while the app exists, so observe the platform's authorization-change callback or asynchronous diagnostics and update the interface without requiring a reinstall. Test foreground change, background-to-foreground return, and relaunch. Verify that revoking access stops unnecessary collection, clears transient precise data according to policy, and does not leave a spinner, stale nearby label, or hidden background session.

Use a fixed developer location only after the permission branch is established. Otherwise a successful coordinate fixture can disguise a missing consent flow. A GPS changer, fake GPS label, or selected map pin is never evidence that iOS granted access. Keep the permission decision, the location input, and the product result as three separate entries in the QA record.

  • Cover deny on first request and a later Settings change without reinstalling.
  • Verify Restricted copy does not promise that Settings can always fix access.
  • Stop active services and background work after revocation.
  • Test manual and no-location modes for accessibility and data freshness.

Decision table

A practical iOS permission matrix

Pair platform state with a product expectation. Add only the combinations that the feature and supported OS versions can actually reach.

StateExpected product behaviorEvidence
Not determinedExplain value before the system requestTrigger action, usage string, prompt timing
DeniedKeep the app usable and offer a relevant fallbackFallback task, Settings guidance, no new collection
RestrictedExplain unavailability without blaming the userDistinct copy and disabled location-only action
When in Use + full accuracyRun the foreground feature at required precisionStatus, accuracy authorization, fresh result
When in Use + reduced accuracyUse approximate behavior or explain a narrow limitationApproximate result, fallback, no repeated pressure
Always authorizationDeliver only the documented background featureElevation flow, indicator, background event
Authorization revoked in SettingsStop services and refresh UI on returnChange callback, cleared state, manual alternative

Practical playbook

Turn one location feature into a permission test suite

Anchor the matrix to a real user task so privacy, functionality, and recovery are evaluated together.

  1. 1Name the minimum needDocument why the feature needs location, whether foreground access is enough, and what precision changes the result.
  2. 2Write the supported branchesDefine not determined, allowed, denied, restricted, reduced accuracy, elevated access if needed, and the manual fallback.
  3. 3Prepare isolated statesStart each test with known authorization, accuracy, account, cache, and developer location inputs rather than depending on prior order.
  4. 4Change and recoverModify permission in Settings, return or relaunch, verify the updated UI, stop disallowed collection, and prove the fallback remains useful.

References

Verify the claims in this guide

Open the references below for the platform documentation, service policies, and product boundaries used in the guide.

Apple authorization source

Requesting authorization to use location services

When in Use and Always choices, usage descriptions, request timing, and authorization changes.

Open the source ↗
Apple API reference

CLLocationManager accuracyAuthorization

How full and reduced accuracy affect requested precision and region-monitoring capability.

Open the source ↗
Apple API reference

CLAuthorizationStatus

The not-determined, restricted, denied, When in Use, and Always states an app handles.

Open the source ↗
Apple privacy source

Protecting the user's privacy

Apple's platform guidance for purpose strings and access to protected resources.

Open the source ↗

FAQ

Core Location · permission QA FAQ

Should an iPhone app request Always authorization first?

Usually no. Apple recommends When in Use as the preferred level and says to request Always only when necessary for the product's background behavior. Test a contextual, staged flow.

Is Precise Location the same as allowing location?

No. Authorization level and accuracy authorization are separate. A person can allow access while providing reduced accuracy, and the product should have a defined result for that state.

Does a mock location bypass denied permission?

No. A controlled developer input does not replace consent. Establish and assert the authorization branch separately from the coordinate supplied to the test.

What should happen when location is denied?

Preserve the user's task where possible with a manual city, address, map search, or non-location mode. Explain the limited feature without coercion and collect no new location data.

Do I need to reinstall for every permission test?

Not necessarily. Use approved test-state controls for isolation, and also test a real Settings change plus relaunch because that is a customer path. The result must not depend on suite order.

Why does geofencing fail with allowed permission?

Check accuracy authorization as well as the main status. Apple's documentation says reduced accuracy prevents region monitoring, so the app needs an appropriate explanation or alternative.

WLOC

Prepare a test you can verify and reverse

WLOC organizes coordinates, compatible setup, diagnostics, and recovery for iPhone testing on devices, apps, accounts, and environments you own or are authorized to test.