5
5
6
6
#import " EventPermissionStrategy.h"
7
7
8
- #if PERMISSION_EVENTS | PERMISSION_REMINDERS
8
+ #if PERMISSION_EVENTS | PERMISSION_EVENTS_FULL_ACCESS | PERMISSION_REMINDERS
9
9
10
10
@implementation EventPermissionStrategy
11
11
12
12
- (PermissionStatus)checkPermissionStatus : (PermissionGroup)permission {
13
- if (permission == PermissionGroupCalendar) {
14
- #if PERMISSION_EVENTS
15
- return [EventPermissionStrategy permissionStatus: EKEntityTypeEvent];
16
- #endif
17
- } else if (permission == PermissionGroupReminders) {
18
- #if PERMISSION_REMINDERS
19
- return [EventPermissionStrategy permissionStatus: EKEntityTypeReminder];
20
- #endif
21
- }
22
-
23
- return PermissionStatusDenied;
13
+ return [EventPermissionStrategy permissionStatus: permission];
24
14
}
25
15
26
16
- (void )checkServiceStatus : (PermissionGroup)permission completionHandler : (ServiceStatusHandler)completionHandler {
@@ -34,55 +24,124 @@ - (void)requestPermission:(PermissionGroup)permission completionHandler:(Permiss
34
24
completionHandler (permissionStatus);
35
25
return ;
36
26
}
37
-
38
- EKEntityType entityType;
39
-
40
- if (permission == PermissionGroupCalendar) {
41
- #if PERMISSION_EVENTS
42
- entityType = EKEntityTypeEvent;
43
- #else
27
+
28
+ if (permission == PermissionGroupCalendar || permission == PermissionGroupCalendarFullAccess) {
29
+ if (@available (iOS 17.0 , *)) {
30
+ #if !PERMISSION_EVENTS_FULL_ACCESS
31
+ completionHandler (PermissionStatusDenied);
32
+ return ;
33
+ #endif
34
+ } else {
35
+ #if !PERMISSION_EVENTS
36
+ completionHandler (PermissionStatusDenied);
37
+ return ;
38
+ #endif
39
+ }
40
+ } else if (permission == PermissionGroupCalendarWriteOnly) {
41
+ #if !PERMISSION_EVENTS && !PERMISSION_EVENTS_FULL_ACCESS
44
42
completionHandler (PermissionStatusDenied);
45
43
return ;
46
44
#endif
47
45
} else if (permission == PermissionGroupReminders) {
48
- #if PERMISSION_REMINDERS
49
- entityType = EKEntityTypeReminder;
50
- #else
46
+ #if !PERMISSION_REMINDERS
51
47
completionHandler (PermissionStatusDenied);
52
48
return ;
53
49
#endif
54
- } else {
55
- completionHandler (PermissionStatusPermanentlyDenied);
56
- return ;
57
50
}
58
-
51
+
59
52
EKEventStore *eventStore = [[EKEventStore alloc ] init ];
60
- [eventStore requestAccessToEntityType: entityType completion: ^(BOOL granted, NSError *error) {
61
- if (granted) {
62
- completionHandler (PermissionStatusGranted);
63
- } else {
64
- completionHandler (PermissionStatusPermanentlyDenied);
53
+
54
+ if (@available (iOS 17.0 , *)) {
55
+ if (permission == PermissionGroupCalendar || permission == PermissionGroupCalendarFullAccess) {
56
+ [eventStore requestFullAccessToEventsWithCompletion: ^(BOOL granted, NSError *error) {
57
+ if (granted) {
58
+ completionHandler (PermissionStatusGranted);
59
+ } else {
60
+ completionHandler (PermissionStatusPermanentlyDenied);
61
+ }
62
+ }];
63
+ } else if (permission == PermissionGroupCalendarWriteOnly) {
64
+ [eventStore requestWriteOnlyAccessToEventsWithCompletion: ^(BOOL granted, NSError *error) {
65
+ if (granted) {
66
+ completionHandler (PermissionStatusGranted);
67
+ } else {
68
+ completionHandler (PermissionStatusPermanentlyDenied);
69
+ }
70
+ }];
71
+ } else if (permission == PermissionGroupReminders) {
72
+ [eventStore requestFullAccessToRemindersWithCompletion: ^(BOOL granted, NSError *error) {
73
+ if (granted) {
74
+ completionHandler (PermissionStatusGranted);
75
+ } else {
76
+ completionHandler (PermissionStatusPermanentlyDenied);
77
+ }
78
+ }];
65
79
}
66
- }];
80
+ } else {
81
+ EKEntityType entityType = [EventPermissionStrategy getEntityType: permission];
82
+
83
+ [eventStore requestAccessToEntityType: entityType completion: ^(BOOL granted, NSError *error) {
84
+ if (granted) {
85
+ completionHandler (PermissionStatusGranted);
86
+ } else {
87
+ completionHandler (PermissionStatusPermanentlyDenied);
88
+ }
89
+ }];
90
+ }
91
+
67
92
}
68
93
69
- + (PermissionStatus)permissionStatus : (EKEntityType)entityType {
94
+ + (PermissionStatus)permissionStatus : (PermissionGroup)permission {
95
+ EKEntityType entityType = [EventPermissionStrategy getEntityType: permission];
70
96
EKAuthorizationStatus status = [EKEventStore authorizationStatusForEntityType: entityType];
71
-
72
- switch (status) {
73
- case EKAuthorizationStatusNotDetermined:
74
- return PermissionStatusDenied;
75
- case EKAuthorizationStatusRestricted:
76
- return PermissionStatusRestricted;
77
- case EKAuthorizationStatusDenied:
78
- return PermissionStatusPermanentlyDenied;
79
- case EKAuthorizationStatusAuthorized:
80
- return PermissionStatusGranted;
97
+
98
+ if (@available (iOS 17.0 , *)) {
99
+ switch (status) {
100
+ case EKAuthorizationStatusNotDetermined:
101
+ return PermissionStatusDenied;
102
+ case EKAuthorizationStatusRestricted:
103
+ return PermissionStatusRestricted;
104
+ case EKAuthorizationStatusDenied:
105
+ return PermissionStatusPermanentlyDenied;
106
+ case EKAuthorizationStatusFullAccess:
107
+ return PermissionStatusGranted;
108
+ case EKAuthorizationStatusWriteOnly:
109
+ if (permission == PermissionGroupCalendarWriteOnly) {
110
+ return PermissionStatusGranted;
111
+ }
112
+ return PermissionStatusDenied;
113
+ }
114
+ } else {
115
+ switch (status) {
116
+ case EKAuthorizationStatusNotDetermined:
117
+ return PermissionStatusDenied;
118
+ case EKAuthorizationStatusRestricted:
119
+ return PermissionStatusRestricted;
120
+ case EKAuthorizationStatusDenied:
121
+ return PermissionStatusPermanentlyDenied;
122
+ case EKAuthorizationStatusAuthorized:
123
+ return PermissionStatusGranted;
124
+ case EKAuthorizationStatusWriteOnly:
125
+ // not available on iOS 16 and below
126
+ break ;
127
+ }
81
128
}
82
129
130
+
131
+
83
132
return PermissionStatusDenied;
84
133
}
85
134
135
+ + (EKEntityType)getEntityType : (PermissionGroup)permission {
136
+ if (permission == PermissionGroupCalendar || permission == PermissionGroupCalendarFullAccess || permission == PermissionGroupCalendarWriteOnly) {
137
+ return EKEntityTypeEvent;
138
+ } else if (permission == PermissionGroupReminders) {
139
+ return EKEntityTypeReminder;
140
+ }
141
+
142
+ return nil ;
143
+ }
144
+
86
145
@end
87
146
88
147
#else
0 commit comments