Skip to content

Commit 539e3ce

Browse files
authored
Merge pull request #320 from alexanderpuchta/main
Add writeOnly type for calendar
2 parents 909010f + 1d52e60 commit 539e3ce

File tree

4 files changed

+40
-13
lines changed

4 files changed

+40
-13
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ Universal API for request permission and get its statuses. Available `.authorize
5353
| Icon | Permission | Key for `Info.plist` | Get Status | Make Request |
5454
| :--: | :---------- | :------------------- | :--------: | :----------: |
5555
| <img src="https://cdn.sparrowcode.io/github/permissionskit/icons/bluetooth.png" width="38"> | Bluetooth | NSBluetoothAlwaysUsageDescription, NSBluetoothPeripheralUsageDescription |||
56-
| <img src="https://cdn.sparrowcode.io/github/permissionskit/icons/calendar.png" width="38"> | Calendar | NSCalendarsUsageDescription |||
56+
| <img src="https://cdn.sparrowcode.io/github/permissionskit/icons/calendar.png" width="38"> | Calendar | NSCalendarsUsageDescription, NSCalendarsFullAccessUsageDescription, NSCalendarsWriteOnlyAccessUsageDescription |||
5757
| <img src="https://cdn.sparrowcode.io/github/permissionskit/icons/camera.png" width="38"> | Camera | NSCameraUsageDescription |||
5858
| <img src="https://cdn.sparrowcode.io/github/permissionskit/icons/contacts.png" width="38"> | Contacts | NSContactsUsageDescription |||
5959
| <img src="https://cdn.sparrowcode.io/github/permissionskit/icons/faceid.png" width="38"> | FaceID | NSFaceIDUsageDescription |||
@@ -65,7 +65,7 @@ Universal API for request permission and get its statuses. Available `.authorize
6565
| <img src="https://cdn.sparrowcode.io/github/permissionskit/icons/motion.png" width="38"> | Motion | NSMotionUsageDescription |||
6666
| <img src="https://cdn.sparrowcode.io/github/permissionskit/icons/notifications.png" width="38"> | Notification | |||
6767
| <img src="https://cdn.sparrowcode.io/github/permissionskit/icons/photos.png" width="38"> | Photo Library | NSPhotoLibraryUsageDescription, NSPhotoLibraryAddUsageDescription |||
68-
| <img src="https://cdn.sparrowcode.io/github/permissionskit/icons/reminders.png" width="38"> | Reminders | NSRemindersUsageDescription |||
68+
| <img src="https://cdn.sparrowcode.io/github/permissionskit/icons/reminders.png" width="38"> | Reminders | NSRemindersUsageDescription, NSRemindersFullAccessUsageDescription |||
6969
| <img src="https://cdn.sparrowcode.io/github/permissionskit/icons/siri.png" width="38"> | Siri | NSSiriUsageDescription |||
7070
| <img src="https://cdn.sparrowcode.io/github/permissionskit/icons/speech.png" width="38"> | Speech Recognizer | NSSpeechRecognitionUsageDescription |||
7171
| <img src="https://cdn.sparrowcode.io/github/permissionskit/icons/tracking.png" width="38"> | Tracking | NSUserTrackingUsageDescription |||

Sources/CalendarPermission/CalendarPermission.swift

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,31 @@ import Foundation
2828
import EventKit
2929

3030
public extension Permission {
31-
31+
3232
static var calendar: CalendarPermission {
33-
return CalendarPermission()
33+
return CalendarPermission(kind: .calendar)
34+
}
35+
}
36+
37+
@available(iOS 17.0, *)
38+
public extension Permission {
39+
40+
static var calendarWriteOnly: CalendarPermission {
41+
return CalendarPermission(kind: .calendarWriteOnly)
3442
}
3543
}
3644

3745
public class CalendarPermission: Permission {
3846

39-
open override var kind: Permission.Kind { .calendar }
47+
private var _kind: Permission.Kind
48+
49+
// MARK: - Init
50+
51+
init(kind: Permission.Kind) {
52+
self._kind = kind
53+
}
54+
55+
open override var kind: Permission.Kind { self._kind }
4056
open var usageDescriptionKey: String? { "NSCalendarsUsageDescription" }
4157
open var usageFullAccessDescriptionKey: String? { "NSCalendarsFullAccessUsageDescription" }
4258
open var usageWriteOnlyAccessDescriptionKey: String? { "NSCalendarsWriteOnlyAccessUsageDescription" }
@@ -58,9 +74,17 @@ public class CalendarPermission: Permission {
5874
let eventStore = EKEventStore()
5975

6076
if #available(iOS 17.0, *) {
61-
eventStore.requestFullAccessToEvents { (accessGranted: Bool, error: Error?) in
62-
DispatchQueue.main.async {
63-
completion()
77+
if self._kind == .calendarWriteOnly {
78+
eventStore.requestWriteOnlyAccessToEvents { (accessGranted: Bool, error: Error?) in
79+
DispatchQueue.main.async {
80+
completion()
81+
}
82+
}
83+
} else {
84+
eventStore.requestFullAccessToEvents { (accessGranted: Bool, error: Error?) in
85+
DispatchQueue.main.async {
86+
completion()
87+
}
6488
}
6589
}
6690
} else {

Sources/PermissionsKit/Data/Text.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ enum Texts {
3131
return NSLocalizedString("permission photoLibrary name", bundle: bundle, comment: "")
3232
case .microphone:
3333
return NSLocalizedString("permission microphone name", bundle: bundle, comment: "")
34-
case .calendar:
34+
case .calendar,
35+
.calendarWriteOnly:
3536
return NSLocalizedString("permission calendar name", bundle: bundle, comment: "")
3637
case .contacts:
3738
return NSLocalizedString("permission contacts name", bundle: bundle, comment: "")

Sources/PermissionsKit/Permission.swift

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,10 @@ open class Permission: Equatable {
110110
case photoLibrary = 1
111111
case microphone = 3
112112
case calendar = 4
113-
case contacts = 5
114-
case reminders = 6
115-
case speech = 7
113+
case calendarWriteOnly = 5
114+
case contacts = 6
115+
case reminders = 7
116+
case speech = 8
116117
case locationWhenInUse = 9
117118
case locationAlways = 10
118119
case motion = 11
@@ -131,7 +132,8 @@ open class Permission: Equatable {
131132
return "Photo Library"
132133
case .microphone:
133134
return "Microphone"
134-
case .calendar:
135+
case .calendar,
136+
.calendarWriteOnly:
135137
return "Calendar"
136138
case .contacts:
137139
return "Contacts"

0 commit comments

Comments
 (0)