diff --git a/Example Apps/SPPermissions.xcodeproj/project.xcworkspace/xcuserdata/ivanvorobei.xcuserdatad/UserInterfaceState.xcuserstate b/Example Apps/SPPermissions.xcodeproj/project.xcworkspace/xcuserdata/ivanvorobei.xcuserdatad/UserInterfaceState.xcuserstate index e08abaf0..de437d24 100644 Binary files a/Example Apps/SPPermissions.xcodeproj/project.xcworkspace/xcuserdata/ivanvorobei.xcuserdatad/UserInterfaceState.xcuserstate and b/Example Apps/SPPermissions.xcodeproj/project.xcworkspace/xcuserdata/ivanvorobei.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/README.md b/README.md index f325cda0..930d4ef6 100644 --- a/README.md +++ b/README.md @@ -196,6 +196,12 @@ let authorized = SPPermissions.Permission.calendar.authorized Also available `denied` & `notDetermined`. +You can get plist keys for permission: + +```swift +let key = SPPermissions.Permission.bluetooth.usageDescriptionKey +``` + ## Request Now available 3 present styles: `Dialog`, `List` and `Native`. Each interface has delegates and a data source. If you want see an example app, open `Example Apps/SPPermissions.xcodeproj`. diff --git a/SPPermissions.podspec b/SPPermissions.podspec index ef139766..0f095661 100644 --- a/SPPermissions.podspec +++ b/SPPermissions.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "SPPermissions" - s.version = "6.4.0" + s.version = "6.4.1" s.summary = "Ask permissions on Swift. Available List, Dialog & Native interface. Can check state permission." s.homepage = "https://github.com/ivanvorobei/SPPermissions" s.source = { :git => "https://github.com/ivanvorobei/SPPermissions.git", :tag => s.version } diff --git a/Sources/SPPermissions/SPPermissions.swift b/Sources/SPPermissions/SPPermissions.swift index abf6b3a1..11304bd9 100644 --- a/Sources/SPPermissions/SPPermissions.swift +++ b/Sources/SPPermissions/SPPermissions.swift @@ -111,13 +111,6 @@ public enum SPPermissions { // MARK: Must Ovveride - /** - SPPermissions: Permission type. - */ - open var usageDescriptionKey: String? { - preconditionFailure("This method must be overridden.") - } - /** SPPermissions: Permission type. */ diff --git a/Sources/SPPermissionsBluetooth/SPBluetoothPermission.swift b/Sources/SPPermissionsBluetooth/SPBluetoothPermission.swift index e6eb4095..fbc06563 100644 --- a/Sources/SPPermissionsBluetooth/SPBluetoothPermission.swift +++ b/Sources/SPPermissionsBluetooth/SPBluetoothPermission.swift @@ -30,7 +30,7 @@ import CoreBluetooth public extension SPPermissions.Permission { - static var bluetooth: SPPermissions.Permission { + static var bluetooth: SPBluetoothPermission { return SPBluetoothPermission() } } @@ -38,7 +38,7 @@ public extension SPPermissions.Permission { public class SPBluetoothPermission: SPPermissions.Permission { open override var type: SPPermissions.PermissionType { .bluetooth } - open override var usageDescriptionKey: String? { "NSBluetoothAlwaysUsageDescription" } + open var usageDescriptionKey: String? { "NSBluetoothAlwaysUsageDescription" } public override var status: SPPermissions.PermissionStatus { if #available(iOS 13.0, tvOS 13, *) { diff --git a/Sources/SPPermissionsCalendar/SPCalendarPermission.swift b/Sources/SPPermissionsCalendar/SPCalendarPermission.swift index b7451655..fd96fc90 100644 --- a/Sources/SPPermissionsCalendar/SPCalendarPermission.swift +++ b/Sources/SPPermissionsCalendar/SPCalendarPermission.swift @@ -30,7 +30,7 @@ import EventKit public extension SPPermissions.Permission { - static var calendar: SPPermissions.Permission { + static var calendar: SPCalendarPermission { return SPCalendarPermission() } } @@ -38,7 +38,7 @@ public extension SPPermissions.Permission { public class SPCalendarPermission: SPPermissions.Permission { open override var type: SPPermissions.PermissionType { .calendar } - open override var usageDescriptionKey: String? { "NSCalendarsUsageDescription" } + open var usageDescriptionKey: String? { "NSCalendarsUsageDescription" } public override var status: SPPermissions.PermissionStatus { switch EKEventStore.authorizationStatus(for: EKEntityType.event) { diff --git a/Sources/SPPermissionsCamera/SPCameraPermission.swift b/Sources/SPPermissionsCamera/SPCameraPermission.swift index 391b51f2..7b06f5c4 100644 --- a/Sources/SPPermissionsCamera/SPCameraPermission.swift +++ b/Sources/SPPermissionsCamera/SPCameraPermission.swift @@ -31,7 +31,7 @@ import AVFoundation @available(iOS 11.0, macCatalyst 14.0, *) public extension SPPermissions.Permission { - static var camera: SPPermissions.Permission { + static var camera: SPCameraPermission { return SPCameraPermission() } } @@ -40,7 +40,7 @@ public extension SPPermissions.Permission { public class SPCameraPermission: SPPermissions.Permission { open override var type: SPPermissions.PermissionType { .camera } - open override var usageDescriptionKey: String? { "NSCameraUsageDescription" } + open var usageDescriptionKey: String? { "NSCameraUsageDescription" } public override var status: SPPermissions.PermissionStatus { switch AVCaptureDevice.authorizationStatus(for: AVMediaType.video) { diff --git a/Sources/SPPermissionsContacts/SPContactsPermission.swift b/Sources/SPPermissionsContacts/SPContactsPermission.swift index cc30072b..0e4ff17b 100644 --- a/Sources/SPPermissionsContacts/SPContactsPermission.swift +++ b/Sources/SPPermissionsContacts/SPContactsPermission.swift @@ -30,7 +30,7 @@ import Contacts public extension SPPermissions.Permission { - static var contacts: SPPermissions.Permission { + static var contacts: SPContactsPermission { return SPContactsPermission() } } @@ -38,7 +38,7 @@ public extension SPPermissions.Permission { public class SPContactsPermission: SPPermissions.Permission { open override var type: SPPermissions.PermissionType { .contacts } - open override var usageDescriptionKey: String? { "NSContactsUsageDescription" } + open var usageDescriptionKey: String? { "NSContactsUsageDescription" } public override var status: SPPermissions.PermissionStatus { switch CNContactStore.authorizationStatus(for: .contacts) { diff --git a/Sources/SPPermissionsLocationAlways/SPLocationAlwaysPermission.swift b/Sources/SPPermissionsLocationAlways/SPLocationAlwaysPermission.swift index d337e60b..9a302bf0 100644 --- a/Sources/SPPermissionsLocationAlways/SPLocationAlwaysPermission.swift +++ b/Sources/SPPermissionsLocationAlways/SPLocationAlwaysPermission.swift @@ -30,7 +30,7 @@ import MapKit public extension SPPermissions.Permission { - static var locationAlways: SPPermissions.Permission { + static var locationAlways: SPLocationAlwaysPermission { return SPLocationAlwaysPermission() } } @@ -38,7 +38,7 @@ public extension SPPermissions.Permission { public class SPLocationAlwaysPermission: SPPermissions.Permission { open override var type: SPPermissions.PermissionType { .locationAlways } - open override var usageDescriptionKey: String? { "NSLocationAlwaysAndWhenInUseUsageDescription" } + open var usageDescriptionKey: String? { "NSLocationAlwaysAndWhenInUseUsageDescription" } public override var status: SPPermissions.PermissionStatus { let authorizationStatus: CLAuthorizationStatus = { diff --git a/Sources/SPPermissionsLocationWhenInUse/SPLocationWhenInUsePermission.swift b/Sources/SPPermissionsLocationWhenInUse/SPLocationWhenInUsePermission.swift index f47d01d6..66fcf2f6 100644 --- a/Sources/SPPermissionsLocationWhenInUse/SPLocationWhenInUsePermission.swift +++ b/Sources/SPPermissionsLocationWhenInUse/SPLocationWhenInUsePermission.swift @@ -30,7 +30,7 @@ import MapKit public extension SPPermissions.Permission { - static var locationWhenInUse: SPPermissions.Permission { + static var locationWhenInUse: SPLocationWhenInUsePermission { return SPLocationWhenInUsePermission() } } @@ -38,7 +38,7 @@ public extension SPPermissions.Permission { public class SPLocationWhenInUsePermission: SPPermissions.Permission { open override var type: SPPermissions.PermissionType { .locationWhenInUse } - open override var usageDescriptionKey: String? { "NSLocationWhenInUseUsageDescription" } + open var usageDescriptionKey: String? { "NSLocationAlwaysAndWhenInUseUsageDescription" } public override var status: SPPermissions.PermissionStatus { let authorizationStatus: CLAuthorizationStatus = { diff --git a/Sources/SPPermissionsMediaLibrary/SPMediaLibraryPermission.swift b/Sources/SPPermissionsMediaLibrary/SPMediaLibraryPermission.swift index 1865b5fc..af2b7f21 100644 --- a/Sources/SPPermissionsMediaLibrary/SPMediaLibraryPermission.swift +++ b/Sources/SPPermissionsMediaLibrary/SPMediaLibraryPermission.swift @@ -30,7 +30,7 @@ import MediaPlayer public extension SPPermissions.Permission { - static var mediaLibrary: SPPermissions.Permission { + static var mediaLibrary: SPMediaLibraryPermission { return SPMediaLibraryPermission() } } @@ -38,7 +38,7 @@ public extension SPPermissions.Permission { public class SPMediaLibraryPermission: SPPermissions.Permission { open override var type: SPPermissions.PermissionType { .mediaLibrary } - open override var usageDescriptionKey: String? { "NSAppleMusicUsageDescription" } + open var usageDescriptionKey: String? { "NSAppleMusicUsageDescription" } public override var status: SPPermissions.PermissionStatus { switch MPMediaLibrary.authorizationStatus() { diff --git a/Sources/SPPermissionsMicrophone/SPMicrophonePermission.swift b/Sources/SPPermissionsMicrophone/SPMicrophonePermission.swift index 231bf017..dd5a916f 100644 --- a/Sources/SPPermissionsMicrophone/SPMicrophonePermission.swift +++ b/Sources/SPPermissionsMicrophone/SPMicrophonePermission.swift @@ -30,7 +30,7 @@ import AVFoundation public extension SPPermissions.Permission { - static var microphone: SPPermissions.Permission { + static var microphone: SPMicrophonePermission { return SPMicrophonePermission() } } @@ -38,7 +38,7 @@ public extension SPPermissions.Permission { public class SPMicrophonePermission: SPPermissions.Permission { open override var type: SPPermissions.PermissionType { .microphone } - open override var usageDescriptionKey: String? { "NSMicrophoneUsageDescription" } + open var usageDescriptionKey: String? { "NSMicrophoneUsageDescription" } public override var status: SPPermissions.PermissionStatus { switch AVAudioSession.sharedInstance().recordPermission { diff --git a/Sources/SPPermissionsMotion/SPMotionPermission.swift b/Sources/SPPermissionsMotion/SPMotionPermission.swift index cd665001..0e7bea43 100644 --- a/Sources/SPPermissionsMotion/SPMotionPermission.swift +++ b/Sources/SPPermissionsMotion/SPMotionPermission.swift @@ -30,7 +30,7 @@ import CoreMotion public extension SPPermissions.Permission { - static var motion: SPPermissions.Permission { + static var motion: SPMotionPermission { return SPMotionPermission() } } @@ -38,7 +38,7 @@ public extension SPPermissions.Permission { public class SPMotionPermission: SPPermissions.Permission { open override var type: SPPermissions.PermissionType { .motion } - open override var usageDescriptionKey: String? { "NSMotionUsageDescription" } + open var usageDescriptionKey: String? { "NSMotionUsageDescription" } public override var status: SPPermissions.PermissionStatus { switch CMMotionActivityManager.authorizationStatus() { diff --git a/Sources/SPPermissionsNotification/SPNotificationPermission.swift b/Sources/SPPermissionsNotification/SPNotificationPermission.swift index ff228a96..6d9e674a 100644 --- a/Sources/SPPermissionsNotification/SPNotificationPermission.swift +++ b/Sources/SPPermissionsNotification/SPNotificationPermission.swift @@ -29,7 +29,7 @@ import UserNotifications public extension SPPermissions.Permission { - static var notification: SPPermissions.Permission { + static var notification: SPNotificationPermission { return SPNotificationPermission() } } @@ -37,7 +37,6 @@ public extension SPPermissions.Permission { public class SPNotificationPermission: SPPermissions.Permission { open override var type: SPPermissions.PermissionType { .notification } - open override var usageDescriptionKey: String? { return nil } public override var status: SPPermissions.PermissionStatus { guard let authorizationStatus = fetchAuthorizationStatus() else { return .notDetermined } diff --git a/Sources/SPPermissionsPhotoLibrary/SPPhotoLibraryPermission.swift b/Sources/SPPermissionsPhotoLibrary/SPPhotoLibraryPermission.swift index ec87ec2a..848447ca 100644 --- a/Sources/SPPermissionsPhotoLibrary/SPPhotoLibraryPermission.swift +++ b/Sources/SPPermissionsPhotoLibrary/SPPhotoLibraryPermission.swift @@ -29,7 +29,7 @@ import Photos public extension SPPermissions.Permission { - static var photoLibrary: SPPermissions.Permission { + static var photoLibrary: SPPhotoLibraryPermission { return SPPhotoLibraryPermission() } } @@ -37,7 +37,14 @@ public extension SPPermissions.Permission { public class SPPhotoLibraryPermission: SPPermissions.Permission { open override var type: SPPermissions.PermissionType { .photoLibrary } - open override var usageDescriptionKey: String? { "NSPhotoLibraryUsageDescription" } + + open var fullAccessUsageDescriptionKey: String? { + "NSPhotoLibraryUsageDescription" + } + + open var addingOnlyUsageDescriptionKey: String? { + "NSPhotoLibraryAddUsageDescription" + } public override var status: SPPermissions.PermissionStatus { switch PHPhotoLibrary.authorizationStatus() { diff --git a/Sources/SPPermissionsReminders/SPRemindersPermission.swift b/Sources/SPPermissionsReminders/SPRemindersPermission.swift index 2f90026e..dbaa7ce5 100644 --- a/Sources/SPPermissionsReminders/SPRemindersPermission.swift +++ b/Sources/SPPermissionsReminders/SPRemindersPermission.swift @@ -30,7 +30,7 @@ import EventKit public extension SPPermissions.Permission { - static var reminders: SPPermissions.Permission { + static var reminders: SPRemindersPermission { return SPRemindersPermission() } } @@ -38,7 +38,7 @@ public extension SPPermissions.Permission { public class SPRemindersPermission: SPPermissions.Permission { open override var type: SPPermissions.PermissionType { .reminders } - open override var usageDescriptionKey: String? { "NSRemindersUsageDescription" } + open var usageDescriptionKey: String? { "NSRemindersUsageDescription" } public override var status: SPPermissions.PermissionStatus { switch EKEventStore.authorizationStatus(for: EKEntityType.reminder) { diff --git a/Sources/SPPermissionsSpeechRecognizer/SPSpeechPermission.swift b/Sources/SPPermissionsSpeechRecognizer/SPSpeechPermission.swift index 66cb82f1..3d6603b4 100644 --- a/Sources/SPPermissionsSpeechRecognizer/SPSpeechPermission.swift +++ b/Sources/SPPermissionsSpeechRecognizer/SPSpeechPermission.swift @@ -30,7 +30,7 @@ import Speech public extension SPPermissions.Permission { - static var speech: SPPermissions.Permission { + static var speech: SPSpeechPermission { return SPSpeechPermission() } } @@ -38,7 +38,7 @@ public extension SPPermissions.Permission { public class SPSpeechPermission: SPPermissions.Permission { open override var type: SPPermissions.PermissionType { .speech } - open override var usageDescriptionKey: String? { "NSSpeechRecognitionUsageDescription" } + open var usageDescriptionKey: String? { "NSSpeechRecognitionUsageDescription" } public override var status: SPPermissions.PermissionStatus { switch SFSpeechRecognizer.authorizationStatus() { diff --git a/Sources/SPPermissionsTracking/SPTrackingPermission.swift b/Sources/SPPermissionsTracking/SPTrackingPermission.swift index 49aa3fc4..e5abae20 100644 --- a/Sources/SPPermissionsTracking/SPTrackingPermission.swift +++ b/Sources/SPPermissionsTracking/SPTrackingPermission.swift @@ -30,7 +30,7 @@ import AppTrackingTransparency @available(iOS 14.5, tvOS 14.5, *) public extension SPPermissions.Permission { - static var tracking: SPPermissions.Permission { + static var tracking: SPTrackingPermission { return SPTrackingPermission() } } @@ -39,7 +39,7 @@ public extension SPPermissions.Permission { public class SPTrackingPermission: SPPermissions.Permission { open override var type: SPPermissions.PermissionType { .tracking } - open override var usageDescriptionKey: String? { "NSUserTrackingUsageDescription" } + open var usageDescriptionKey: String? { "NSUserTrackingUsageDescription" } public override var status: SPPermissions.PermissionStatus { switch ATTrackingManager.trackingAuthorizationStatus {