Information Syncing


  1. I use Google Apps for my domain.
  2. I own a MacBook running Leopard.
  3. I own a jailbroken iPhone running 2.2.1.


  1. Have Google serve as my primary information store to which all other devices sync.
  2. Have the ability to sync between devices as well as replicate the state of all offline data.
  3. Use iCal on my MacBook for displaying my calendar information, including that of calendars shared with me.
  4. Use Mail on my MacBook for handling my email.
  5. Use Calendar on my iPhone for displaying my calendar information, including that of calendars shared with me.
  6. Use Mail on my iPhone for handling my email.

MacBook Setup

Mail on my MacBook currently syncs through IMAP. Refer to an earlier post for information about how I set it up. Since Mail supports IMAP IDLE I’m pretty happy with this as a solution. Microsoft’s ActiveSync is the only other real alternative here which is also supported by Mail, but is not supported for Google email (Google: Fix this.). IDLE really is good enough for me, but I do gravitate toward perfection.

iCal on my MacBook currently syncs through CalDAV. CalDAV support in iCal is awesome, exposing nearly every feature of the web-based version, including delegates (other people’s calendars that I may see). Excluding the lack of a “Not Yet Replied” status for me on events (Apple: Fix this.) I’m quite happy with iCal. The one negative piece to CalDAV as opposed to ActiveSync is that it is again polling for new data as opposed to simply receiving new events as they are created.

iPhone Setup

My iPhone Mail setup leaves a little bit to be desired. I’ve set up my account to synchronize through IMAP which successfully handles my getting email, however, the iPhone mail client doesn’t support IDLE. Because of that and the fact that Google doesn’t support ActiveSync for email yet, I am only able to poll for new messages. This is not an ideal solution. Apple: support IDLE in iPhone Mail. Google: support Email ActiveSync.

In OS 3.0 iPhone’s Calendar supports syncing the primary calendar only through CalDAV. Without supporting delegates and the rest of CalDAV’s functionality this leaves much to be desired. Apple: provide better CalDAV support on the iPhone. More importantly though, on a mobile device I want push calendaring which stays up to date automatically. Google supports calendaring through ActiveSync but does not support delegates (Google: add this.). Apple only supports one ActiveSync account on the iPhone (Apple: fix this.).

Other Thoughts and Parting Shots

In this day and age, syncing needs to be able to propagate the most recent sync it performed with the primary information store to the device with which it is syncing in addition to any offline data stored on the device. For example, if I were syncing my iPhone Calendar which completely mirrors the server’s state with my non-internet connected MacBook my MacBook should update itself to the latest information stored on that iPhone and also sync to my iPhone any events created since it was last synced. The next time either of these devices talks to the central server it should resynchronize all events with that server. If push notification is available it should then update any other devices with which it syncs. This should be done for email, contacts, and calendars to enable a completely extensible synchronization system between any number of devices and the central store.

As a side note, Google: fix contacts. I’m absolutely frustrated with how poor the system is currently. If you want any suggestions give me a call and I’ll relate to you my frustrations. It’d take too long to write them all down.


I’m unfortunately stuck in my situation right now, I can’t do everything I want, and I’m at the mercy of two gigantic corporations. Hopefully Google will get on the ball and get everything sorted out for ActiveSync, and in the interim hopefully Apple can come through on better support for IMAP and CalDAV on their iPhones. Does anybody know if ActiveSync supports forward propagation of server syncs? Does any existing protocol?