iCalendar:周期性事件未在IOS中正确显示



简介

我的PHP生成的iCalendar文件中的重复事件无法在IOS应用程序中正确重复。它们确实在Outlook 2010和谷歌日历中正确出现,但在IOS 8.1(iPhone 5S和iPad 2)中则不然。

详细信息

以下文件生成了一个日历文件,适用于MS Outlook和Google calendar等应用程序的订阅。该文件包含一个VTIMEZONE和一个VEVENT,从7-28每周五重复出现。2014年11月,共4例复发。

iCalendar文件:http://www.elitesystemer.no/mycal_stack_example.php(完整代码如下)

在我的两个iDevices(IOS 8.1)上,此事件只发生一次;2014年11月7日。这种奇怪的行为适用于本机日历应用程序和Week calendar应用程序(网站:http://weekcal.com)。

该文件与MS Outlook 2010和谷歌日历完美配合,但与IOS不兼容。不幸的是,我在苹果论坛上找不到任何类似的问题。我当时既不能用以前的操作系统版本的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 "rn";?>
VERSION:2.0<?echo "rn";?>
METHOD:PUBLISH<?echo "rn";?>
CALSCALE:GREGORIAN<?echo "rn";?>
PRODID:-//Elite Systemer//Ver 1.6//NO<?echo "rn";?>
BEGIN:VTIMEZONE<?echo "rn";?>
TZID:Europe/Oslo<?echo "rn";?>
BEGIN:DAYLIGHT<?echo "rn";?>
DTSTART:19810329T020000<?echo "rn";?>
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU<?echo "rn";?>
TZNAME:CEST<?echo "rn";?>
TZOFFSETFROM:+0100<?echo "rn";?>
TZOFFSETTO:+0200<?echo "rn";?>
END:DAYLIGHT<?echo "rn";?>
BEGIN:STANDARD<?echo "rn";?>
DTSTART:19961027T030000<?echo "rn";?>
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU<?echo "rn";?>
TZNAME:CET<?echo "rn";?>
TZOFFSETFROM:+0200<?echo "rn";?>
TZOFFSETTO:+0100<?echo "rn";?>
END:STANDARD<?echo "rn";?>
END:VTIMEZONE<?echo "rn";?>
BEGIN:VEVENT<?echo "rn";?>
UID:f8a81b8613113296503aa6fca2b61ce5@elitesystemer.no<?echo "rn";?>
DTSTART;TZID=Europe/Oslo:20141107T140000<?echo "rn";?>
DURATION:PT60M<?echo "rn";?>
RRULE:WKST=MO;FREQ=WEEKLY;INTERVAL=1;BYDAY=FR;UNTIL=20141128T150000<?echo "rn";?>
SUMMARY;LANGUAGE=no:Friday<?echo "rn";?>
DESCRIPTION;LANGUAGE=no:Oppgave: Fridayn<?echo "rn";?>
LOCATION;LANGUAGE=no:Timenesveien 33<?echo "rn";?>
BEGIN:VALARM<?echo "rn";?>
TRIGGER:-PT15M<?echo "rn";?>
ACTION:DISPLAY<?echo "rn";?>
DESCRIPTION:Reminder<?echo "rn";?>
END:VALARM<?echo "rn";?>
END:VEVENT<?echo "rn";?>
END:VCALENDAR

令人震惊,但ios似乎根本不会在一周中的某一天重复发生事件-谷歌在2014年1月的一篇帖子中快速发现:

缺少按星期几安排重复事件的功能在iOS上运行。

http://www.macworld.com/article/2091041/scheduling-recurring-events-on-ios.html这个链接有一些关于它的建议。(我喜欢最后一段的建议!)

我在iphone上使用谷歌日历,所以我以前没有注意到这一点,很难相信,但很明显这是一个问题。

我能想到的唯一其他方法是为苹果日历用户提供一个ics提要,为重复出现的实例生成RDATE,而不是RRULE。它肯定应该装载这些吗?

经过进一步的测试,如果我删除WKST规则,它似乎可以工作。

WKST=MO

毕竟,WKST的默认值是MO。

最新更新