Subscribed iCal Calendars
I wanted my subscribed calendars to show up on my iPhone when I used MobileMe’s push calendar support. I came up with this way of doing it and it seems to be much more manageable than using Google Calendar and other 3rd-party apps. It’s really much easier than it looks all written-out. Step 1: Setup iCal
- Create a new regular calendar in iCal to hold the same events that are in the subscribed calendar. I created one called “Holidays”.
- I unchecked my “US Holidays” calendar so that they wouldn’t display in iCal.
Step 2: Setup Automator
- Download the Yellow Camp iCal Automator Actions. (Not sure if the developers’ website still exists. I grabbed my copy from here.)
- The basics of what the Automator script does: Deletes all events from the “Holidays” calendar and then copies the events from the subscribed calendar, “US Holidays”, into “Holidays”. Pretty simple. It works fast enough for the holidays, but I’m sure there’s a point at which this method doesn’t make sense.
- I saved my script as an application (in my Library folder, but it doesn’t matter).

*** Note: In the screenshot, I have Automator create a new calendar. This isn’t necessary. You can choose your calendar from the drop-down. I did this because twice my calendar disappeared after deleting the old events and creating a new calendar fixed it and even kept the same color. Since then I just have it move the event to the original calendar and it’s been fine. Step 3: Setup a Launchd Launch Agent Note: I’m using Leopard, there may be some differences with Tiger. The point of this step is to schedule a time to run the Automator action. For my holiday calendars, I’ve set it up to run the first of each month… just in case something was corrected/updated for whatever reason. For other calendars, you might want to update every day, hour, etc. Launchd will also let you update when a file is modified. It might be possible to only trigger the action when your subscribed calendar is actually updated. I haven’t tried this. I used Lingon to make this easier. (It saved me the hassle of reading the documentation again.) You can also just do it by hand with a text editor. It’s just an XML file.
- Use Lingon and create a new “My Agents” Launch Agent, or open a text editor and write your own XML. You can see my XML code that Lingon generated here. (I got tired of fighting WordPress to show my code.) I’m not going to document how to use launchd here, Apple has docs of their own.
- In Lingon’s box #2 or the XML “ProgramArguments” string, you want that to point to the Automator app we saved earlier. Since the application is a package, I had to actually have it point to the executable file in the package - see my code as an example if you don’t understand.
- If you created this XML file yourself, save it in your Library/LaunchAgents in your Home folder. (It’s important that it’s in the Library in your Home folder.) I saved mine as “com.briantoth.calendarsync.plist”.
- You’ll need to logout and log back it for the changes to take effect.
When the launch agent script fires (based on your settings) it’ll call your Automator action which will, in turn, update your calendar in iCal. Then when your Mac syncs with MobileMe, it’ll push those changes to your iPhone as well. The scripts will continue to run, and MobileMe will sync, as long as your account is signed in. If you don’t want your account unprotected while you’re away from the computer, you can either lock the screen, or use Fast User Switching and just bring up the login window without logging-out completely.