I love the way Apple makes complex things simple. But being the lazy nerd
that I am ... it can never be too easy. Up until recently, I've launched iSync from its menubar icon (you can set this inside the iSync preferences).

Now I have a cronjob that automatically launches iSync and tells it to synchronize
me on both my iBook and my home iMac. It happens every two hours during work hours of three specific days of the week. Here's the cronjob I set with crontab -e on both machines:

Don't know why I didn't think of this... This is is a great solution for my powerbook. My desktop G5 syncs every hour per the prefs (more often than it needs to be, but doesn't bother me). I like to keep my powerbook sync'd but it's often out-and-about with me during the day so I just do it manually when I think about it.

I'll set this up to sync once or twice an evening, and life will be good.

This hint is great, but the following script has the added benefit of exiting iSync if it synchronizes successfully or displaying a dialog that describes the warning or error:

tell application "iSync"
activate
synchronize
-- wait until sync status != 1 (synchronizing)
repeat until sync status is not equal to 1
1
end repeat
set syncStatus to sync status
-- syncStatus = 2 -> successfully completed sync
if syncStatus = 2 then
quit
else
if syncStatus = 3 then
set syncStatus to "completed with warnings"
else if syncStatus = 4 then
set syncStatus to "completed with errors"
else if syncStatus = 5 then
set syncStatus to "last sync cancelled"
else if syncStatus = 6 then
set syncStatus to "last sync failed to complete"
else if syncStatus = 7 then
set syncStatus to "never synced"
end if
display dialog "syncStatus: " & syncStatus
syncStatus
end if
end tell

I saved the script to my Scripts directory as iSync.scpt, and run it twice daily at noon and 8 pm using cron:

Thanks for the tip. I'm installing that as a cron job.
I did make two changes. First, I removed the activate call so that iSync can run in the background. Then, I noticed that the loop waiting for sync to finish is bound to burn a lot of CPU cycles. Here is a slight tweak that is a tad more efficient:

tell application "iSync"
synchronize
end tell
on idle
tell application "iSync"
set syncStatus to sync status
-- syncStatus = 2 -> successfully completed sync
if syncStatus = 1 then
return 7
else if syncStatus = 2 then
quit
tell me to quit
else
if syncStatus = 3 then
set syncStatus to "completed with warnings"
else if syncStatus = 4 then
set syncStatus to "completed with errors"
else if syncStatus = 5 then
set syncStatus to "last sync cancelled"
else if syncStatus = 6 then
set syncStatus to "last sync failed to complete"
else if syncStatus = 7 then
set syncStatus to "never synced"
end if
display dialog "syncStatus: " & syncStatus
syncStatus
end if
end tell
end idle

To get this to work, you'll need to save as Application and check the "Stay Open" box. After the initial tell block, the idle block is called every few seconds. Once sync is done, the script tells iSync to quit and then quits itself.