diff --git a/README.md b/README.md index f740169..dc6d2ca 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Universal API for request permission and get its statuses. Available `.authorize | Icon | Permission | Key for `Info.plist` | Get Status | Make Request | | :--: | :---------- | :------------------- | :--------: | :----------: | | | Bluetooth | NSBluetoothAlwaysUsageDescription, NSBluetoothPeripheralUsageDescription | ✅ | ✅ | -| | Calendar | NSCalendarsUsageDescription | ✅ | ✅ | +| | Calendar | NSCalendarsUsageDescription, NSCalendarsFullAccessUsageDescription, NSCalendarsWriteOnlyAccessUsageDescription | ✅ | ✅ | | | Camera | NSCameraUsageDescription | ✅ | ✅ | | | Contacts | NSContactsUsageDescription | ✅ | ✅ | | | FaceID | NSFaceIDUsageDescription | ✅ | ✅ | @@ -65,7 +65,7 @@ Universal API for request permission and get its statuses. Available `.authorize | | Motion | NSMotionUsageDescription | ✅ | ✅ | | | Notification | | ✅ | ✅ | | | Photo Library | NSPhotoLibraryUsageDescription, NSPhotoLibraryAddUsageDescription | ✅ | ✅ | -| | Reminders | NSRemindersUsageDescription | ✅ | ✅ | +| | Reminders | NSRemindersUsageDescription, NSRemindersFullAccessUsageDescription | ✅ | ✅ | | | Siri | NSSiriUsageDescription | ✅ | ✅ | | | Speech Recognizer | NSSpeechRecognitionUsageDescription | ✅ | ✅ | | | Tracking | NSUserTrackingUsageDescription | ✅ | ✅ | diff --git a/Sources/CalendarPermission/CalendarPermission.swift b/Sources/CalendarPermission/CalendarPermission.swift index b1ed34a..0fe8705 100644 --- a/Sources/CalendarPermission/CalendarPermission.swift +++ b/Sources/CalendarPermission/CalendarPermission.swift @@ -28,15 +28,31 @@ import Foundation import EventKit public extension Permission { - + static var calendar: CalendarPermission { - return CalendarPermission() + return CalendarPermission(kind: .calendar) + } +} + +@available(iOS 17.0, *) +public extension Permission { + + static var calendarWriteOnly: CalendarPermission { + return CalendarPermission(kind: .calendarWriteOnly) } } public class CalendarPermission: Permission { - open override var kind: Permission.Kind { .calendar } + private var _kind: Permission.Kind + + // MARK: - Init + + init(kind: Permission.Kind) { + self._kind = kind + } + + open override var kind: Permission.Kind { self._kind } open var usageDescriptionKey: String? { "NSCalendarsUsageDescription" } open var usageFullAccessDescriptionKey: String? { "NSCalendarsFullAccessUsageDescription" } open var usageWriteOnlyAccessDescriptionKey: String? { "NSCalendarsWriteOnlyAccessUsageDescription" } @@ -58,9 +74,17 @@ public class CalendarPermission: Permission { let eventStore = EKEventStore() if #available(iOS 17.0, *) { - eventStore.requestFullAccessToEvents { (accessGranted: Bool, error: Error?) in - DispatchQueue.main.async { - completion() + if self._kind == .calendarWriteOnly { + eventStore.requestWriteOnlyAccessToEvents { (accessGranted: Bool, error: Error?) in + DispatchQueue.main.async { + completion() + } + } + } else { + eventStore.requestFullAccessToEvents { (accessGranted: Bool, error: Error?) in + DispatchQueue.main.async { + completion() + } } } } else { diff --git a/Sources/PermissionsKit/Data/Text.swift b/Sources/PermissionsKit/Data/Text.swift index 9175c2e..7f960d3 100644 --- a/Sources/PermissionsKit/Data/Text.swift +++ b/Sources/PermissionsKit/Data/Text.swift @@ -31,7 +31,8 @@ enum Texts { return NSLocalizedString("permission photoLibrary name", bundle: bundle, comment: "") case .microphone: return NSLocalizedString("permission microphone name", bundle: bundle, comment: "") - case .calendar: + case .calendar, + .calendarWriteOnly: return NSLocalizedString("permission calendar name", bundle: bundle, comment: "") case .contacts: return NSLocalizedString("permission contacts name", bundle: bundle, comment: "") diff --git a/Sources/PermissionsKit/Permission.swift b/Sources/PermissionsKit/Permission.swift index 0a5dd8b..8f2f5c0 100644 --- a/Sources/PermissionsKit/Permission.swift +++ b/Sources/PermissionsKit/Permission.swift @@ -110,9 +110,10 @@ open class Permission: Equatable { case photoLibrary = 1 case microphone = 3 case calendar = 4 - case contacts = 5 - case reminders = 6 - case speech = 7 + case calendarWriteOnly = 5 + case contacts = 6 + case reminders = 7 + case speech = 8 case locationWhenInUse = 9 case locationAlways = 10 case motion = 11 @@ -131,7 +132,8 @@ open class Permission: Equatable { return "Photo Library" case .microphone: return "Microphone" - case .calendar: + case .calendar, + .calendarWriteOnly: return "Calendar" case .contacts: return "Contacts"