AREK is a clean and easy way to request any kind of iOS permission (with some nifty features 🤖)

Overview

AREK


Platform Version Pod Version Carthage compatible License Swift Version

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.

  • show a native popup used to avoid burning the possibility to ask to iOS the real permission
  • show a popup to invite the user to re-enable the permission if it has been denied
  • manage through an easy configuration how many times to ask the user to re-enable the permission (Only once, every hour, once a day, weekly, always 😷 )

🚨 AREK is a Swift 4.2 and Xcode 10 compatible project 🚨

Important!

  • If you want to use it with Xcode 10, swift 4.2, point to the version 4.0.1
  • If you want to use it with Xcode 9, point to any prior version

Build Status

Branch Status
Master BuddyBuild
Develop BuddyBuild

Table of Contents

  1. Implemented permissions
  2. How to use AREK
  3. Permissions Configuration
  4. How to install AREK
  5. How to contribute
  6. TODO
  7. License and Credits

Implemented permissions

  • Camera
  • Bluetooth
  • CloudKit
  • Contacts
  • Events (Calendar)
  • Health
  • Location (Always)
  • Location (When in use)
  • Media Library
  • Microphone
  • Motion
  • Notifications
  • Photo
  • Reminders
  • Siri
  • Speech Recognizer

How to use AREK

Check permission status

    let permission = ArekPhoto()

    permission.status { (status) in
        switch status {
        case .authorized:
            print("! ✅ !")
        case .denied:
            print("! ⛔️ !" )
        case .notDetermined:
            print("! 🤔 !" )
        case .notAvailable:
            print("! 🚫 !" )
        }
    }

Request a permission

    let permission = ArekEvent()

    permission.manage { (status) in
        switch status {
        case .authorized:
            symbol = ""
        case .denied:
            symbol = "⛔️"
        case .notDetermined:
            symbol = "🤔"
        case .notAvailable:
            return "🚫"
        }
    }

Permissions Configuration

General configuration

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

Configure the initial and the re-enable popup: 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.

Localized Strings

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:

  • Pre-permission popup title
  • Pre-permission popup message
  • Re-enable popup title
  • Re-enable popup message
  • Popup image for that permission
  • Allow button title
  • Deny button title

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

How to install AREK

CocoaPods

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

Carthage

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

Swift Package Manager

import PackageDescription

let package = Package(
  name: "YourApp",
  dependencies: [
    .Package(url: "https://github.com/ennioma/arek.git", versionMajor: 2, minor: 0)
  ]
)
  • Note that if you want to install a Swift 3 version of Arek, the latest compatible version is the 1.7.0.
  • If you need to build it on Xcode 10, you have to point to the version 3.0.0.

Add AREK source code to your project

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.

How to contribute

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).

TODO

  • [] Provide a way to inject a custom PMAlertController in a permission
  • [] Provide a way to inject the popup type when the init() is called on a permission
  • [] Update the Swift Package Manager installation

License and Credits

License:

AREK is available under the MIT license. See the LICENSE file for more info.

Arek on the Web:

  1. This week in Swift - Natasha The Robot
  2. iOS Dev Weekly - Dave Verwer

Credits:

Icones provided by Freepik and Vectors Market from Flaticon

