EventKitの使い方 (swift 4)
アプリ内で、ユーザーのカレンダーにイベントを保存する簡単なサンプルを示します。
いくつかのポイントがあります。
ポイントその1
Info.plistに「Privacy - Calendars Usage Description」を + し、"カレンダーに保存"などのコメントを加えます。
ポイントその2
「import EventKit」を加えます。
ポイントその3
EKEventStore.authorizationStatus(for: .event)
でアプリがカレンダーへアクセス出来るかを調べます。
未確定(== .notDetermined)の場合は、
requestAccess(to: .event
でユーザーに承諾してもらいます。
コード
UITextFieldを「myTextField」、
「保存」ボタンを「hozonButton」とします。
UITextFieldに文字を入力して保存ボタンを押すと、本日のカレンダーにイベントが追加されます。
import UIKit
import EventKit
class ViewController: UIViewController {
@IBOutlet var myTextField:UITextField!
@IBOutlet var hozonButton:UIButton!
let eventStore:EKEventStore = EKEventStore()
override func viewDidLoad() {
super.viewDidLoad()
if EKEventStore.authorizationStatus(for: .event) == .notDetermined{
eventStore.requestAccess(to: .event, completion: { (granted, error) in
if granted && error == nil {
print("granted")
}
else{
print("not granted")
}
})
}
}
@IBAction func myActionHozon(){
guard let i = myTextField.text, i != "" else { return }
if EKEventStore.authorizationStatus(for: .event) == .authorized{
let event = EKEvent(eventStore: eventStore)
event.title = i
event.startDate = Date()
event.endDate = Date()
event.isAllDay = true
event.calendar = eventStore.defaultCalendarForNewEvents
do {
try eventStore.save(event, span: .thisEvent)
let alert = UIAlertController(title: "保存完了", message: "カレンダーに保存されました。", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
catch {
print("Save is failed.")
}
}
else{
let alert = UIAlertController(title: "カレンダーアクセス", message: "カレンダーに保存するためには、\n設定>\nプライバシー>\nカレンダー\nでアクセスを許可して下さい。", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
}
}