iCalendar: повторяющиеся события неправильно отображаются в IOS

Краткое введение

Повторяющиеся события в моем файле iCalendar, сгенерированном PHP, неправильно повторяются в приложениях IOS. Они правильно повторяются в Outlook 2010 и Календаре Google, но не в IOS 8.1 (iPhone 5S и iPad 2).

Подробнее

Следующий файл создает файл календаря, пригодный для подписки из таких приложений, как MS Outlook и Google Calendar. Файл содержит VTIMEZONE и один VEVENT, предназначенный для повторения каждую пятницу с 7 по 28 ноября 2014 г., всего четыре повторения.

Файл iCalendar: http://www.elitesystemer.no/mycal_stack_example.php (полный код ниже)

На обоих моих iDevices (IOS 8.1) это событие происходит только один раз; 7 ноября 2014 г. Такое странное поведение характерно для родного приложения календаря, а также для приложения Week Calendar (сайт: http://weekcal.com). ).

Файл отлично работает с MS Outlook 2010 и Google Calendar, но не с IOS. К сожалению, мне не удалось найти аналогичную проблему на форумах Apple. Я также не могу протестировать iDevice с предыдущей версией ОС или другим смартфоном в то время.

Я протестировал файл на онлайн-валидаторах iCalendar, таких как http://icalvalid.cloudapp.net/ и http://severinghaus.org/projects/icv/ — отличные результаты без предупреждений/ошибок.

Код календаря, сгенерированный из PHP

<?php
//set correct content-type-header
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: inline; filename=mycal_stack_example.ics');
?>
BEGIN:VCALENDAR<?echo "\r\n";?>
VERSION:2.0<?echo "\r\n";?>
METHOD:PUBLISH<?echo "\r\n";?>
CALSCALE:GREGORIAN<?echo "\r\n";?>
PRODID:-//Elite Systemer//Ver 1.6//NO<?echo "\r\n";?>
BEGIN:VTIMEZONE<?echo "\r\n";?>
TZID:Europe/Oslo<?echo "\r\n";?>
BEGIN:DAYLIGHT<?echo "\r\n";?>
DTSTART:19810329T020000<?echo "\r\n";?>
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU<?echo "\r\n";?>
TZNAME:CEST<?echo "\r\n";?>
TZOFFSETFROM:+0100<?echo "\r\n";?>
TZOFFSETTO:+0200<?echo "\r\n";?>
END:DAYLIGHT<?echo "\r\n";?>
BEGIN:STANDARD<?echo "\r\n";?>
DTSTART:19961027T030000<?echo "\r\n";?>
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU<?echo "\r\n";?>
TZNAME:CET<?echo "\r\n";?>
TZOFFSETFROM:+0200<?echo "\r\n";?>
TZOFFSETTO:+0100<?echo "\r\n";?>
END:STANDARD<?echo "\r\n";?>
END:VTIMEZONE<?echo "\r\n";?>
BEGIN:VEVENT<?echo "\r\n";?>
UID:[email protected]<?echo "\r\n";?>
DTSTART;TZID=Europe/Oslo:20141107T140000<?echo "\r\n";?>
DURATION:PT60M<?echo "\r\n";?>
RRULE:WKST=MO;FREQ=WEEKLY;INTERVAL=1;BYDAY=FR;UNTIL=20141128T150000<?echo "\r\n";?>
SUMMARY;LANGUAGE=no:Friday<?echo "\r\n";?>
DESCRIPTION;LANGUAGE=no:Oppgave: Friday\n<?echo "\r\n";?>
LOCATION;LANGUAGE=no:Timenesveien 33<?echo "\r\n";?>
BEGIN:VALARM<?echo "\r\n";?>
TRIGGER:-PT15M<?echo "\r\n";?>
ACTION:DISPLAY<?echo "\r\n";?>
DESCRIPTION:Reminder<?echo "\r\n";?>
END:VALARM<?echo "\r\n";?>
END:VEVENT<?echo "\r\n";?>
END:VCALENDAR

person Gjermund Dahl    schedule 11.11.2014    source источник


Ответы (2)


Удивительно, но кажется, что ios просто не выполняет повторяющиеся события по дням недели — быстрый поиск в Google нашел этот пост от января 2014 года:

В iOS отсутствует возможность планировать повторяющиеся события по дням недели.

http://www.macworld.com/article/2091041/scheduling-recurring-events-on-ios.html ссылка содержит некоторые предложения. (и мне нравится предложение последнего абзаца!)

Я использую календарь Google на своем iphone, поэтому я не замечал этого раньше и мне трудно в это поверить, но очевидно, что это проблема.

Единственный другой способ обойти это, который я могу придумать, - это предложить пользователям календаря Apple канал ics, который генерирует RDATE для повторяющихся экземпляров, а не RRULE. Конечно, он должен загрузить их?

person anmari    schedule 11.11.2014
comment
Я не думаю, что RDATE также обычно поддерживается... но не уверен насчет iOS. - person Evert; 12.11.2014
comment
еще один пример ограниченной реализации rfc5545! - person Auberon Vacher; 12.11.2014
comment
IOS способна повторять события из подписанных календарей. Я настроил простую подписку Google Calendar с тем же повторяющимся событием, и она работала безупречно. Поэтому я думаю, что где-то в моем коде iCal может быть ошибка, или, конечно, IOS может неправильно следовать спецификации. - person Gjermund Dahl; 12.11.2014

После дальнейшего тестирования кажется, что это сработает, если я удалю правило WKST.

WKST=MO

В конце концов, значение WKST по умолчанию — MO.

person Gjermund Dahl    schedule 12.11.2014
comment
Значение по умолчанию зависит от даты начала. - person mc0e; 20.02.2017