CalDAV On iPhone

One of the exciting new features in the iPhone 3 OS is the ability to access calendars via plain old, standard, vanilla CalDAV. This allows you to finally keep an updated version of all your calenders without syncing your phone to your computer. Just subscribe to your calendars on your iPhone, just like you do in iCal on your Mac, and you'll always be up to date because you'll always be accessing the centrally-located, server-side calendar. This is right and proper and as it should be. But CalDAV over iPhone does have some quirks and limitations.

Subscribing to a Single Calendar

The first thing that's not readily obvious is how to connect to your CalDAV calendars. It is possible to subscribe to multiple Google calendars, for instance, but doing so is neither straightforward nor apparent. Still, once it's done it's done, and it's mostly better than the alternative.

Subscribing to a single Google calendar — your main Google calendar, if you only have one — is really what the iPhone is interface is designed for. Where to do this is also not necessarily obvious:

  1. Open the Settings app.

  2. Press Mail, Contacts, Calendars.

  3. Press Add Account...

  4. Press Other.

  5. Under the Calendars heading, press Add CalDAV Account

  6. Enter your CalDAV server URL (for Google it's just "google.com"), username, password and a short description, then hit the Next button.

  7. The iPhone will verify your information and then, if all goes well, your CalDAV calendar will appear in the Calendar app with the description you provided with the word CalDAV next to it in parentheses.

  8. Now wait. It can take a few minutes for the iPhone to suck down the CalDAV data. I'm not sure why. But it should appear after a few minutes or so.

Navigating to this calendar will cause the iPhone to read the calendar data right from the server. If you have write access you will also be able to add, delete and modify events right on your iPhone and have the changes propagate to the server.

Multiple Calendar Subscriptions

UPDATE: See the end of the article for a better way to sync multiple Google calendars over CalDAV.

In addition to connecting to your main Google calendar it is also quite possible to connect to other CalDAV calendars to which you might want to be subscribed, though the process is hardly as automatic as the one above. Connecting to a single CalDAV calendar is easy for both you and the iPhone because the URL is simple and easy to predict, so the phone just does it for you. If, however, you want to connect to a shared calendar, the URL that you'll need to supply to the iPhone is long and complicated and, unfortunately, must be manually entered.

To do so, you'll probably want to start by getting that URL into the iPhone's clipboard. There are lots of ways to do this. You can get it right from the Google calendar site (if it's a Google calendar) using Mobile Safari. You could also send it to yourself in an email. The way I handle this is that I actually keep a spreadsheet on Google Docs that contains all my shared CalDAV URLs, that way I always have copy/paste access to them from the iPhone or from a computer. But however you do it, just get that URL into your clipboard, because you don't want to type it by hand. Trust me.

The process for adding additional calendars follows the above steps almost exactly. The one exception is that for the Server entry in step 6 you must pass the long URL you just got into your clipboard. Just paste it right there into the field. After switching fields, it will present the Server text as just "google.com" again, but it should have the full URL stored away in its memory. Continue with the process and you should see the new calendar in the Calendar application as before.

Advanced Options

If a problem occurs during subscription an Advanced Settings button will appear.

This button also becomes available after the calendar has been set up. There are three options to set here:

  1. Use SSL

    This allows you to configure your iPhone to connect via SSL, which is required by some servers. Google allows this option and may or may not require it. Generally it's best to have this on if possible. Or at least more secure. If you're having troubles, though, you can try toggling this setting.

  2. Port

    This allows you to set the SSL port, in case your server uses something other than the default of 443.

  3. Account URL

    This is the actual URL to your calendar. The one you pasted into the Server field. If something went wrong during that step you can check and fix it here.

In Practice

There are some advantages and disadvantages to this system. And while I really believe this is how any serious calendaring system should work — all your computers are clients that simply get the calendar data from the cloud — the implementation on the iPhone is not exactly mature.

For one, CalDAV calendars other than your main Google one are a major pain to add to the phone. Google provides an app for doing this on you desktop system, but for the iPhone it must all be done by hand. If you have many calendars it is a long and tedious process.

For two, receiving CalDAV data on your iPhone is, in my experience, very slow. Any changes made on the server will not be immediately seen by the iPhone. It can be several minutes after opening the Calendar app before you see the changes and there's no indication that the sync is even taking place. This can be frustrating and misleading and requires you to always remember that there might be a change that's coming that your iPhone just hasn't seen yet.

Also, from time to time, though very rarely, calendars fail to load. I can't blame this entirely on the iPhone, though. This happens to me even in the browser on my desktop system. It seems to be a problem with Google's implementation and large numbers of calendars. Apparently Apple's not the only one whose CalDAV implementation is immature.

Still, for me this system has worked pretty well thus far. I have a buttload of calendars to which I must stay subscribed, and which I must keep current. And I just don't sync with my computer that often — plus, calendar changes are made at work — so that system was equally dodgy. My calendars don't change that often either, so waiting for data to sync is less of an issue for me, though when there are major changes, getting everything re-synced really blows.

Overall, now that it's in place, I'm very happy with CalDAV on my iPhone, though there is certainly room for improvement. I suspect it will only get better with time.

UPDATE: It looks like it did just get better. I've just discovered a better way to subscribe to multiple Google Calendars that I'm pretty sure wasn't there when I set all this up a few months ago. It's much easier and doesn't require signing in to each calendar. Just subscribe to your main calendar as described in the above outlined steps, and then, on your iPhone, go to this page:

https://www.google.com/calendar/iphoneselect

Here you can select the calendars that will sync over your main Google account.

This is for Google accounts only. If you just have regular old CalDAV accounts that you want to sync with, manual entry will still be required.

UPDATE 2: This method seems to speed calendar syncing as well. I think the old method required the iPhone to log into each individual calendar, whereas this new method logs in once and syncs all the calendars with the one account. Much less work for the iPhone than before. Nice!