Swift 4 library that simplifies iOS user permission requests (push notifications, location, camera, photo library, contacts, calendar).
Just add ICanHas.swift to your Xcode project (I know, I know).
Use the provided method every time you need to make sure that the app has permissions to access the corresponding service. The first time a function is called, it may prompt the user to allow that service on a native alert view. See the examples below
ICanHas.location { authorized, status in
print(authorized ? "You're authorized to use location!" : "You're not authorized to use location!")
}💡 You may specify whether you would like the app to be able to access location while in the background, and/or the location manager you will be using, as follows:
let myManager = CLLocationManager()
ICanHas.location(background: false, manager: myManager) { ... }💡 Also make sure to add the NSLocationWhenInUseUsageDescription or NSLocationAlwaysUsageDescription key to your Info.plist file. More info here.
ICanHas.push { authorized in
print(authorized ? "You're authorized to send push notes!" : "You're not authorized to send push notes!")
}💡 This function has one optional parameter types: UIUserNotificationType which specifies the user notification types for which you would like the app to be registered. The default value includes all types [.alert, .badge, .sound].
💡 For this authorization to work, you will need to run your app on a device (the simulator cannot register for push notifications) and make sure you have all the necessary provisioning and certificates. More info here.
ICanHas.calendar { authorized, status, error in
print(authorized ? "You're authorized to access the calendar!" : "You're not authorized to access the calendar!")
}💡 You may optionally specify an EKEventStore and/or an entity type. For example:
let myStore = EKEventStore()
ICanHas.calendar(store: myStore, type: .event) { ... }ICanHas.capture { authorized, status in
print(authorized ? "You're authorized to access the camera!" : "You're not authorized to access the camera!")
}💡 To request access to the microphone use the optional type parameter: ICanHas.capture(type: .audio) { ... }. See AVMediaType for other available types.
ICanHas.photos { authorized, status in
print(authorized ? "You're authorized to access photos!" : "You're not authorized to access photos!")
}ICanHas.contacts { authorized, status, error in
print(authorized ? "You're authorized to access contacts!" : "You're not authorized to access contacts!")
}💡 You may optionally specify the address book reference you would like to use:
let addressBook = ABAddressBookCreateWithOptions(nil, nil)?.takeRetainedValue()
ICanHas.contacts(addressBook: addressBook) { ... }ICanHas is available under the MIT license. See the LICENSE file for more info.