EventKitはカレンダーやリマインダーのデータを読み書きするためのフレームワークで、iOSでもmacOSでも使えます。ただし両者には違いがあるので注意が必要です。
EventKitUI
一番大きな違いはEventKitUI
フレームワークがiOSにしかない点です。そのためMacアプリでEKEvent
を表示させるには自前でビューワーを作る必要があります。
尚、EventKitUI
はEKEvent
のプライベートAPIにアクセスしており、EKEventEditViewController
では招待者を追加したり、EKEventViewController
では添付ファイルを表示することができます。EKEvent
では招待者(attendees
)は読み込み専用になっており、また添付ファイルにはアクセスすることすらできません。
endDateの違い
EKEvent.isAllDay
がtrue
(終日予定)の場合、endDate
の値がiOSとmacOSでは異なります。例えば2018年4月10日の終日予定の場合、endDate
の値は以下のようになります。
iOS | macOS |
---|---|
2018-04-10 23:59:59 +0900 |
2018-04-11 00:00:00 +0900 |
つまりiOSの場合、endDate
は2018年4月10日午後11時59分59秒となりますが、macOSの場合は2018年4月11日午前0時0分0秒となります。endDate
を読み込む場合は注意が必要です。
hasAlarms
のバグ
macOS 10.13.1でEKEvent.hasAlarms
を呼ぶと常にtrue
が返されるというバグがあります。iOSでは発生しません。
この問題はEKEvent.alarms
がnil
もしくは空のリストであることをチェックすることで回避可能ですが、alarms
を初めて呼び出すときはEKEventStore
にアクセスしているらしく、値を取得するまでにやや時間かかかります。