iCal is a simple format for sharing calendar, event and todo list information between applications. It is widely supported by many many applications.
I have recently been hacking on a couple of projects which required me to implement the format, and during this I hit on a couple of less well documented gotchas.
So, I’ve jotted them down here in order to hopefully save you some time…
- Line endings: The specification says that line endings should be CRLF only, and some less tolerant clients puke if they’re not.
- No blank lines: Ensure that your output contains no blank lines, again some clients with puke or interpret these as the end of the file.
- End in .ics (the biggy): This is important if you dynamically generate an iCal feed for use with Google Calendar. You should set header type appropriately, e.g.
header("Content-Type: text/calendar");
header('Content-Disposition: attachment; filename="calendar.ics"');But critically, if all your entries are showing up only as “Busy”, you must also end the URL you pass to Google calendar as
http://foo.com/bar/whatever.ics
You may find one of these validator tools useful too.
Hope that helps!
Image “Calendar Logo” by Quadmod