Comments
  • Code refactor

    Code refactor

    • public to open
    • no self.permission = self (memory leak) ✅
    • NSLog to print ✅
    • init with default parameters ✅
    • code moved to base with reference to protocol ✅
    • fix ArekContacts ✅

    added ArekSpeachRecognizer ✅ and ArekReminders ✅

    opened by evermeer 14
  • iOS12 branch is unusable due to Swift4.2-incompatbile PMAlertController

    iOS12 branch is unusable due to Swift4.2-incompatbile PMAlertController

    Currently, PMAlertController is spewing a lot of errors during build on a Swift4.2 project due to Swift 4.2 changes. I've gotten around this by doing the following:

    1. Removing the version requirement of the s.dependency in the Podspec
    2. Installing PMAlertController via a fork which has been updated for Swift4.2
    3. Configuring my Podfile like this so that arek has access to PMAlertController:
    pod 'PMAlertController', :git => 'https://github.com/gorbat-o/PMAlertController.git', :branch => 'swift4.2'
    pod 'arek', :git => 'https://github.com/robbiet480/arek.git', :branch => 'iOS12'
    
    opened by robbiet480 12
  • Motion ignores the initial prompt, goes straight to system prompt

    Motion ignores the initial prompt, goes straight to system prompt

    Using the sample project, ive added a NSMotionUsageDescription and changed the file ArekCellVMServiceProgrammatically.swift replaceing the line

    return ArekLocationAlways(configuration: configuration, initialPopupData: initialPopupData, reEnablePopupData: reEnablePopupData)
    

    with

    return ArekMotion(configuration: configuration, initialPopupData: initialPopupData, reEnablePopupData: reEnablePopupData)
    

    and the system prompt gets called on app launch. I havent looked into CoreMotion that much so im not sure if it can be called any other time.

    Ill update if i find anything out.

    Released 
    opened by multinerd 7
  • Add CloudKit discoverability permissions.

    Add CloudKit discoverability permissions.

    For adding CloudKit discoverability permissions you could use this code. You do have to be aware that this is an async call.

            let container = CKContainer.default()
            container.status(forApplicationPermission: CKApplicationPermissions.userDiscoverability, completionHandler: { applicationPermissionStatus, error in
                     // handle applicationPermissionStatus for statuses like
                     // CKApplicationPermissionStatus.Granted, .Denied, .CouldNotComplete, .InitialState
            })
    
    
            let container = CKContainer.default()
            container.accountStatus(completionHandler: {status, error in
                switch status {
                case .available, .restricted:
                    container.requestApplicationPermission(CKApplicationPermissions.userDiscoverability,  completionHandler: { applicationPermissionStatus, error in
                              // handle applicationPermissionStatus for statuses like CKApplicationPermissionStatus.Granted, .Denied, .CouldNotComplete, .InitialState
                    })
                case .couldNotDetermine, .noAccount: break
                    // Ask user to login to iCloud
                }
            })
    
    opened by evermeer 7
  • Apple is rejecting binaries with arek installed

    Apple is rejecting binaries with arek installed

    Just received this email from Apple upon uploading the first build of Home Assistant for iOS with arek installed:

    Dear Developer,
    
    We identified one or more issues with a recent delivery for your app, "Home Assistant Companion". Please correct the following issues, then upload again.
    
    Missing Purpose String in Info.plist File - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSContactsUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data will be required to include a purpose string.If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).
    
    Missing Purpose String in Info.plist File - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSCalendarsUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data will be required to include a purpose string.If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).
    
    Missing Purpose String in Info.plist File - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSBluetoothPeripheralUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data will be required to include a purpose string.If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).
    
    Missing Purpose String in Info.plist File - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSMicrophoneUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data will be required to include a purpose string.If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).
    
    Missing Purpose String in Info.plist File - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSAppleMusicUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data will be required to include a purpose string.If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).
    
    Missing Purpose String in Info.plist File - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSSpeechRecognitionUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data will be required to include a purpose string.If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).
    
    Missing Purpose String in Info.plist File - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSHealthShareUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data will be required to include a purpose string.If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).
    
    Missing Purpose String in Info.plist File - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSHealthUpdateUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data will be required to include a purpose string.If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).
    
    Best regards,
    
    The App Store Team
    

    So I guess as of Spring 2019, README.md should only contain instructions on installing the specific pieces of arek needed for the app... My binary has been marked as invalid until I fix this. Not sure when this started causing error emails but it feels recent.

    opened by robbiet480 5
  • Allow compiling on Xcode 10

    Allow compiling on Xcode 10

    After upgrading to Xcode 10, I was unable to compile my project due to a missing switch case for a new case called provisional. Not sure how you want to handle it, but I'd at least like to unblock my project from getting compiled.

    opened by cohen72 5
  • ArekNotifications::status(completion:) not exhaustive

    ArekNotifications::status(completion:) not exhaustive

    ArekNotifications.swift ArekNotifications::status(completion:) for iOS 10.0 switch is not exhaustive

    Need to add case .provisional: return completion(.authorized) or create a new ArekPermissionResponse to provide for provisional cases (lines 43-53, ArekNotifications.swift)

    IMO, you can just set it to authorized, it is on the user to check the status, and when provisional has been revoked, it should return to .denied

    opened by MatrixSenpai 5
  • Why does `status` use a callback?

    Why does `status` use a callback?

    When would asking for a permission be asynchronous? All of the permissions in this repository which I looked at are not asynchronous. Seems like an unnecessary evil, doesn't it?

    opened by Danappelxx 5
  • Health permission caused the banning of appstore review

    Health permission caused the banning of appstore review

    The HealthKit codes made Apple to reject my app, it said: "We noticed that your app uses HealthKit, but your app does not appear to include any primary features that require health or fitness data.

    The intended use of HealthKit is to share health or fitness data with other apps or devices, and it should be used only in apps that require this data as a part of the app's core functionality. "

    After I remove Arek, it's passed. So I think you should know about this.

    opened by Eric0625 4
  • Updated to Swift 4

    Updated to Swift 4

    A few notes:

    • I'm still not using the library, but I see that it's not very compatible with Objective C, so I avoided adding @objc and @objcmembers to the API
    • I updated Cartfile and Cartfile.resolved without testing it
    • Let me know if you prefer to use 2.0 as a version number instead
    opened by mouhcine 4
  • Added optional ArekPopupStyle parameter

    Added optional ArekPopupStyle parameter

    It allows to manipulate PMAlertController visual aspects such as:

    • cornerRadius
    • alertMaskBackground (color/alpha)
    • alertTitleText (color/font)
    • alertDescriptionText (color/font/lineheight)
    • headerViewHeight (to adjust image size)
    • deny/allow buttons (color/font)

    If ArekPopupStyle is not passed, then defaults of PMAlertController are used.

    opened by pasevin 3
  • Package Resolution Failed

    Package Resolution Failed

    Hi,

    I'm new to Swift/iOS development so I probably am just missing something but I get an error when I try to install the package using the package manager:

    because arek >=0.9.1 contains incompatible tools version and root depends on arek 4.0.2..<5.0.0, version solving failed.
    

    How can I solve this?

    Thanks

    opened by wim07101993 0
  • Compile error iOS 14.0.1: ArekPhoto.swift, Switch must be exhaustive, .limited

    Compile error iOS 14.0.1: ArekPhoto.swift, Switch must be exhaustive, .limited

    • Switch in ArekPhoto.swift, open func status(completion: @escaping ArekPermissionResponse) { and open func askForPermission(completion: @escaping ArekPermissionResponse)
    • Switch in ArekNotifications.swift open func status(completion: @escaping ArekPermissionResponse)
    opened by ph4r05 1
  • How to remove AreyLocationAlways Permission

    How to remove AreyLocationAlways Permission

    I am only Using AreyLocationWhenInUse permission. When i am adding pod 'arek/Location' both permission are adding how to remove AreyLocationAlways Permission

    opened by SumitMarwha 0
  • Enhancement request: completion handler on the re-enable popup

    Enhancement request: completion handler on the re-enable popup

    It would be nice to be able to perform an action if the user denies the re-enable popup.

    Right now, .denied is called only when the manage() function is initially called, not after the user denies the re-enable popup. Either way, there would be no clean way to discern between the two .denied statuses if .denied did call a second time.

    enhancement 
    opened by BryanRyczek 2
  • Carthage release 4.0.2 failed to build due Example Pods files

    Carthage release 4.0.2 failed to build due Example Pods files

    Arek 4.0.2 project file references Example Pods files, resulting in a failed build with Carthage.

    error: /*/Carthage/Checkouts/arek/Example/Pods/Target Support Files/arek/arek.xcconfig: unable to open file (in target "arek" in project "Pods") (in target 'arek')
    
    Build system information
    error: /*/Carthage/Checkouts/arek/Example/Pods/Target Support Files/arek/arek.xcconfig: unable to open file (in target "arek" in project "Pods") (in target 'arek')
    
    Build system information
    error: /*/Carthage/Checkouts/arek/Example/Pods/Target Support Files/arek/arek.xcconfig: unable to open file (in target "arek" in project "Pods") (in target 'arek')
    
    Build system information
    error: missing module map file: '/*/Carthage/Checkouts/arek/Example/Pods/Target Support Files/arek/arek.modulemap (in target 'arek')
    
    ** ARCHIVE FAILED **
    
    Build settings from command line:
        CARTHAGE = YES
        CLANG_ENABLE_CODE_COVERAGE = NO
        CODE_SIGN_IDENTITY = 
        CODE_SIGNING_REQUIRED = NO
        GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO
        ONLY_ACTIVE_ARCH = NO
        SDKROOT = iphoneos12.0
        SKIP_INSTALL = YES
        STRIP_INSTALLED_PRODUCT = NO
    
    opened by wousser 1
Releases(4.0.2)
Owner
Ennio Masi
-
Ennio Masi
A polite and unified way of asking for permission on iOS

ISHPermissionKit ISHPermissionKit provides a polite and unified way of asking for permission on iOS. It also provides UI to explain the permission req

iosphere GmbH 619 Nov 3, 2022
A visual permission manager for iOS

VWWPermissionKit We've all been there. You get started on your latest and greatest app when you have to add logic to prompt the user for permissions b

Zakk Hoyt 144 Feb 24, 2022
Ask permissions on Swift. Available List, Dialog & Native interface. Can check state permission.

SPPermissions About Library for ask permissions. You can check state of permissions, available .authorized, .denied & .notDetermined. Available ready-

Ivan Vorobei 5.1k Dec 30, 2022
Cluster's reusable pre-permissions utility that lets developers ask the users on their own dialog for photos or contacts access, before making the system-based request.

Cluster's reusable pre-permissions utility that lets developers ask the users on their own dialog for photos or contacts access, before making the system-based request. This is based on the Medium post by Cluster describing the different ways to ask for iOS permissions (https://medium.com/p/96fa4eb54f2c).

Riz 1.2k Sep 29, 2022
Request the Location Services via a 3D 360° flyover MKMapView 🗺

STLocationRequest STLocationRequest is a simple and elegant way to request the users location services at the very first time. The STLocationRequestCo

Sven Tiigi 640 Dec 6, 2022
A unified API to ask for permissions on iOS

Permission exposes a unified API to request permissions on iOS. Usage • Example • Installation • License Usage Permission Permission.swift PermissionS

Damien 2.9k Dec 27, 2022
A unified API to ask for permissions on iOS

PAPermissions PAPermissions is a fully customizable and ready-to-run library to handle permissions through a ViewController Right now it supports out

Pasquale Ambrosini 694 Oct 17, 2022
A set of SwiftUI dynamic property wrappers that provide a more familiar API for accessing the Contacts framework. (iOS, watchOS, macOS)

Connections Also available as a part of my SwiftUI+ Collection – just add it to Xcode 13+ A set of SwiftUI dynamic property wrappers that provide a mo

SwiftUI+ 9 Oct 7, 2022
An iOS pre-permissions utility that lets developers ask users on their own dialog for calendar, contacts, location, photos, reminders, twitter, push notifications and more, before making the system-based permission request.

An iOS pre-permissions utility that lets developers ask users on their own dialog for calendar, contacts, location, photos, reminders, twitter, push notifications and more, before making the system-based permission request.

Joe L 420 Dec 22, 2022
Make permission request easier.

Proposer Proposer provides a single API to request permission for access Camera, Photos, Microphone, Contacts, Reminders, Calendar, Location or Notifi

null 855 Nov 3, 2022
A nifty command-line tool to customize macOS icons

iconset A nifty command line tool to manage macOS icons iconset is a new command line tool for macOS that allows you to change icons for macOS apps (e

aarnav tale 32 Nov 17, 2022
PrettyBorder is a SwiftUI package for managing an customized border and background at any kind of view.

PrettyBorder Description PrettyBorder is a SwiftUI package for managing an customized border and background at any kind of view. Preview of end result

Ahmet Giray Uçar 2 Oct 13, 2021
A polite and unified way of asking for permission on iOS

ISHPermissionKit ISHPermissionKit provides a polite and unified way of asking for permission on iOS. It also provides UI to explain the permission req

iosphere GmbH 619 Nov 3, 2022
Deal with query items, HTTP headers, request body and more in an easy, declarative way

Reusable system for complex URL requests with Swift. Deal with query items, HTTP headers, request body and more in an easy, declarative way. Check out our engineering blog to learn more!

Parable Health 19 Sep 5, 2022
This package is meant to make http request of an easy way inspiren in the architecture of Moya package

NetworkAgent This package is meant to make http request of an easy way inspiren in the architecture of Moya package. This package is 100% free of depe

Angel Rada 19 Sep 8, 2022
JustPeek is an iOS Library that adds support for Force Touch-like Peek and Pop interactions on devices that do not natively support this kind of interaction.

JustPeek Warning: This library is not supported anymore by Just Eat. JustPeek is an iOS Library that adds support for Force Touch-like Peek and Pop in

Just Eat 68 Apr 4, 2021
Automatically sets the network activity indicator for any performed request.

BigBrother BIG BROTHER IS WATCHING YOU. BigBrother is a Swift library made for iOS that automatically watches for any performed request and sets the n

Marcelo Fabri 446 Dec 17, 2022
IMBeeHive is a kind of modular programming method

概述 IMBeeHive是用于iOS的App模块化编程的框架实现方案,本项目主要借鉴了阿里巴巴BeeHive,在此基础上通过逆向了一些大厂的APP使得功能更加强大完善。同时现在也在寻找一起开发这个框架的开发者,如果您对此感兴趣,请联系我的微信:alvinkk01. 背景 随着公司业务的不断发展,项目

null 6 Dec 14, 2021
LBBottomSheet gives you the ability to present a controller in a kind of

LBBottomSheet Installation Swift Package Manager To install using Swift Package Manager, in Xcode, go to File > Add Packages..., and use this URL to f

Lunabee Studio 48 Dec 9, 2022
Kind of tired to need an Android Device on me, just to read manga, so here we are.

Dokusho Kind of tired to need an Android Device on me, just to read manga, so here we are. I am going to prioritize feature based on how I feel and no

Stephan Deumier 13 Oct 10, 2022