Skip to content

Commit e2bf80f

Browse files
Add writeOnly type for calendar
1 parent 76d1b07 commit e2bf80f

File tree

3 files changed

+34
-11
lines changed

3 files changed

+34
-11
lines changed

Sources/CalendarPermission/CalendarPermission.swift

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,27 @@ 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+
static var calendarWriteOnly: CalendarPermission {
37+
return CalendarPermission(kind: .calendarWriteOnly)
3438
}
3539
}
3640

3741
public class CalendarPermission: Permission {
3842

39-
open override var kind: Permission.Kind { .calendar }
43+
private var _kind: Permission.Kind
44+
45+
// MARK: - Init
46+
47+
init(kind: Permission.Kind) {
48+
self._kind = kind
49+
}
50+
51+
open override var kind: Permission.Kind { self._kind }
4052
open var usageDescriptionKey: String? { "NSCalendarsUsageDescription" }
4153
open var usageFullAccessDescriptionKey: String? { "NSCalendarsFullAccessUsageDescription" }
4254
open var usageWriteOnlyAccessDescriptionKey: String? { "NSCalendarsWriteOnlyAccessUsageDescription" }
@@ -58,9 +70,17 @@ public class CalendarPermission: Permission {
5870
let eventStore = EKEventStore()
5971

6072
if #available(iOS 17.0, *) {
61-
eventStore.requestFullAccessToEvents { (accessGranted: Bool, error: Error?) in
62-
DispatchQueue.main.async {
63-
completion()
73+
if self._kind == .calendarWriteOnly {
74+
eventStore.requestWriteOnlyAccessToEvents { (accessGranted: Bool, error: Error?) in
75+
DispatchQueue.main.async {
76+
completion()
77+
}
78+
}
79+
} else {
80+
eventStore.requestFullAccessToEvents { (accessGranted: Bool, error: Error?) in
81+
DispatchQueue.main.async {
82+
completion()
83+
}
6484
}
6585
}
6686
} 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)