I'd like to see all of my calendars in the Mac OS X Calendar app, in iOS's Calendar, and maybe even on the web. There are a few ways to get this done, but none of them are perfect.
In a previous tutorial, I explained how to create and share calendars among iCloud users with the Mac OS X Calendar app. In this tutorial, I'll show you three ways to sync calendars between Mac OS X and Google Calendar, and I'll list the benefits and disadvantages of each.
1. Share Google Calendars With Apple Calendar
Locate Internet Accounts in System Preferences > Internet Accounts. Click the plus sign to add a new account, and select Google.
Enter your Google account information, including email address and password. If I didn't have Google 2-step verification turned on, this would be pretty straightforward. With 2-step verification in place, however, I have to get an application-specific password to login.
Log into Google and locate the Manage Application Specific Passwords page at Account > Security > App Passwords Settings. Enter a recognizable name, like MacBook Pro or Mac Authorization. This is important in case the device is compromised and the password must be revoked.
Copy the output password, a string of 16 characters and spaces, and paste it into the password field back in the Internet Accounts pane in System Preferences.
Tip: The link to the Google Account page is hidden under the profile picture in the top right. Click there to find Account settings and a link to Privacy information.
Once logged in, choose which Google services to sync. I've chosen to sync everything, but only Calendar is required for this tutorial.
Everything should be ready to go after adding the Google account to Internet Accounts, but open Calendar.app, Applications > Calendar.app, to be sure. There is now a new Google heading in the Calendar list. Select or deselect calendars to make them visible or invisible in Calendar.
The Google events will be editable from Mac OS X Calendar. They won’t appear in iCloud, but by going through a similar process in iOS's Mail, Contacts, Calendars settings pane on an iPhone or iPad, the Google calendars will appear (and be editable) in iOS's Calendar app, as well.
2. Subscribe to a Google Calendar in Mac OS X Calendar.
The next option is to subscribe to a Google calendar in Calendar.app. Hover over the calendar in the My Calendars list in Google, and click the drop down menu. Select Calendar Settings to navigate to the Calendar Details.
At the bottom of the Calendar Settings page, just above the link to delete the calendar, are the URLs for the calendar. There are two ways to share: public and private. I'm keeping my calendars private, so I clicked the private iCal link to get the appropriate URL for Calendar.app.
Using a public URL works the same, though. If you choose to use the public calendar URL, you must also enable the public URL in the Share This Calendar tab.
Tip: Public calendars can be found in Google search results. I've never stumbled across someone's personal calendar in a Google search, but it's still a good idea to keep everything private if you don't want strangers peeking at your events.
Back in Calendar.app, add the Google calendar by pasting the URL into the calendar subscription field, File > New Calendar Subscription....
Choose the calendar location, in iCloud or locally saved On My Mac, and how often the calendar should refresh. There are a few other settings to fiddle with here, like the calendar's name and color.
The Google calendar will appear in Calendar.app under the iCloud calendar list, but it will not be editable as it would if I added my Google account to my internet accounts in System Preferences. The calendar will also appear in iOS Calendar, but again, it is not editable. The Google calendar will not appear at all when accessing iCloud via a web browser.
This is obviously not the best option to keep personal calendars synced among apps and devices. I'm not interested in just looking at my day on my Mac; I want to be able to edit my events and add new ones. Subscribing to Google calendars just doesn't get that done. It may be useful, though, when sharing calendars with other people, especially if I don't want my calendar to be edited by anyone except me.
3. Subscribe to an iCloud Calendar in Google Calendar
The third option should be to subscribe to an iCloud calendar in Google Calendar, but that just isn't possible. Google is prevented from crawling iCloud calendars by iCloud’s robots.txt file. That means Google can't access iCloud as you or I would and can't retrieve iCloud calendars.
Tip: A robots.txt file contains instructions about who may crawl a site and its directories. The web administrator places the text file in the root directory of the website.
Hypothetically, Google could ignore the robots.txt and crawl only the specific URLs provided by users, but it doesn’t do that at this time.
4. Use a Service to Subscribe to an iCloud Calendar
Right-click on an iCloud calendar in Calendar.app and select Share Calendar. Click the checkbox to make the calendar public and copy the URL provided. The only option to share an iCloud calendar is to make the calendar public, but it is unlikely that someone will figure out that long URL. Google doesn't index calendars on iCloud.com, so no one should find it by searching, either.
Visit iCloud Calendar Proxy and paste the iCloud calendar URL. Copy the output URL and return to Google Calendar.
Select Other Calendars > Add by URL, and paste the iCloud Calendar Proxy URL. The iCloud calendar will appear in the list of Other Calendars, but it will not be editable in Google Calendar.
The only way to share editable calendars between Mac OS X Calendar.app and Google Calendar is by adding the Google account information to Internet Accounts in System Preferences and choosing to sync calendars. The calendars will be available and editable on all Apple devices, but they will not appear at iCloud.com. I also demonstrated several ways to share read-only calendars between iCloud and Google Calendar.
Hopefully in the future it will be easier to integrate iCloud and Google calendars, and these two tech giants will learn to work together to the benefit of their customers.
If you want to take it a step further and publish events on your website by drawing automatically from your Google Calendar and iCal, check out Google, iCal & XML Event List Calendar for PHP. Built on jQuery and PHP, this calendar grabs your events from your Google Calendar, another iCal (.ics) stream or just an XML file, and turns them into a comprehensive list.