App Calendar Functionality No Longer working in ios 6 App Calendar Functionality No Longer working in ios 6 ios ios

App Calendar Functionality No Longer working in ios 6


I believe I have the exact same issue. I am deploying a normal Developer-build of the app I am working on to my iPhone 4 with iOS 6.

EDIT: I finally solved it like this, I did not find the info on the web but rather I found it in the APIs.

Run the following to request permission. This is apparently an asynchronous call and access will not be granted until the user have authorized the app.

EKEventStore *es = [[EKEventStore alloc] init];[es requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {    /* This code will run when uses has made his/her choice */}];

Furthermore you may specify what the app is trying to do with the information in Info.plist. There is a key called Privacy - Calendars Usage Description (NSCalendarsUsageDescription) that can contain a string description that will be displayed in the prompt to the user.

Below are the full details of the problem I encountered (fixed by the above):

When I try to att an event to the calendar I see the following screen:Add Event error message

When I open settings for the calendar privacy settings, no app is visible:Settings, Privacy, Calendars

This all leads me to think that there is some setting I must put in Info.plist to enable calendar access and to ask the user for permission on start up. I have searched the web but not found anything.

@jloewy, I guess this is the same problem you are having?


If you plan on supporting devices prior to iOS 6, I would add the following otherwise you will get an error.

EKEventStore *store = [[EKEventStore alloc] init];    if([store respondsToSelector:@selector(requestAccessToEntityType:completion:)]) {    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {        /* This code will run when uses has made his/her choice */    }];}


If you want to wait for the user to respond to the request, one could add some lines of code to the accepted answer:

__block BOOL accessGranted = NO;if([store respondsToSelector:@selector(requestAccessToEntityType:completion:)]) {    dispatch_semaphore_t sema = dispatch_semaphore_create(0);    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {        accessGranted = granted;        dispatch_semaphore_signal(sema);    }];    dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);} else { // we're on iOS 5 or older    accessGranted = YES;}if (accessGranted) {    // go on}