Ben Dodson

Freelance iOS, macOS, Apple Watch, and Apple TV Developer

AirPlay Alarm Clock with iTunes 12

A few years ago, I wrote a convoluted AppleScript that allowed me to use my Apple TV as an alarm clock. It worked by waking up iTunes, selecting a playlist, shuffling it, and then playing it via AirPlay. Unfortunately, it stopped working when iTunes 11 was released due to a number of changes to AppleScript support; there were also changes to OS X which prevented AppleScripts from launching via Calendar alerts.

Fast forward to today and I found myself needing this script again for a new project1. After a bit of hacking around, I’ve managed to get the script fully updated for iTunes 12:

set AirplayDeviceName to "Kitchen"
set PlaylistName to "Morning"
set AirplayVolume to 100

activate application "iTunes"

tell application "System Events"
	tell application "iTunes"
		set visible of front browser window to true
		set the view of the front browser window to playlist PlaylistName
	end tell
end tell

tell application "System Events"
	tell process "iTunes" to if exists then
		click menu item "Songs" of menu "Shuffle" of menu item "Shuffle" of menu "Controls" of menu bar 1
		click menu item "On" of menu "Shuffle" of menu item "Shuffle" of menu "Controls" of menu bar 1
	end if
end tell

tell application "iTunes"
	set AirplayNames to (get name of AirPlay devices)
	set AirplayDevices to (get AirPlay devices)
	set AirplayToPlay to {}
	repeat with i from 1 to length of AirplayNames
		if item i of AirplayNames as string = AirplayDeviceName then set end of AirplayToPlay to item i of AirplayDevices
	end repeat
	set current AirPlay devices to AirplayToPlay
end tell

tell application "iTunes"
	play playlist PlaylistName
	set the sound volume to AirplayVolume
end tell

The script is significantly smaller thanks to some new AirPlay APIs within iTunes and I’ve updated it to allow for simple changing of volume. It should work in all versions of iTunes 11 and iTunes 12.

In order to get this working as an alarm, we have to jump through a number of hoops on OS X El Capitan. Firstly, we need to save our AppleScript as an application (after you’ve made any adjustments to your Airplay device name, playlist name, and the volume you want). You can do this by opening it within Script Editor and then choosing File > Export.

Export AppleScript as Application

If you haven’t disabled the GateKeeper restrictions on your Mac, you will need to either Code Sign this app or grant an exception within the Security & Privacy settings after you have first tried to open it.

With the alarm exported, we now need to open up Automator and create a new Calendar Alarm. Find the Launch Application action and set that up to point to your newly exported alarm app. Finally, save this and you’ll find a new entry has appeared in your calendar; it will launch immediately thus starting off the iTunes alarm process. Simply copy and paste this alarm entry (or make it recurring) in order to set it to whatever times you want.

I’m going to continue playing around with different ways to launch the alarm but for now this works in much the same way as my old script did.

The full code (and previous version) is available on GitHub.

  1. I’m experimenting with some HomeKit APIs with the aim being that my “Good morning” scene can be activated by a physical button and will not only turn on my lights and disable my security camera but also start playing my morning playlist in the kitchen. This is what I do for fun. ↩︎

Fetching RSS Feeds for Steam game updates » « The Divide #12 - Reboots