If you’ve got scripts you’ve written for iTunes, one of the first things you’ll realise in Catalina is that instead of having one media app you have two. Sure, this seems self evident. Until you try converting your iTunes scripts to Music and/or Apple TV scripts.
Let’s say you have a script that gets the name of the selected playlist. No matter what kind of playlist you selected in iTunes, this script reliably returned its name. Thus, it would work with a playlist containing strictly music tracks or one with only video tracks. But that was in iTunes. Now, music tracks are in Music and video tracks are in Apple TV.
You could write two scripts, one for Music and one for Apple TV. Or you could write a script that includes routines that can target both, doubling the size of your script.
Or you could use a simple trick to target one or the other app depending on where the script is installed. I always recommend putting your scripts in the app’s “Scripts” folder. It’s just a matter of getting the “path to me” which will return the file path of the script.
Then, you haul out the good ol’ “using terms from“. Throw it all together like this to make a script swing:
set myPath to (path to me) as text
set mediaAppName to "Music"
if (myPath contains ":Apple TV:") then
set mediaAppName to "Apple TV"
using terms from application "Music"
tell application mediaAppName
— do your things in the app
set playlistName to (get name of view of front browser window)
end using terms from
Using the script’s file path location—which will be something like Macintosh SSD:Users:username:Library:Music:Scripts:Name of Script.scpt or Macintosh SSD:Users:username:Library:Apple TV:Scripts:Name of Script.scpt—we can determine which app to target. This name is saved to the mediaAppName variable. (This trick will also work if you store scripts in the local Library folder or in the Library/Scripts/Applications/Music/ or Library/Scripts/Applications/Apple TV/ folders since they all contain the app name in the file path.)
Next, a using terms from block is hardcoded to target “Music”, followed by the tell block for mediaAppName. This allows the script to compile while you’re working on it in Script Editor. Since both the Music and Apple TV scripting goodness are virtually identical, you can indeed “use terms from” Music to automate either app.
Now instead of making two scripts, you can put a copy of one script in both Scripts folders. It doesn’t work with aliases since the location of the Original file will be used.
You will need to wrap any tell statement targeting a particular app in the using terms from block. Also, you may want to assign the mediaAppName as a property or global in order to access it throughout the scope of more elaborate scripts.
[UPDATE, 7.2.2019: The Apple TV app has been re-christened just “TV” in Catalina beta 3. So, in the script above, “Apple TV” will need to be changed to just “TV”. Strangely, the “Scripts” folder for TV must still be in a “Library” directory folder called “Apple TV”. OTOH, the ~/Library/Scripts/Applications/ folder requires the TV folder be named just “TV”. Got that?]
Yesterday, Apple released the first beta of macOS 10.15 Catalina to users in the Apple Beta Software Program. If you’re in the program and have installed the beta, well, surprise! Scripts and apps written for iTunes will not work on it. That’s because there is no version of iTunes in the beta for scripts and apps to work with.
As you are no doubt aware, Apple has replaced iTunes with the Music, Apple TV, Podcasts and Books apps. Between now and the official release of Catalina in the fall, I will be updating very many scripts to work with the Music and Apple TV apps—Podcasts and Books do not have AppleScript support.
Providentially, scripting the Music and Apple TV apps is very much like scripting for iTunes. Their scripting definitions are virtually identical. In many cases, for very simple scripts, updating will merely require changing the target from “iTunes” or “com.apple.iTunes” to “Music”/”com.apple.Music” or “Apple TV”/”com.apple.TV”. More elaborate scripts may require additional modifications and security accommodations.
Thus, there will essentially be two sets of scripts on this site: those written for iTunes that can only run under macOS 10.14 and earlier and those for the newer media apps that can only run under macOS 10.15 and later.
I hope to have a first batch of Catalina-compatible scripts posted in about a week.
Apple has posted an article, About the upcoming changes with iTunes on Mac, which describes the new media apps coming in macOS 10.15 Catalina.
Apple debuted Music.app and Apple TV.app at WWDC yesterday. The macOS 10.15 Developer Beta was released and I’ve installed it. All in all, I’d say things are looking good for scripting the media apps in macOS 10.15.
- There is no iTunes.app in Catalina. Surprisingly! I thought Apple would keep a “legacy” iTunes around, in the same way QuickTime Player 7 and Aperture were allowed to languish. But I’m guessing the new new media apps work well enough that such a strategy was deemed unnecessary.
- Music and Apple TV have AppleScript support. Podcasts app does not.
- Current iTunes scripts will not work with Music.app or AppleTV.app. At least, not without some slight modifications. Music.app’s scripting definitions file is virtually the same as iTunes (likewise the Apple TV.app). So scripts that target application “iTunes” will need to target application “Music” or “Apple TV”. There may be other changes necessary.
- The Music.app Script Menu Lives! Simply create the “Music/Scripts/” folders in the Library folder, put at least one script in it and the Script menu will appear in Music.app. I haven’t tried this with the Apple TV app, but I’m betting it works the same.
- There doesn’t appear to be an automatically updated “iTunes Library.xml” file. Holding out hope this will be available in a later version (or perhaps I’ll stumble over something). This XML file is used by third-party apps to quickly get information about the library. XML files can be user-exported but not having an automatically updated XML is inconvenient. This was being phased out anyway. I haven’t tested the iTunesLibrary/ITLibrary framework under Catalina yet which may be a workaround.
- No Column Browser (sad).
If you are a rabid iTunes user and are chomping at the bit to try Music.app: TAKE THAT BIT OUT OF YOUR MOUTH! I would not recommend using the Developer or Public Betas on a main machine “just to see”. You will not be able to go back without enormous difficulty. If you must install a beta, use a separate partition or virtual machine. Otherwise, wait until the official release.
I will try and update some scripts and apps for Music.app in the coming days and weeks. My Summer is going to be quite busy!