Невозможно создать локальный EKCalendar (Напоминания), если в iCloud отключено напоминание.

Попадание к очень странной проблеме, которая, как мне кажется, связана с API EventKit, и я просто хочу проверить, что я ничего не делаю.

Тестовый пример 1:

Напоминания включены в конфиденциальности для приложенияНа устройстве есть учетная запись iCloud, но она не синхронизирует напоминанияЯ могу создатьместный список напоминаний в приложении «Напоминания» от AppleПРОБЛЕМА - Попытка создать новый календарь типа сущности EKEntityTypeReminder с источником типа EKSourceTypeLocal завершается неудачей

Контрольный пример 2:

Напоминания включены в конфиденциальности для приложенияУстройство не имеет учетной записи iCloudЯ могу создатьместный список напоминаний в приложении «Напоминания» от AppleЯ могу создать локальный список напоминаний через EK API

Тестовый пример 3:

Напоминания включены в конфиденциальности для приложенияУстройство имеет учетную запись iCloud и настроено на синхронизацию напоминаний.Я могу создатьICloud список напоминаний в приложении «Напоминания» от AppleЯ могу создать список напоминаний iCloud через EK API

Я схожу с ума или это ошибка с API?

Ура!

Вот код:

EKCalendar *remindersList = nil;
NSString *remindersListIdent = [[NSUserDefaults standardUserDefaults] objectForKey:kReminderListIdentDefaultsKey];

if(remindersListIdent) {
    remindersList = [store calendarWithIdentifier:remindersListIdent];

    if(remindersList) {
        // has valid reminders list so save reminder and return (don't run rest of function)
        [self saveReminder:reminder toCalendar:remindersList withTypeLabel:reminderTypeLabel];
        return;
    }
}

NSArray *currentCalendars = [store calendarsForEntityType:EKEntityTypeReminder];
for(EKCalendar *cal in currentCalendars) {
    if([[cal title] isEqualToString:@"My App Name"]) {
        remindersList = cal;

        [[NSUserDefaults standardUserDefaults] setObject:[remindersList calendarIdentifier] forKey:kReminderListIdentDefaultsKey];
        [[NSUserDefaults standardUserDefaults] synchronize];
        [self saveReminder:reminder toCalendar:remindersList withTypeLabel:reminderTypeLabel];
        return;
    }
}

EKSource *localSource = nil;
for (EKSource *source in store.sources) {
    if (source.sourceType == EKSourceTypeCalDAV && [source.title isEqualToString:@"iCloud"]) {
        localSource = source;
        break;
    }
}
if(localSource) {
    remindersList = [self newCalendarListInSource:localSource];
}

if(!remindersList) {
    for (EKSource *source in store.sources) {
        if (source.sourceType == EKSourceTypeLocal) {
            localSource = source;
            remindersList = [self newCalendarListInSource:localSource];
            if(remindersList) {
                break;
            }
        }
    }
}

if(!remindersList) {
    dispatch_async(dispatch_get_main_queue(), ^{
        // show error message
    });
}
else {
    [[NSUserDefaults standardUserDefaults] setObject:[remindersList calendarIdentifier] forKey:kReminderListIdentDefaultsKey];
    [[NSUserDefaults standardUserDefaults] synchronize];
    [self saveReminder:reminder toCalendar:remindersList withTypeLabel:reminderTypeLabel];
}

И это содержимое newCalendarListInSource:

EKCalendar *remindersList;

remindersList = [EKCalendar calendarForEntityType:EKEntityTypeReminder eventStore:store];
rem,indersList.source = localSource;
[remindersList setTitle:@"My App Name"];
NSError *listCreateError = nil;
[store saveCalendar:remindersList commit:YES error:&listCreateError];

if(!listCreateError) {
    return remindersList;
}
else {
    NSLog(@"Failed to create reminders list with error: %@", [listCreateError localizedDescription]);

Ответы на вопрос(1)

Ваш ответ на вопрос