Existe alguma maneira de adicionar um evento do iCal ao calendário do iPhone a partir do aplicativo personalizado?
Com base na documentação da Apple , isso mudou um pouco a partir do iOS 6.0.
1) Você deve solicitar acesso ao calendário do usuário através de "requestAccessToEntityType: conclusão:" e executar a manipulação de eventos dentro de um bloco.
2) Você precisa confirmar seu evento agora ou passar o parâmetro "commit" para sua chamada de salvar / remover
Todo o resto permanece o mesmo...
Adicione a estrutura EventKit e #import <EventKit/EventKit.h>
ao seu código.
No meu exemplo, eu tenho uma propriedade de instância NSString * savedEventId.
Para adicionar um evento:
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
}];
Remova o evento:
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];
}
}];
Isso adiciona eventos ao seu calendário padrão. Se você tiver vários calendários, descobrirá qual deles é
Versão Swift
Você precisa importar a estrutura EventKit
import EventKit
Adicionar Evento
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
}
}
Remover evento
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
}
}
}
Você pode fazer isso usando a estrutura do Kit de Eventos no OS 4.0.
Clique com o botão direito do mouse no grupo FrameWorks no Navegador de grupos e arquivos à esquerda da janela. Selecione 'Adicionar' e depois 'FrameWorks existente' e depois 'EventKit.Framework'.
Então você deve poder adicionar eventos com código como este:
fonte
Sim, ainda não há API para isso (2.1). Mas parecia que na WWDC muitas pessoas já estavam interessadas na funcionalidade (inclusive eu) e a recomendação era ir ao site abaixo e criar uma solicitação de recurso para isso. Se houver interesse suficiente, eles podem mudar o ICal.framework para o SDK público.
https://developer.apple.com/bugreporter/
fonte
O acesso ao calendário está sendo adicionado no iPhone OS 4.0 :
fonte
Você pode adicionar o evento usando a API de eventos como Tristan descrita e também pode adicionar um evento do Google Agenda que aparece no calendário do iOS.
usando o cliente Objective-C da API do Google
fonte
Implementação do Swift 4.0:
use a importação no topo da página
import EventKit
então
fonte
Atualização para o swift 4 para resposta do Dashrath
também não se esqueça de adicionar permissão para uso do calendário
fonte
Código de trabalho no Swift-4.2
Agora teremos a tela do evento e aqui você também pode modificar suas configurações:
Agora adicione o método delegado para lidar com Cancelar e adicione a ação do botão de evento da tela de eventos:
Nota: Não esqueça de adicionar a chave NSCalendarsUsageDescription no info plist.
fonte
Lembre-se de definir o endDate para o evento criado, é obrigatório.
Caso contrário, falhará (quase silenciosamente) com este erro:
O código de trabalho completo para mim é:
fonte
A ideia do Google é boa, mas tem problemas.
Posso abrir com êxito uma tela de evento do calendário do Google - mas apenas na versão principal da área de trabalho e ela não é exibida corretamente no iPhone Safari. O calendário móvel do Google, que é exibido corretamente no Safari, parece não funcionar com a API para adicionar eventos.
No momento, não vejo uma boa saída dessa.
fonte
Simples .... use a biblioteca tapku .... você pode pesquisar no google essa palavra e usá-la ... seu código aberto ... aproveitar ..... não há necessidade de corrigir esses códigos ....
fonte