Skip to content

Native permissions framework facilitating collecting users access approval to Camera, Photo Library, Microphone, Contacts, Location, Notifications and Tracking.

License

Notifications You must be signed in to change notification settings

macistador/PermissionsKit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PermissionsKit

Native permissions framework facilitating collecting users access approval to Camera, Photo Library, Microphone, Contacts, Location, Notifications and Tracking.

Features

  • Get permissions status and be notified by changes
  • Ask for permissions with built-in pre-prompts
  • Re-engage with built-in re-optins prompts

Requirements

  • iOS 15.0+
  • Xcode 12.0+
  • Swift 5.5+

Installation

SwiftPackageManager

dependencies: [
    .package(url: "https://github.com/macistador/PermissionsKit", from: "0.0.4")
]

Supported permissions

  • Contacts
  • Address book
  • Location (always / in use / once)
  • Microphone
  • Photos Library
  • Push Notifications
  • Tracking (ATT)

Usage

Without built-in prompts

    let permissionsService = PermissionsService()
        
    // Ask for the permission
    permissionsService.askTrackingPermission()
        
    // Get the permission status
    let trackingPermissionStatus = permissionsService.trackingPermissionStatus
    
    // Know if the permission has been granted previously
    let hasGrantedTrackingPermission = permissionsService.hasGrantedTrackingPermission

With built-in prompts

With SwiftUI as a subview

    var permissionsService = PermissionsService()
    var trackingPermissionStatus: TrackingPermissionStatus?
    
    var body: some View {
        VStack {
            if trackingPermissionStatus == .notDetermined {
                PermissionPromptView(.preprompt(reoptinFallback: true), for: permission, title: "Hey there we need this permission!") { hasGrantedPermission in
                    if hasGrantedPermission {
                        trackingPermissionStatus = .granted
                    }
                }
            } else if trackingPermissionStatus == .denied {
                PermissionPromptView(.reoptin, for: permission, title: "Hey there please change your mind!") { hasGrantedPermission in
                    if hasGrantedPermission {
                        trackingPermissionStatus = .granted
                    }
                }
            } else {
                [...]
            }      
        }
        .task {
            trackingPermissionStatus = permissionsService.trackingPermissionStatus
        }
    }

With SwiftUI as a modal

    var permissionsService = PermissionsService()
    @State var showPrepromptForPermission: PermissionsKit.Permission?
    @State var showReoptinForPermission: PermissionsKit.Permission?
    
    var body: some View {
        [...]
        .task {
            let trackingPermissionStatus = permissionsService.trackingPermissionStatus
            if trackingPermissionStatus == .notDetermined {
                showPrepromptForPermission = true
            } else if trackingPermissionStatus == .denied {
                showReoptinForPermission = true
            }
        }
        .sheet(item: $showPrepromptForPermission) { permission in
            PermissionPromptView(.preprompt(reoptinFallback: true), for: permission, title: "Hey there we need this permission!") { hasGrantedPermission in
                showPrepromptForPermission = nil
                if hasGrantedPermission {
                    [...]
                }
            }
        }
        .sheet(item: $showReoptinForPermission) { permission in
            PermissionPromptView(.reoptin, for: permission, title: "Hey there please change your mind!") { hasGrantedPermission in
                showReoptinForPermission = nil
                if hasGrantedPermission {
                    [...]
                }
            }
        }
    }

With UIKit

    
    [TBD...]

For more details you may take a look at the sample project.

Other packages

Meanwhile this library works well alone, it is meant to be complementary to the following app bootstrap packages suite:

Credits

PermissionsKit is developed and maintained by Michel-André Chirita. You can follow me on Twitter at @Macistador for updates.

License

PermissionsKit is released under the MIT license. See LICENSE for details.

About

Native permissions framework facilitating collecting users access approval to Camera, Photo Library, Microphone, Contacts, Location, Notifications and Tracking.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages