# EventKitメモ

# EKEventStore

# メンバ

  • store.requestAccess(to: .reminder)
    • アクセス許可
    • reminder か event かを指定
  • store.calendars(for: .reminder)
    • リマインダだと「リスト」に相当
    • リストの「グループ」は取得できない模様

# メンバ > リマインダ用

  • store.predicateForReminders(in: nil)
    • in: [EKCalendar] と配列を渡すと、対象のリストが絞れる模様
  • store.predicateForIncompleteReminders()
  • store.predicateForCompletedReminders()
  • store.fetchReminders(matching: predicate, completion: ...)
    • predicate で詳細を絞り込むのかと思いきや、そうではなかった。リスト単位まで
    • completion で呼ばれたクロージャ?で [EKReminder] が取得できる

# メンバ > カレンダ用

  • store.predicateForEvents(withStart:, end:, calendars:)
  • store.calendarItems(withExternalIdentifier: )

# サンプル

var store = EKEventStore()
store.requestAccess(to: .reminder) { granted, error in // reminder, event
    // Handle the response to the request.
        NSCalendarsUsageDescription
        NSRemindersUsageDescription
        NSContactsUsageDescription
}
let calendars = store.calendars(for: .reminder)
for calendar in calendars {
    print(calendar.title)
}

# EKCalendar

# 取得方法

  • EKEventStore から一覧をとって取得

# メンバ

  • title
  • color?
  • アイコンは?

# EKReminder

# 階層

  • EKCalendarItem ← 親クラスでかつ、カレンダー用
    • EKReminder ← リマインダ用

# 固有のメンバ

  • priority
  • startDateComponent ← これは繰り返しルールで使用?
  • dueDateComponent
  • isCompleted
  • completionDate

# EKCalendarItem

# メンバ

  • title
  • location : 距離は、alarm のとこで設定か?
  • creationDate
  • lastModifiedDate ← これ順で出したい
  • url
  • hasNotes
  • notes 活用する
  • alarms: [EKAlarm]?
  • reccurenceRules: [EKRecurrenceRule]?

# EKAlarm

  • TODO: ...

# あとで読む

# 設定

Info.plist に設定追加が必要

  • Privacy - Calendars Usage Description
  • Privacy - Reminders Usage Description (NSRemindersUsageDescription)

ないと出るメッセージ

This app has crashed because it attempted to access privacy-sensitive data without a usage description.
The app's Info.plist must contain an NSRemindersUsageDescription key with a string value explaining to the user how the app uses this data.

# 保存

EKEvent (カレンダーのイベント) の場合

do {
    try store.save(event, span: .thisEvent)
} catch {
    ...
}

# ファイルの添付

標準カレンダーからは

  • ファイルが登録できるようになっている
  • 画像は選べない

API からは

  • それっぽい項目がない

→ TODO: どうやって入っているのか確認する。URLかなんか??

[ 📩 ご意見 ]