Есть ли способ добавить событие iCal в календарь iPhone из пользовательского приложения?
На основе документации Apple , это немного изменилось с iOS 6.0.
1) Вам необходимо запросить доступ к календарю пользователя через «requestAccessToEntityType: завершение:» и выполнить обработку событий внутри блока.
2) Вам нужно зафиксировать ваше событие сейчас или передать параметр "commit" на ваш вызов сохранения / удаления
Все остальное остается прежним ...
Добавьте фреймворк EventKit и #import <EventKit/EventKit.h>
в свой код.
В моем примере у меня есть свойство экземпляра NSString * saveEventId.
Чтобы добавить событие:
EKEventStore *store = [EKEventStore new];
[store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
if (!granted) { return; }
EKEvent *event = [EKEvent eventWithEventStore:store];
event.title = @"Event Title";
event.startDate = [NSDate date]; //today
event.endDate = [event.startDate dateByAddingTimeInterval:60*60]; //set 1 hour meeting
event.calendar = [store defaultCalendarForNewEvents];
NSError *err = nil;
[store saveEvent:event span:EKSpanThisEvent commit:YES error:&err];
self.savedEventId = event.eventIdentifier; //save the event id if you want to access this later
}];
Удалить событие:
EKEventStore* store = [EKEventStore new];
[store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
if (!granted) { return; }
EKEvent* eventToRemove = [store eventWithIdentifier:self.savedEventId];
if (eventToRemove) {
NSError* error = nil;
[store removeEvent:eventToRemove span:EKSpanThisEvent commit:YES error:&error];
}
}];
Это добавляет события в ваш календарь по умолчанию, если у вас есть несколько календарей, то вы узнаете, какой из них является
Swift версия
Вам необходимо импортировать фреймворк EventKit
import EventKit
Добавить событие
let store = EKEventStore()
store.requestAccessToEntityType(.Event) {(granted, error) in
if !granted { return }
var event = EKEvent(eventStore: store)
event.title = "Event Title"
event.startDate = NSDate() //today
event.endDate = event.startDate.dateByAddingTimeInterval(60*60) //1 hour long meeting
event.calendar = store.defaultCalendarForNewEvents
do {
try store.saveEvent(event, span: .ThisEvent, commit: true)
self.savedEventId = event.eventIdentifier //save event id to access this particular event later
} catch {
// Display error to user
}
}
Удалить событие
let store = EKEventStore()
store.requestAccessToEntityType(EKEntityTypeEvent) {(granted, error) in
if !granted { return }
let eventToRemove = store.eventWithIdentifier(self.savedEventId)
if eventToRemove != nil {
do {
try store.removeEvent(eventToRemove, span: .ThisEvent, commit: true)
} catch {
// Display error to user
}
}
}
Вы можете сделать это с помощью инфраструктуры Event Kit в OS 4.0.
Щелкните правой кнопкой мыши группу FrameWorks в навигаторе групп и файлов в левой части окна. Выберите «Добавить», затем «Существующие FrameWorks», затем «EventKit.Framework».
Тогда вы сможете добавить события с кодом, подобным этому:
источник
Да, для этого до сих пор нет API (2.1). Но, похоже, на WWDC многие люди уже интересовались функциональностью (включая меня), и рекомендовалось перейти на сайт ниже и создать запрос на добавление функций для этого. Если интерес будет достаточным, они могут переместить ICal.framework в общедоступный SDK.
https://developer.apple.com/bugreporter/
источник
Доступ к календарю добавляется в iPhone OS 4.0 :
источник
Вы можете добавить событие, используя API-интерфейс событий, такой как Tristan, а также добавить событие Календаря Google, которое отображается в календаре iOS.
используя Google Objective-C клиента API
источник
Реализация Swift 4.0:
использовать импорт в верхней части страницы
import EventKit
затем
источник
Обновление для Swift 4 для Dashrath ответа
также не забудьте добавить разрешение на использование календаря
источник
Рабочий код в Swift-4.2
Теперь мы получим экран событий, и здесь вы также можете изменить свои настройки:
Теперь добавьте метод делегата для обработки Cancel и добавьте действие кнопки события экрана события:
Примечание. Не забудьте добавить ключ NSCalendarsUsageDescription в информационный список.
источник
Не забудьте установить endDate для созданного события, это обязательно.
В противном случае произойдет сбой (почти бесшумно) с этой ошибкой:
Полный рабочий код для меня:
источник
Идея Google хороша, но есть проблемы.
Я могу успешно открыть экран событий календаря Google - но только в основной версии рабочего стола, и он не отображается должным образом в iPhone Safari. Мобильный календарь Google, который правильно отображается в Safari, похоже, не работает с API для добавления событий.
На данный момент я не вижу хорошего выхода из этого.
источник
Просто .... используйте библиотеку тапку .... вы можете гуглить это слово и использовать его ... с открытым исходным кодом ... наслаждайтесь ..... не нужно глючить с этими кодами ....
источник