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"