Skip to content

MacOS Sequoia support for VoiceOver AppleScript automation #11257

Open
@jlp-craigmorten

Description

@jlp-craigmorten

Description

In MacOS Sequoia (15) Apple have changed where configuration is stored for enabling AppleScript control of VoiceOver.

Specifically ~/Library/Preferences/com.apple.VoiceOver4/default.plist has been replaced by the sandboxed ~/Library/Group Containers/group.com.apple.VoiceOver/Library/Preferences/com.apple.VoiceOver4/default.plist.

This means the current code at https://github.com/actions/runner-images/blob/main/images/macos/scripts/build/configure-machine.sh#L22-L28 is no longer sufficient to allow the automation of VoiceOver on macos-15 agents.

This should be updated to something similar to:

# Update VoiceOver Utility to allow VoiceOver to be controlled with AppleScript
# by creating a special Accessibility DB file (SIP must be disabled) and
# updating the user defaults system to reflect this change.
if csrutil status | grep -Eq  "System Integrity Protection status: (disabled|unknown)"; then
    sudo bash -c 'echo -n "a" > /private/var/db/Accessibility/.VoiceOverAppleScriptEnabled'

    # New requirement for MacOS Sequoia replacing the `defaults write` below. Due to the plist being located in sandboxed location SIP or similar security controls need to be relaxed before unentitled apps/scripts can modify the value.
    sudo plutil -replace SCREnableAppleScript -bool true ~/Library/Group\ Containers/group.com.apple.VoiceOver/Library/Preferences/com.apple.VoiceOver4/default.plist
fi
defaults write com.apple.VoiceOver4/default SCREnableAppleScript -bool YES

where the pertinent addition is:

sudo plutil -replace SCREnableAppleScript -bool true ~/Library/Group\ Containers/group.com.apple.VoiceOver/Library/Preferences/com.apple.VoiceOver4/default.plist

Note: care needed to make sure that this new command is only executed for MacOS 15 (Darwin 24) agents (as presumably the file does not exist for earlier versions of the OS!)

Platforms affected

  • Azure DevOps
  • GitHub Actions - Standard Runners
  • GitHub Actions - Larger Runners

Runner images affected

  • Ubuntu 20.04
  • Ubuntu 22.04
  • Ubuntu 24.04
  • macOS 12
  • macOS 13
  • macOS 13 Arm64
  • macOS 14
  • macOS 14 Arm64
  • macOS 15
  • macOS 15 Arm64
  • Windows Server 2019
  • Windows Server 2022
  • Windows Server 2025

Image version and build link

  Image: macos-15-arm64
  Version: 20241217.490
  Included Software: https://github.com/actions/runner-images/blob/macos-15-arm64/20241217.490/images/macos/macos-15-arm64-Readme.md
  Image Release: https://github.com/actions/runner-images/releases/tag/macos-15-arm64%2F20241217.490

REF: https://github.com/guidepup/setup/actions/runs/12561961803/job/35021706292?pr=39

Is it regression?

No

Expected behavior

VoiceOver can be automated through AppleScript.

Actual behavior

VoiceOver cannot be automated through AppleScript.

Repro steps

  1. Run macos-15 agent

  2. Start VoiceOver, e.g. execute /System/Library/CoreServices/VoiceOver.app/Contents/MacOS/VoiceOverStarter

  3. Attempt to control VoiceOver using AppleScript, e.g. execute

    -- example.applescript
    tell application "VoiceOver"
      activate
      tell vo cursor to perform action
    end tell
    /usr/bin/osascript example.applescript
  4. Observe that the script errors with example.applescript:60:74: execution error: VoiceOver got an error: vo cursor doesn’t understand the “perform action” message. (-1708) when it would normally succeed (because the dictionary isn't loaded when AppleScript control is disabled).

Metadata

Metadata

Labels

OS: macOSbug reportinvestigateCollect additional information, like space on disk, other tool incompatibilities etc.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions