
아이폰 내에 있는 reminder데이터 가져오기 위해 EventKit의
EKEventStore().requestAccess(to: EKEntityType)
사용해서 데이터를 가져오려고 했는데...이게 Ios 17.0부터는 deprecated되었다는 정보가 있었음..(사진 1 참고)
(사진 1)
그래서 해결방법은
-requestWriteOnlyAccessToEventsWithCompletion:,
or -requestFullAccessToRemindersWithCompletion:
을 쓰는 방법이 있었음
그래서 필자는 캘린더의 모든 데이터를 원하기 때문에
requestFullAccessToRemindersWithCompletion를 쓰기로 함
requestFullAccessToRemindersWithCompletion
이렇게 사용했지만..최신버전에서 저 이름이 아닌
requestFullAccessToReminders이걸로 바뀌었다고 한다..;;
(사진 2 참고)
(사진 2)
그래서 다시 수정..
func requestRemindersAccess() {
eventStore.requestFullAccessToReminders { (granted, error) in
DispatchQueue.main.async {
if let error = error {
print("Error requesting reminders access: \(error.localizedDescription)")
return
}
if granted {
print("Access granted, now fetching reminders.")
self.fetchReminders()
} else {
print("Reminders access denied. Please enable access in System Preferences.")
}
}
}
}
func fetchReminders() {
let predicate = eventStore.predicateForReminders(in: nil)
eventStore.fetchReminders(matching: predicate) { reminders in
print("fetchReminders completion block called")
if let reminders = reminders {
if reminders.isEmpty {
print("No reminders found.")
} else {
for reminder in reminders {
print("Reminder Title: \(reminder.title ?? "No Title")")
print("Completion Date: \(String(describing: reminder.completionDate))")
print("Due Date: \(String(describing: reminder.dueDateComponents?.date))")
print("-------------------------------")
}
}
} else {
print("No reminders found or an error occurred.")
}
}
}
결과

잘나옴 ㅎㅎ
마지막으로 버전별로 대응을 하기 위해 조금만 더 수정하면
class CalendarManager {
let eventStore = EKEventStore()
func requestRemindersAccess() {
if #available(macOS 17, *) {
// macOS 17 이상
eventStore.requestFullAccessToReminders { (granted, error) in
DispatchQueue.main.async {
if let error = error {
print("Error requesting reminders access: \(error.localizedDescription)")
return
}
if granted {
print("Access granted, now fetching reminders.")
self.fetchReminders()
} else {
print("Reminders access denied. Please enable access in System Preferences.")
}
}
}
} else {
// macOS 17 이하
eventStore.requestAccess(to: .reminder) { (granted, error) in
DispatchQueue.main.async {
if let error = error {
print("Error requesting reminders access: \(error.localizedDescription)")
return
}
if granted {
print("Access granted, now fetching reminders.")
self.fetchReminders()
} else {
print("Reminders access denied. Please enable access in System Preferences.")
}
}
}
}
}
func fetchReminders() {
let predicate = eventStore.predicateForReminders(in: nil)
eventStore.fetchReminders(matching: predicate) { reminders in
print("fetchReminders completion block called")
if let reminders = reminders {
if reminders.isEmpty {
print("No reminders found.")
} else {
for reminder in reminders {
print("Reminder Title: \(reminder.title ?? "No Title")")
print("Completion Date: \(String(describing: reminder.completionDate))")
print("Due Date: \(String(describing: reminder.dueDateComponents?.date))")
print("-------------------------------")
}
}
} else {
print("No reminders found or an error occurred.")
}
}
}
}
완성!