I am looking for a way to represent recurrence in iCalendar that works in Google Calendar, Android and iOS. I am working with a timetabling system where weekly recurrence is very common but the patterns of recurrence are not always regular.
Here are some examples, both work in Google Calendar. Ideally I want one feed for all devices.
Works in Android (but not in iOS)
BEGIN:VEVENT
DTSTAMP:20121113T111932Z
SUMMARY:A Series of Meetings
LOCATION:Somewhere
DESCRIPTION:Very important things to discuss
TZID:Europe/London
DTSTART;TZID=Europe/London:20121204T140000
DTEND;TZID=Europe/London:20121204T160000
RDATE;TZID=Europe/London:20121204T140000,20130115T140000,20130129T140000
SEQUENCE:1
UID:blahblahblah
END:VEVENT
I found that if I omitted the DTSTART date from the RDATE list it did not show the first activity occurrence on Android (but did in Google Calendar). I came to the conclusion that RDATEs do not work on Apple devices.
Works in iOS (but not in Android)
BEGIN:VEVENT
DTSTAMP:20121113T112004Z
SUMMARY:A Series of Meetings
LOCATION:Somewhere
DESCRIPTION:Very important things to discuss
TZID:Europe/London
DTSTART;TZID=Europe/London:20121204T140000
DTEND;TZID=Europe/London:20121204T160000
RRULE:FREQ=WEEKLY;UNTIL=20130129T140000;INTERVAL=1
EXDATE:20121211T140000,20121218T140000,20121225T140000,20130101T140000,20130108T140000,20130122T140000
SEQUENCE:1
UID:blahblahblah
END:VEVENT
I appreciate that the above iOS example is probably not the most efficient way to produce an RRULE but I am looking for a method that is easy to produce for weekly recurrent activities of various patterns.
The iOS example fails in Android because only the first EXDATE entry is observed. I think Google Calendar is putting the EXDATE's on separate lines and therefore breaking it for Android consumption.