LoginSignup
6
6

More than 3 years have passed since last update.

[macOS] AppleEventサポート

Last updated at Posted at 2020-08-11

macOSにおけるAppleEventサポート方法

アプリケーションから、他のアプリケーションを制御するために、Scripting Supportが準備されているのですが、ここ数年資料の更新が行われていません。本稿では最近のmacOS(10.15)でのサポート状況、方法についてまとめていきます。

なお、本稿で説明するのは、AppleEventの送出側の実装です。受信側については、別記事
[macOS] Cocoa Scripting Supportをご覧下さい。

資料作成日: 2020.08.11
更新日: 2020.09.06

実行環境

下記を想定しています:

  • OS: macOS 10.15
  • Xcode: 11.6
  • 言語: Swift

AppleEvent

自アプリから他のアプリへのイベントの送信/受診に際して、イベントの実行はNSAppleEventDescriptorクラスで実装します。

Sandbox対応

Sandbox下のアプケーションにて、AppleEventの送受信をサポートするためには、次の設定が必要です。下記の例では、TextEdit.appを制御する場合について記述しています。

.plistファイルの設定

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        .....
        <key>NSAppleScriptEnabled</key>
        <true/>
        <key>OSAScriptingDefinition</key>
        <string>CoconutScript.sdef</string>
        <key>NSAppleEventsUsageDescription</key>
        <string>Please permit to use AppleEvent</string>
        ....
</dict>
</plist>

3番目の項目については、Apple Developer ForumのNot authorized to send Apple events to Mailを参照しています。この項目を定義しなければ、macOSの「システム環境設定」の「セキュリティとプライバシー」の「オートメーション」にアプリケーションが登録されない様です。

.entitlementsファイルの設定

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
....
        <key>com.apple.security.temporary-exception.apple-events</key>
        <array>
                <string>com.apple.TextEdit</string>
        </array>
        <key>com.apple.security.scripting-targets</key>
        <dict>
                <key>com.apple.TextEdit</key>
                <array>
                        <string>com.apple.TextEdit</string>
                </array>
        </dict>
....
</dict>

2番目の項目、com.apple.security.scripting-targetsについては、Hardened Runtime and Sandboxingを参照しました。

アプリケーションソフトウェアのbundle identifierの取得

macOS付属のlsappinfoにて取得可能。
対象となるアプリが起動した状態で実行する必要がある。また、「テキストエディット」については、TextEditでは指定できない。

% lsappinfo info -only bundleid テキストエディット
"CFBundleIdentifier"="com.apple.TextEdit"

参考文献

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6