Usecase

When I am trying to create a new Calendar programmatically using the EventKit API the following exception occurs:

Calendar Name : Sample NYC Calendar 2012 Error : Error Domain=EKErrorDomain Code=17 "That account does not allow calendars to be added or removed." UserInfo=0x1f86ba80 {NSLocalizedDescription=That acct does not allow calendars to be added or removed.}

Solution

Basically when the calendar is created a Source need to be specified, This source could be one of these:

typedef enum {
   EKSourceTypeLocal,
   EKSourceTypeExchange,
   EKSourceTypeCalDAV,
   EKSourceTypeMobileMe,
   EKSourceTypeSubscribed,
   EKSourceTypeBirthdays
} EKSourceType;

Some of the Source ex. BirthDays even CalDAV(GMAIL or Yahoo etc.) does not allow to create additional
calendars so check to make sure that the source selected is Local or CalDAV(iCould) or any other that allows
to create additional calendars.

// You can iterate over all sources in the Event store and look for the local source or iCloud
EKSource *theSource = nil;
for (EKSource *source in eventStore.sources) {
    if (source.sourceType == EKSourceTypeCalDAV && [source.title isEqualToString:@"iCloud"]) {
        theSource = source;
        break;
    }
}
<!>