Crear calendar, sin fuente local incluso con iCloud desactivado

Estoy tratando de crear un calendar, no un evento del calendar sino un calendar. No puedo get una fuente local y mi aplicación se bloquea.

Aquí está mi código:

let newCalendar = EKCalendar(for: .event, eventStore: eventStore) newCalendar.title = "Some Calendar Name" let sourcesInEventStore = eventStore.sources newCalendar.source = sourcesInEventStore.filter{ (source: EKSource) -> Bool in source.sourceType.rawValue == EKSourceType.local.rawValue }.first! 

Tengo mi iCloud completamente apagado y aún no puedo get una fuente local.

También estoy intentando que esto funcione con iCloud activado, se me ocurrió este código, pero no funciona

 for let source in eventStore.sources { if(source.sourceType == EKSourceType.calDAV && source.title == "iCloud") { newCalendar.source = source } } if(newCalendar.source == nil) { for let source2 in eventStore.sources { if(source2.sourceType == EKSourceType.local) { newCalendar.source = source2 } } } 

Algunos problemas:

Su código se está estrellando porque first fuerza a desenvolver desde una matriz que está vacía. Aquí hay algunas sugerencias para asegurarse de que la matriz de objects EKSource devuelva una matriz no vacía.

Primero, solicite al usuario el acceso a su calendar mediante requestAccess(to:) en una instancia de EKEventStore . En segundo lugar, utilice un if let para desenvolver un valor potencialmente opcional de su matriz filtrada:

 let eventStore = EKEventStore() eventStore.requestAccess(to: .event) { (granted, error) in if granted { let newCalendar = EKCalendar(for: .event, eventStore: eventStore) newCalendar.title = "Some Calendar Name" let sourcesInEventStore = eventStore.sources let filtenetworkingSources = sourcesInEventStore.filter { $0.sourceType == .local } if let localSource = filtenetworkingSources.first { newCalendar.source = localSource } else { // Somehow, the local calendar was not found, handle error accordingly } } else { // check error and alert the user } }