How Mac Scripting Works
The Open Scripting Architecture (OSA) provides a standard and extensible mechanism for interapplication communication in OS X. This communication takes place through the exchange of Apple events. An Apple event is a type of interprocess message that encapsulates commands and data.
A scriptable application responds to Apple events by performing operations or supplying data. Every scriptable app implements its own scripting features and exposes its own unique terminology through a scripting dictionary. While not all apps are considered scriptable, any app with a graphical user interface responds to Apple Events at a minimal level. This is because OS X uses Apple Events to instruct all apps to perform core tasks such as launching, quitting, opening a document, and printing. To learn about scripting terminology and dictionaries, see Accessing Scripting Terminology.
The OSA provides the following capabilities in OS X:
The ability for app developers to create scriptable apps and expose scripting terminology
The ability for users to write scripts in a variety of scripting languages
The ability to communicate between apps on the same computer or on different computers using Apple events
The Apple Event Manager supplies the underlying support for creating scriptable apps and is implemented in the AE framework within the CoreServices framework. App developers can interact with the Apple Event Manager through the Apple Event APIs in the Foundation framework. See NSAppleEventManager Class Reference and NSAppleEventDescriptor Class Reference.
Figure 2-1 shows how OSA elements work together in OS X.
Extending the Reach of Scripting
Every scriptable app expands the reach of scripting. Developers can also add new scripting capabilities through scripting additions and scriptable background apps.
A scripting addition is a bundle that implements new scripting terminology. For example, the Standard Additions scripting addition that comes with OS X (found in
/System/Library/ScriptingAdditions/StandardAdditions.osax), includes commands for using the Clipboard, displaying alerts, speaking text, executing shell scripts, and more. Since scripting additions are loaded in a global context, commands provided by Standard Additions are available to all scripts.
A scriptable background application (sometimes called an agent) runs with no visible user interface and provides scripts with access to useful features. System Events and Image Events are examples of scriptable background apps in OS X. Scripts can target System Events to perform operations on property list files, adjust system preferences, and much more. Scripts can target Image Events to perform basic image manipulations, such as cropping, rotating, and resizing.
Several technologies in OS X make it possible for scripts to interact with Objective-C frameworks, and vice-versa.
The Scripting Bridge lets you control scriptable apps using standard Objective-C syntax. Instead of incorporating scripts in your Cocoa app or dealing with the complexities of sending and handling Apple events, you can simply send Objective-C messages to objects representing scriptable apps. Your Cocoa app can do anything a script can, but in Objective-C code that’s more tightly integrated with the rest of your project’s code. See Scripting Bridge Programming Guide and Scripting Bridge Framework Reference.