AREK is a clean and easy way to request any kind of iOS permission (with some nifty features 🤖)
AREK is a clean and easy to use wrapper over any kind of iOS permission written in Swift.
Why AREK could help you building a better app is well described by Apple here:
Request personal data only when your app clearly needs it.
...
Explain why your app needs the information if it’s not obvious.
...
Request permission at launch only when necessary for your app to function.
...
Every goal could be easily reached using AREK.
🚨 AREK is a Swift 4.2 and Xcode 10 compatible project 🚨
Important!
Branch | Status |
---|---|
Master | |
Develop |
let permission = ArekPhoto()
permission.status { (status) in
switch status {
case .authorized:
print("! ✅ !")
case .denied:
print("! ⛔️ !" )
case .notDetermined:
print("! 🤔 !" )
case .notAvailable:
print("! 🚫 !" )
}
}
let permission = ArekEvent()
permission.manage { (status) in
switch status {
case .authorized:
symbol = "✅"
case .denied:
symbol = "⛔️"
case .notDetermined:
symbol = "🤔"
case .notAvailable:
return "🚫"
}
}
Each permission type included in AREK
is configurable through the ArekConfiguration
struct. Each permission has a default configuration, so if you are happy with the basic configuration you don’t have to care about how it works behind the scenes.
An ArekConfiguration
is made up by:
frequency: ArekPermissionFrequency (.Always, .EveryHour, .OnceADay, .OnceAWeek, .JustOnce)
This frequency value is related to how often you want to the user to re-enable a permission if that one has been disallowed.
Set by default to .OnceADay
presentInitialPopup: Bool
This is an initial popup used to ask kindly to the user to allow a permission. This is useful to avoid burning the possibility to show the system popup.
Set by default to true
presentReEnablePopup: Bool
This is the popup used to kindly to the user to re-enable that permission. The frequency value is related to this popup.
Set by defaul to true
ArekPopupData
ArekPopupData
is the struct used to configure both the pre-permission popup and the re-enable popup. These popups could be instances of the amazing PMAlertController by Codeido or native iOS alerts.
The configuration is the following:
public struct ArekPopupData {
var title: String!
var message: String!
var image: String!
var type: ArekPopupType!
public init(title: String = "", message: String = "", image: String = "", type: ArekPopupType = .codeido) {
self.title = title
self.message = message
self.image = image
self.type = type
}
}
This is an example of the ArekContacts
pre-enable popup using PMAlertController
:
If you want to present a native UIAlertController
set the type to .native
otherwise if you want to setup a PMAlertController
set the type to .codeido
.
AREK by convention expects to find localized strings in your Localizable files in order to configure the UI.
In the following table there are the configurations for:
Messages related to the iOS native permission popup should be configured following the conventions described here.
Permission | Pre-permission Title | Pre-permission Message | Re-Enable Title | Re-Enable Message | Image | Allow Button Title | Deny Button Title |
---|---|---|---|---|---|---|---|
Camera | ArekCamera_initial_title | ArekCamera_initial_message | ArekCamera_reenable_title | ArekCamera_reenable_message | ArekCamera_image | ArekCamera_allow_button_title | ArekCamera_deny_button_title |
CloudKit | ArekCloudKit_initial_title | ArekCloudKit_initial_message | ArekCloudKit_reenable_title | ArekCloudKit_reenable_message | ArekCloudKit_image | ArekCloudKit_allow_button_title | ArekCloudKit_deny_button_title |
Contacts | ArekContacts_initial_title | ArekContacts_initial_message | ArekContacts_reenable_title | ArekContacts_reenable_message | ArekContacts_image | ArekContacts_allow_button_title | ArekContacts_deny_button_title |
Events | ArekEvents_initial_title | ArekEvents_initial_message | ArekEvents_reenable_title | ArekEvents_reenable_message | ArekEvents_image | ArekEvents_allow_button_title | ArekEvents_deny_button_title |
HealthKit | ArekHealth_initial_title | ArekHealth_initial_message | ArekHealth_reenable_title | ArekHealth_reenable_message | ArekHealth_image | ArekHealth_allow_button_title | ArekHealth_deny_button_title |
Media Library | ArekMediaLibrary_initial_title | ArekMediaLibrary_initial_message | ArekMediaLibrary_reenable_title | ArekMediaLibrary_reenable_message | ArekMediaLibrary_image | ArekMediaLibrary_allow_button_title | ArekMediaLibrary_deny_button_title |
Microphone | ArekMicrophone_initial_title | ArekMicrophone_initial_message | ArekMicrophone_reenable_title | ArekMicrophone_reenable_message | ArekMicrophone_image | ArekMicrophone_allow_button_title | ArekMicrophone_deny_button_title |
Motion | ArekMotion_initial_title | ArekMotion_initial_message | ArekMotion_reenable_title | ArekMotion_reenable_message | ArekMotion_image | ArekMotion_allow_button_title | ArekMotion_deny_button_title |
Notifications | ArekNotifications_initial_title | ArekNotifications_initial_message | ArekNotifications_reenable_title | ArekNotifications_reenable_message | ArekNotifications_image | ArekNotifications_allow_button_title | ArekNotifications_deny_button_title |
Photo Library | ArekPhoto_initial_title | ArekPhoto_initial_message | ArekPhoto_reenable_title | ArekPhoto_reenable_message | ArekPhoto_image | ArekPhoto_allow_button_title | ArekPhoto_deny_button_title |
Reminders | ArekReminders_initial_title | ArekReminders_initial_message | ArekReminders_reenable_title | ArekReminders_reenable_message | ArekReminders_image | ArekReminders_allow_button_title | ArekReminders_ deny_button_title |
Siri | ArekSiri_initial_title | ArekSiri_initial_message | ArekSiri_reenable_title | ArekSiri_reenable_message | ArekSiri_image | ArekSiri_allow_button_title | ArekSiri_deny_button_title |
Speech Recognizer | ArekSpeechRecognizer_initial_title | ArekSpeechRecognizer_initial_message | ArekSpeechRecognizer_reenable_title | ArekSpeechRecognizer_reenable_message | ArekSpeechRecognizer_image | ArekSpeechRecognizer_allow_button_title | ArekSpeechRecognizer_deny_button_title |
Bluetooth | ArekBluetooth_initial_title | ArekBluetooth_initial_message | ArekBluetooth_reenable_title | ArekBluetooth_reenable_message | ArekBluetooth_image | ArekBluetooth_allow_button_title | ArekBluetooth_deny_button_title |
Location | ArekBaseLocation_initial_title | ArekBaseLocation_initial_message | ArekBaseLocation_reenable_title | ArekBaseLocation_reenable_message | ArekBaseLocation_image | ArekBaseLocation_allow_button_title | ArekBaseLocation_deny_button_title |
Add AREK to your Podfile
use_frameworks!
target 'MyTarget' do
pod 'arek', '~> 2.0.2'
end
If you want to install just a specific permission, let’s say Bluetooth
, you have to specify:
use_frameworks!
target 'MyTarget' do
pod 'arek/Bluetooth', '~> 2.0.2'
end
$ pod install
github "ennioma/arek" ~> 4.0.2
Then on your application target Build Phases settings tab, add a “New Run Script Phase”. Create a Run Script with the following content:
/usr/local/bin/carthage copy-frameworks
and add the following paths under “Input Files”:
$(SRCROOT)/Carthage/Build/iOS/arek.framework
$(SRCROOT)/Carthage/Build/iOS/PMAlertController.framework
import PackageDescription
let package = Package(
name: "YourApp",
dependencies: [
.Package(url: "https://github.com/ennioma/arek.git", versionMajor: 2, minor: 0)
]
)
3.0.0
.Add https://github.com/ennioma/arek/tree/master/arek/arek/Arek folder to your project.
🙏 Take care about adding the ArekHealth class to your project. It includes HealthKit in your project, so if you do this without using HealthKit, your app will be rejected during the AppStore review.
Contributions are welcome 🙌 If you’d like to improve this projects I’ve shared with the community, just open an issue or raise a PR from the current develop branch.
For any information or request feel free to contact me on twitter (@ennioma).
init()
is called on a permissionAREK is available under the MIT license. See the LICENSE file for more info.
Icones provided by Freepik
and Vectors Market
from Flaticon