Funambol has made the initial snapshot of a Funambol Plugin for Mac OS X available. “Funambol Plugin” is Funambol speak for “a SyncML client”. Claimed features are contact and task synchronization with Funambol servers (emphasis mine). For anyone who can read between the lines this is a hint that standard formats like vCard/vCalendar/iCalendar are not yet supported properly, if at all.
SyncEvolution has supported address book synchronization on Mac OS X since version 0.7, so I was curious how Funambol solved some of the problems. Here’s a quick analysis of their initial code snapshot:
- As suspected, tasks can only be synchronized in Funambol’s own SIF format.
TaskSyncSource::getTaskVCal()only generates empty
- Same for contacts: there is code which sends and receives vCard, but it is based on Apple’s own
ABPersonCreateWithVCardRepresentation(). As I found when porting SyncEvolution, these functions are not particularly useful (read: unusable) when exchanging data with SyncML servers: they generate valid vCard 3.0, but use features like grouping and Apple extensions which are not understood by the servers.
- The code needs refactoring or better, should make use of the new TrackingSyncSource: the code which does change tracking and iterating over items is duplicated in TaskSyncSource.cpp, AddressBookSyncSource.cpp, CalendarSyncSource.cpp.
- According to a comment in
OSXClient::createConfig(), only slow syncs are currently supported. Lack of two-way sync means that it is impossible to delete items on client or server and have that change synced to the other side. Updating items is likely to lead to duplicates. I wonder whether that comment really still applies?!
I’m not sure why Funambol keeps on investing work into supporting their proprietary SIF format (Stefano Fornari already said that they “want to get rid of the SIF format”). But it’s their time, so they get to choose what they spend it on.
However, they now ask the community to help out with the Mac OS X client. I don’t want to discourage anyone from doing that, but at least consider the alternative first:
- SyncEvolution already has full support for vCard 2.1 as used by SyncML servers. Great care was taken to not drop properties needlessly; all remaining loss of information is due to irreconcilable differences in the data formats and documented in the Mac OS X section of the compatibility page.
- Unit testing of individual sync sources (calendar, contacts, notes, tasks) as well as end-to-end tests with SyncML servers are available.
- Adding new sync sources is easy. Basing them on
TrackingSyncSourcemeans that only iterating over items and item import/export has to be implemented.
- There is no GUI yet, but all of the classes in SyncEvolution are meant to be usable as part of a GUI. One could start with the Funambol Mac OS X GUI and just have it call the SyncEvolution classes.
- Funambol doesn’t mind if their clients happen to be compatible with other SyncML servers, but their own goal is only compatibility with the Funambol server. SyncEvolution is explicitly meant to work with as many different SyncML servers as possible, including the Funambol server.
I would be more than happy to assist anyone who wants to work with the SyncEvolution source code on Mac OS X, or any other platform for that matter. If the goals or the code of SyncEvolution are more like your cup of tea (or coffee), then don’t hesitate to contact me.