iOS Internals · iPhone Privacy Controls · Lesson 1 of 5
Permissions & Purpose Strings
Read iPhone permission prompts closely and choose exactly what an app gets.
Who's asking, and why
You saw in Mobile Fundamentals that apps have to ask before they touch private data like your location or photos. On an iPhone, the question you answer always comes from iOS itself. An app can show its own screen first to explain what's coming, but only the system prompt can actually grant access.
Every system prompt includes a short message written by the app's developer, called a purpose string. Apple's developer documents call it a usage description. For example: "TrailSnap uses your location to show nearby trails." Developers must include one for each kind of protected data they want. Without it, the request fails, and for some data, such as photos and contacts, the app crashes when it tries. Apple's App Review rules also say purpose strings must clearly and completely describe how the data is used.
Remember who wrote it, though. The purpose string is the developer's own words, not a guarantee from Apple. Read it and ask whether it matches what the app is for.
For location, the first prompt offers three choices:
- Allow Once gives the app your location for this session only. Once you're done with the app, the permission resets, and the app has to ask again next time. This option arrived in iOS 13.
- Allow While Using App lets the app get your location whenever it's in use.
- Don't Allow blocks location completely.
The prompt also has a Precise switch, added in iOS 14. Switch it off and the app learns only your approximate area, which is plenty for weather or local news, but not your exact street.
Notice what's missing: there's no Always button on that first prompt. You'll see how an app gets background access in the next module.
On the simulated phone, open TrailSnap and read the purpose string in each prompt. Try Allow Once with Precise switched off, answer the Photos prompt, then check the summary of what the app got.
Photos, contacts and the Settings lists
Photos and contacts hold other people's lives as well as yours, so iOS gives you finer choices for them.
Since iOS 14, Photos offers limited access. Instead of handing over your whole library, you pick specific photos and videos, and the app can see only those. You can add or remove photos later. Many apps don't need to ask at all. When an app opens Apple's built-in photo picker, the picker runs separately from the app, and the app receives only the photos you choose, with no permission prompt.
In iOS 17, Apple redesigned the prompt for full access. It now shows how many photos and videos the app would get, plus a sample of them, so Allow Full Access means something concrete. iOS also reminds you from time to time when an app still has full access, so you can switch it to limited.
iOS 18 brought the same idea to contacts. When an app asks, you can allow full access, deny it, or choose limited access and pick individual people. With limited access, the app sees only the contacts you picked, plus any it created itself. One catch: an app you gave full access before iOS 18 keeps full access until you change it.
To review everything, go to Settings, Privacy & Security. Tap a category such as Photos, Contacts, Camera or Microphone to see each app that asked and what it has. An app only appears in a list after it has asked. For contacts, tap Contacts, then the app, and choose its level. With limited access, tap Edit Selected Contacts to add or remove people. Location sits on the same screen, under Location Services.
Changing your mind is safe. A well-built app keeps working and only loses the feature that needed that permission.
Can you answer these?
- You chose Allow Once for TrailSnap's location yesterday. Today you open TrailSnap and it wants your location again. What happens?
- A collage app asks for your photo library, but you only want it to see the five beach pictures you're using. What kind of Photos access do you give it, in one word?
Answer them in the app to earn 60 XP.
Answer in the app