ICanHas
Swift 4 library that simplifies iOS user permission requests (push notifications, location, camera, photo library, contacts, calendar).
Installation
Just add ICanHas.swift to your Xcode project (I know, I know).
Usage
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
Location:
ICanHas.location { authorized, status in
print(authorized ? "You're authorized to use location!" : "You're not authorized to use location!")
}
let myManager = CLLocationManager()
ICanHas.location(background: false, manager: myManager) { ... }
NSLocationWhenInUseUsageDescription
or NSLocationAlwaysUsageDescription
key to your Info.plist
file. More info here.
Push Notifications:
ICanHas.push { authorized in
print(authorized ? "You're authorized to send push notes!" : "You're not authorized to send push notes!")
}
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]
.
Calendar:
ICanHas.calendar { authorized, status, error in
print(authorized ? "You're authorized to access the calendar!" : "You're not authorized to access the calendar!")
}
EKEventStore
and/or an entity type. For example:
let myStore = EKEventStore()
ICanHas.calendar(store: myStore, type: .event) { ... }
Capture (Camera, Microphone, etc):
ICanHas.capture { authorized, status in
print(authorized ? "You're authorized to access the camera!" : "You're not authorized to access the camera!")
}
type
parameter: ICanHas.capture(type: .audio) { ... }
. See AVMediaType
for other available types.
Photos (Library):
ICanHas.photos { authorized, status in
print(authorized ? "You're authorized to access photos!" : "You're not authorized to access photos!")
}
Contacts:
ICanHas.contacts { authorized, status, error in
print(authorized ? "You're authorized to access contacts!" : "You're not authorized to access contacts!")
}
let addressBook = ABAddressBookCreateWithOptions(nil, nil)?.takeRetainedValue()
ICanHas.contacts(addressBook: addressBook) { ... }
License
ICanHas is available under the MIT license. See the LICENSE file for more info.