iCal/iCloud Reminders - Due Time API Hell
Apple - please give some serious attention to the mess you're creating with your Calendar APIs and apps, please. I could complain about the mess you caused by duplicating calendars when people upgraded to Lion to be able to support Reminders outside of event calendars, or I could complain about how you've yet to provide a way to use your CalendarStore framework to sync directly to iCloud and still require iCal to do this, but I won't.
I will, however, complain loudly about the mess and inconsistency shown with your current implementation of Reminders. (Specifically, the concept of "due times", which you fail to properly implement in 2/3 of your own calendar apps). It is impossible to create a Reminder due on a certain time with Lion's iCal, or even iCloud.com!
I'm going to create one for tonight in a few hours at 9pm (2100) using the Reminders app on the iPhone...
Okay. Due times are a new thing to Reminders (previously known as To Dos, previously known as Tasks). A few minutes later, thanks to the magic of the iCloud, I see my Reminder in iCal!
Okay. Good so far. However, a trip to iCloud.com, and we start to see issues:
This task isn't due yesterday. (GMT, maybe, but not my system time zone)
This isn't my largest complaint. This is the start of inconsistency. I need to remind myself to make a mixed drink tonight at 10pm. But this time, I'll create it in iCal. The first thing I notice, is that the overdue icon shows on this new reminder, but the event is "due" an hour AFTER the first reminder I created!
What I've learned: iCal doesn't support due times on Reminders the same way as the Apple Reminders app does. The "time" on the due date property can't be set from iCal, but it IS set in Reminders iOS app.
iCloud.com's view of things - it matches iCal, sorta, with some questionable UX choice... Reminder is due today, and remind me "22 hours after". Em, okay.
Of course, it's impossible to create a proper reminder with a due time using iCal or iCloud.com ..
So, maybe the problem is only specific to the UI in iCal and iCloud.com not letting you specify a time on a dueDate? The docs say this should support both... So, here's a CalTask object that I save, which still breaks.
CalTask <0x1c7b250> {uid = 3E01D80A-85DF-4322-87B3-0163E40AE4B1; dateStamp = (null); title = Another drink; notes = (null); URL = (null); calendar = CalCalendar <0x4e054e0> {UID = 337F8BC4-D7C1-4132-9E16-931E0436E8E1; title = Reminders; notes = ; color = NSCalibratedRGBColorSpace 0.443137 0.101961 0.462745 1; type = CalDAV; editable = 1}; alarms = (
"CalAlarm <0x1cd53a0> {action = AUDIO; URL = (null); sound = Hero; emailAddress = (null); relativeTrigger = 0.000000; absoluteTrigger = 2012-01-10 05:00:00 +0000}"
); dueDate = 2012-01-10 05:00:00 +0000; completedDate = (null); priorty = 0}
(I'm GMT-0600 , so this should be 11pm. iCal still shows an overdue task, iCloud shows one due "23 hours after", and Reminders app doesn't show a due time)
Oh, back to iCloud.com... Remember the option to alert you "22 hours later"? Or, seeing the dropdown above, being able to set a specific time on a day? Try doing that with a new Reminder, and you'll find that those options don't exist for you!