In contrast to other answers, there is an official list of permissions that are asked at runtime. It is in the iOS Security Guide (p. 84):
iOS helps prevent apps from accessing a user’s personal information without permission. Additionally, in Settings, users can see which apps they have permitted to access certain information, as well as grant or revoke any future access. This includes access to:
- Contacts
- Calendars
- Reminders
- Photos
- Motion activity and fitness
- Location Services
- Apple Music
- Your music and video activity
- Microphone
- Camera
- HomeKit
- Health
- Speech recognition
- Bluetooth sharing
- Your media library
If the user signs in to iCloud, apps are granted access by default to iCloud Drive. Users may control each app’s access under iCloud in Settings. Additionally, iOS provides restrictions that prevent data movement between apps and accounts installed by an MDM solution and those installed by the user.
Since iOS 10 it is required to provide a description for the requested permission. In the developer documentation of the frameworks you will see if such a description is required and accessing it's API will lead to an permission prompt (or crash if not description is given), e.g. see the hint in the developer documentation of the Contacts
framework:
Important
An iOS app linked on or after iOS 10.0 must include in its Info.plist
file the usage description keys for the types of data it needs to access or it will crash. To access Contacts data specifically, it must include NSContactsUsageDescription
.
Additionally, a good source of available permissions for each iOS/macOS version is in the Information Property List Key Reference (search for UsageDescription
contained in words).
There is at least one other undocumented permission that requires user consent at runtime: