• Stars
    star
    5,609
  • Rank 7,281 (Top 0.2 %)
  • Language
    Swift
  • License
    MIT License
  • Created almost 8 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Universal API for request permission and get its statuses.

PermissionsKit

Universal API for request permission and get its statuses β€” available .authorized, .denied & .notDetermined.

iOS Dev Community

Navigate

Permissions

Icon Permission Key for Info.plist Get Status Make Request
Bluetooth NSBluetoothAlwaysUsageDescription, NSBluetoothPeripheralUsageDescription βœ… βœ…
Calendar NSCalendarsUsageDescription, NSCalendarsFullAccessUsageDescription, NSCalendarsWriteOnlyAccessUsageDescription βœ… βœ…
Camera NSCameraUsageDescription βœ… βœ…
Contacts NSContactsUsageDescription βœ… βœ…
FaceID NSFaceIDUsageDescription β˜‘οΈ βœ…
Health NSHealthUpdateUsageDescription, NSHealthShareUsageDescription βœ… βœ…
Location NSLocationAlwaysAndWhenInUseUsageDescription NSLocationWhenInUseUsageDescription βœ… βœ…
Media Library NSAppleMusicUsageDescription βœ… βœ…
Microphone NSMicrophoneUsageDescription βœ… βœ…
Motion NSMotionUsageDescription βœ… βœ…
Notification βœ… βœ…
Photo Library NSPhotoLibraryUsageDescription, NSPhotoLibraryAddUsageDescription βœ… βœ…
Reminders NSRemindersUsageDescription, NSRemindersFullAccessUsageDescription βœ… βœ…
Siri NSSiriUsageDescription βœ… βœ…
Speech Recognizer NSSpeechRecognitionUsageDescription βœ… βœ…
Tracking NSUserTrackingUsageDescription βœ… βœ…

Installation

Ready to use on iOS 11+. Supports iOS, tvOS. Working with UIKit and SwiftUI.

Swift Package Manager

In Xcode go to Project -> Your Project Name -> Package Dependencies -> Tap Plus. Insert url:

https://github.com/sparrowcode/PermissionsKit

Next, choose the permissions that you need. But don't add all of them, because apple will reject app. Or adding it to the dependencies of your Package.swift:

dependencies: [
    .package(url: "https://github.com/sparrowcode/PermissionsKit", .upToNextMajor(from: "10.0.1"))
]

and choose valid targets.

CocoaPods:

This is an outdated way. I advise you to use SPM. However, I will continue to support Cocoapods for some time.

Cocoapods Installation

CocoaPods is a dependency manager. For usage and installation instructions, visit their website. To integrate using CocoaPods, specify it in your Podfile:

pod 'PermissionsKit/NotificationPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'

Due to Apple's new policy regarding permission access you need to specifically define what kind of permissions you want to access using subspecs.

pod 'PermissionsKit/CameraPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/ContactsPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/CalendarPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/PhotoLibraryPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/NotificationPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/MicrophonePermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/RemindersPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/SpeechRecognizerPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/LocationWhenInUsePermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/LocationAlwaysPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/MotionPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/MediaLibraryPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/BluetoothPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/TrackingPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/FaceIDPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/SiriPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'
pod 'PermissionsKit/HealthPermission', :git => 'https://github.com/sparrowcode/PermissionsKit'

Why Modules

If put all code to one package and compile it, Apple Review Team will see a lot of calls to permissions API and ask you provide reason why you really need it permissions. Modules allow compile only really using code parts. Just select only which you need.

Warning

Import only the permissions you really need.

Request Permission

import PermissionsKit
import NotificationPermission

Permission.notification.request {
    
}

Get Status Permission

import PermissionsKit
import NotificationPermission

let authorized = Permission.notification.authorized

Warning

For FaceID permission no way detect if request .authorized or .notDetermined accurate. Status .denied detect well. For now for both states return .notDetermined.

Keys in Info.plist

You need to add some strings to the Info.plist file with descriptions per Apple's requirements. You can get a plist of keys for permissions as follows:

let key = Permission.bluetooth.usageDescriptionKey

Note

Do not use the description as the name of the key. Xcode can't build this.

Localisation

If you use xliff localization export, keys will be create automatically. If you prefer do the localization file manually, you need to create InfoPlist.strings, select languages on the right side menu and add keys as keys in plist-file. See:

"NSCameraUsageDescription" = "Here description of usage camera";

Apps Using

If you use a PermissionsKit, add your app via Pull Request.