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にアクセスしているらしく、値を取得するまでにやや時間かかかります。