Archive for the 'AppleScript Libraries' Category

2015/05/22 BridgePlusがv1.0からv1.1にバージョンアップ

Shane StanleyによるOSのScripting Bridgeのバグを回避しさまざまな高度な型変換機能や計算機能をAppleScriptにもたらす「ASObjCExtras.framework」の後継ソフトウェア、「BridgePlus」の登場から間もないですが、早くもバージョンアップ!

バージョン1.0から1.1になりました。

基本的な機能については、さほど変更はなく・・・AppleScriptObjCをさわっていないAppleScriptユーザーに便利で簡単に感じられるように、AppleScript用語辞書が補われているという方向で機能強化されています。FrameworkではAppleScript用語辞書がついていないので、そこを補うために「見た目のファイル形状」(Framework単体からFramework入りScript Librariesへ)を変更したということです。

BridgePlusのAppleScript用語辞書を用いて記述するかぎりは、結果などすべてAppleScriptのオブジェクトに変換して返してくれるので、いきなりNSArrayなどが返ってきて面食らうようなことはないはずです。Arrayのindexも0ベースではなくAppleScriptの1ベースのindexが返ってくるため、違和感をおぼえないようになっています。

ただ、これはつまり・・・値を返すときにかならず毎回CocoaオブジェクトからAppleScriptオブジェクトへの再変換を行っているわけで、高速なScriptを組むときにはこのオーバーヘッドを回避できるよう、内部機能を直接呼び出す方向でScriptを組んだほうがメリットがあります。

上級スクリプター向けの機能を維持しつつ、一般スクリプター向けにわかりやすさと単純さを高めた・・・という感じでしょうか。

AppleScript名:BridgePlus v1.0の記述サンプル
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”
use script “BridgePlus” version “1.0″

set someList to {1, 3, 2}
set anArray to Cocoaify someList
set anArray to anArray’s sortedArrayUsingSelector:“compare:”
set aList to ASify from anArray
–> {1, 2, 3}

★Click Here to Open This Script 

AppleScript名:BridgePlus v1.1の記述サンプル
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”
use BridgePlus : script “BridgePlus” version “1.1″

set aList to BridgePlus’s sortListOfNumbers:{1, 3, 2}
–> {1, 2, 3}

★Click Here to Open This Script 

AppleScript名:BridgePlus v1.1の記述サンプル(上級者向け記述)
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”
use BridgePlus : script “BridgePlus” version “1.1″

load framework –一応、念のため実行。初回呼び出し時のオーバーヘッド軽減のため
set someList to {1, 3, 2}
set anArray to Cocoaify someList
set anArray to anArray’s sortedArrayUsingSelector:“compare:”
set aList to ASify from anArray
–> {1, 2, 3}

★Click Here to Open This Script 

2015/05/21 ASObjC Extras.frameworkからBridgePlus Script Libraryへ

Scripting Bridgeのバグを回避し、より手軽にCocoaオブジェクトとAppleScriptオブジェクトの相互変換が行えるようにしたのが、Shane StanleyのASObjCExtras.frameworkです。

日々、便利に使っていますし・・・いくつかのアプリケーションやシステムはすでにASObjCExtras.frameworkを用いて記述し、稼働しています。

ただ、ここまで気合いの入ったASObjCExtras.frameworkですが、まだ大々的に利用されるにはいたっていません。

理由は・・・

(1)ASObjC自体が、Scripterにそれほど理解・利用されていない(Appleがドキュメントを一切出していないので、事実上Shaneの電子ブック「AppleScriptObjC Explored」と「Everyday AppleScriptObjC」を読まずに使うのは無理!)

(2)ASObjCExtras.frameworkにかぎらず、Cocoaの機能を使おうとしてもAppleScript用語辞書が存在していないので、「用語辞書を見ながらScriptを書く」というやり方ができない

といったあたりだとShaneは分析しており、加えて自分は、

(3)CocoaのオンラインドキュメントがObjective-CとかSwift用であって、AppleScriptObjCの書き方が書かれていない

さらに、

(4)Apple純正のScript Editorの機能不足

といった点も問題だと思っています。CocoaのAPIを調べて記述するだけの機能はScript Editorには備わっていません。

そこでShaneはASObjCExstras.frameworkの後継Framework「BridgePlus.framework」を含んだAppleScript Libraries「BridgePlus Library」を発表。配布を開始しました

AppleScript Librariesなので、AppleScript用語辞書が見られるし、useコマンドでバージョン番号も指定できる(割と頻繁にバージョンアップするので)など、さまざまな問題が解決できる見込みです。

bridgep.png

えー、一応事前に「こういうのやりたいんだけど(ドキュメントが作り直しになっちゃうかもしれないけど)、どうかな?」という打診はもらっていまして(^ー^;; そりゃー、Shaneがやりたいと思うんなら「一番いいと思う方向でやっちゃってくださいよ。ドキュメントのことは気にしないで」とお答えしておきました。

AppleScript名:ASObjCExtrasの記述サンプル
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”
use framework “ASObjCExtras”

set aList to {1, 3, 2}
set aArray to current application’s SMSFord’s Cocoaify:aList
set aRes to aArray’s sortedArrayUsingSelector:“compare:”
set bList to aRes’s ASify() as list
–> {1, 2, 3}

★Click Here to Open This Script 

AppleScript名:BridgePlusの記述サンプル
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”
use script “BridgePlus” version “1.0″

set someList to {1, 3, 2}
set anArray to Cocoaify someList
set anArray to anArray’s sortedArrayUsingSelector:“compare:”
set aList to ASify from anArray
–> {1, 2, 3}

★Click Here to Open This Script 

2014/11/07 「AppleScriptの穴」の方針転換〜Framework活用します

AppleScriptの命令拡張を行うOSAXという仕組み

AppleScriptは、Classic Mac OSの仕組みを長く引きずってきたために、Classic Mac OSの機能拡張と同様、「スクリプティング機能拡張」(OSAX:Open Scripting Architecture eXtension)をインストールすることで命令を追加する仕組みになってきました。

osax1.png

▲/System/Library/ScriptingAdditionsに入っているOS標準のOSAX

osax2.png

▲/Library/ScriptingAdditionsに入っているサードバーティのOSAX。Adobe関連のものは勝手に入るのでXMLLib OSAXしか自分では入れていない

OSAXはたしかに便利な存在ではありました。インストールさえすれば、自分で書かなくても便利な命令がすぐに使えるようになり、シリアルポートにつないだ機器のコントロールなど、AppleScriptが標準で持たないさまざまな機能を手軽に利用してきました。

しかし、OSAXをインストールしすぎると予約語が衝突(コンフリクト)することもありましたし、せっかくAppleScriptを書いてもOASXの配布に制約が生じている場合には、OASXごと再配布したり納品することもできませんでした。便利なだけではなかったのです。

Mac OS X移行時にOSAX非依存へ方針転換

このため、2001年前後のClassic Mac OSからMac OS Xへの移行時に「OSAXを極力使わない」という方針転換をしました。それまで、システムに200個以上のOSAXをインストールして使っていた自分としては大々的な方針転換です。

当時、「これがなければまともなAppleScriptは書けない」と言われたほど全世界のScripterが依存しまくっていた「Tanaka’s OSAX」を使用しない、という決断をしたわけで、ひじょーに重要な決断です。

自前で各種ライブラリを整備し、OSAX、FileMaker Pro、Jeditに依存しない処理がじょじょに行えるようになってきことから、のちにXcode上でAppleScriptのプログラムを作れる「AppleScript Studio」の仕組みが出てきたときにも、作りためたルーチンが威力を発揮しました。再配布可能な自作のライブラリ群により、GUIベースのアプリケーションが手軽に作れて配布可能になっていたためです。

OSAX自体の開発についてはMac OS Xの誕生当時にCarbonベースで開発リソース(API、資料、サンプルコード)が提供されてきたものの、時代が流れてアプリケーション開発がCarbonからCocoaへ、32bitから64bitへ、PowerPCからIntelへと何度も移行を重ねるうちに、提供されなくなっていきました。

必然的に、サードパーティのOSAXも減っていきました。

OSAX非依存路線への転換は個人的には大正解だったわけですが、AppleScriptの命令拡張を行いたいというScripter側のニーズは満たされないままの状態が続いていました。

OASXの穴を埋めるAppleScript Libraries、ASOC

OS X 10.9でもたらされたAppleScript Librariesの仕組みにより、「AppleScript単体でAppleScriptの命令語を拡張できる」状態になり、OSAXの存在意義がほぼなくなりました。AppleScript LibrariesはAppleScriptObjCでも記述できるため、Cocoaの機能を呼び出すようなものも作れます(オーディオ入出力先の切り替えを瞬時に行うLibrariesを作って便利に使っています)。

さらにOS X 10.10でも大きな変化がもたらされました。通常のAppleScriptにScripting Bridgeが導入されたことで、通常のAppleScriptでCocoaの機能にダイレクトにアクセスできるようになりました。

ただ、この現在の仕組みを支えるScripting Bridgeはまだ修正が必要、とくにASとASOCとの間での値の変換に問題を抱えています(小数点以下の値を含む数値リストの変換時に丸め誤差が出る)。腰の重いAppleのことですから、すぐに修正されたりはしないでしょう。とても困ります。

ASOCとASの橋渡しを円滑化するASObjCExtras.Frameworkを全面的に採用

これまでのサードパーティ製OSAXやフレームワークへの非依存を一部あらため、本ブログ「AppleScriptの穴」〜ひいてはPiyomaru Software自身の開発においてはShane StanleyのASObjCExtras.Frameworkを標準採用することにしました

framework.png
▲/Library/Frameworksか~/Library/FrameworksにインストールするASObjCExtras.Framework

同フレームワークを用いることで、現在のScripting Bridgeが内包しているバグを回避することができるようになり、よりAppleScriptとASOCの相互運用性が高まります。

同フレームワークは再配布無制限で、コードサインも行われていないため、自分で作ったAppleScriptのバンドル中に入れてコードサインすることも可能です。

本日、Shaneから依頼されてチェックやら評価を行ってきたASObjCExtras.Frameworkの最新版(v1.1.0)が、以下のページからダウンロードできるようになったためお知らせします。

http://www.macosxautomation.com/applescript/apps/ASObjCExtras.html

2014/06/16 AppleScriptの「意味なし予約語」

AppleScriptには、とくに機能を持たない予約語……「意味なし予約語」(あるいは「意味なし修飾句」)があります。

意味なし予約語として用意されているものには、

about, against, apart from, around, aside from, at, below, beneath, beside, between, by, for, from, instead of, into, on, onto, out of, over, since, through, thru, under

などがあります。

これが何のために用意されているかといえば、ハンドラ(サブルーチン)呼び出しを英語の文章っぽく記述するため、です。使用頻度については……ぶっちゃけ、そんなに多くないのですが、今後増えていく可能性がありそうな気配がしています(OS X 10.10のリリースノートを見ると)。意味なし予約語やラベル付きハンドラを使うと、Swiftとの文法的な差異が少なく見えるので(別物ということでは、ものすごく別物ですが)、いいんじゃないでしょうか。

まず、ハンドラの「基本」を説明し、ラベルつきハンドラ、意味なし予約語つきハンドラの順番で説明しましょう。

基本的なハンドラの書き方

基本的なハンドラは、onまたはtoで書き始め、ハンドラ名、ハンドラパラメータ受信部があり……最後は「end ハンドラ名」で終了します。

スクリプト名:基本的なハンドラ(1)
set a to testMe(“TEST”)
–> “TEST”

on testMe(aParam)
  
  
return aParam
  
end testMe

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

スクリプト名:基本的なハンドラ(2)
set a to testMe(“TEST”)
–> “TEST”

to testMe(aParam)
  
  
return aParam
  
end testMe

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

宣言部分はonでもtoでもよく、自分はonで統一しています。これは、AppleScript自体をAppleScriptで解析する(相互呼び出し関係をマインドマップ上にプロットするとか)場合に、宣言句が統一されていた方が都合がよいためです。

本Blogに掲載しているサブルーチンは、複雑さを排除するためにすべてこの書き方(on)で統一しています。

ラベルつきハンドラ

基本的なハンドラ、

on testMe(aParam, bParam)

があったときに、これを呼び出す部分の書き方は、

set aRes to testMe(”100″,”20″)

となります(testMeが値を返す場合)。

この書き方はシンプルではあるものの、この”100″および”20″が何を意味しているかが分りません(書いているうちに本当にそう思ってきた!)。

そこで、呼び出し部分のパラメータに

set aRes to testMe given fromD:”1″, toD:”2″

などと「ラベル」を付ける書き方が用意されています。このさい、「fromD:」と「toD:」がラベル部分です。なんとなく、開始値と終了値であることが見てとれます。

「ラベル」にはAppleScript自身やアプリケーションの持つ「予約語」と重複するものは使えません(構文確認時にエラーになります)。

set aRes to testMe given from:”1″, to:”2″

と書けたらスッキリするのですが、このラベルはAppleScriptの予約語と重複しているため構文確認時にエラーになります。

スクリプト名:ラベルつきハンドラ(1)
set aRes to testMe given fromD:“1″, toD:“2″
–> {”1″, “2″}

on testMe given fromD:d1, toD:d2
  
  
return {d1, d2}
  
end testMe

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

上記のハンドラをラベルを使わずに、プレーンな記述法を用いると以下のようになります。

スクリプト名:ラベルつきハンドラ(2)
set aRes to testMe(“1″, “2″)
–> {”1″, “2″}

on testMe(d1, d2)
  
  
return {d1, d2}
  
end testMe

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

「意味なし予約語」をまじえたハンドラ呼び出し

ハンドラ呼び出し部分の可読性を上げる(読みやすくする)ために、意味なし予約語をまじえて記述できます。

繰り返しになりますが、意味なし予約語は……

about, against, apart from, around, aside from, at, below, beneath, beside, between, by, for, from, instead of, into, on, onto, out of, over, since, through, thru, under

などがあります。位置関係を示す単語が多いですね。

英語の文章的に意味が通らないように滅茶苦茶に使っても、とくにチェックはないのですが……やはり基本は「英文として意味があるような感じっぽい感じ」で書くのがよいのでしょう。

これは……たとえばInDesignのドキュメント上で指定したScript Labelを持つpage itemに、座標的に最も近い位置にあるpage itemを返す、といったサブルーチンの呼び出しに記述するとよいのではないでしょうか。

スクリプト名:意味なし予約語つきハンドラ(1)
set a to listUp beside “TEST”
–> “TEST”

on listUp beside anObject
  
  
return anObject
  
end listUp

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

こちらは、開始日から終了日までの間に増分値を指定してdate objectを返す、というサブルーチンの呼び出しによさそうな感じもします。

スクリプト名:意味なし予約語つきハンドラ(2)
set aRes to makeDays thru “2014/1/1″ to “2014/6/1″ by 7
–> {”2014/1/1″, “2014/6/1″, 7}

on makeDays thru startDate to endDate by dateStep
  
  
return {startDate, endDate, dateStep}
  
end makeDays

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

……今後、OS X 10.10でハンドラの書き方が拡張されるようなので、このあたりもおさえておくとよいでしょう。可読性を上げられるかどうかは、いろいろ実際に試してみないといけないでしょう。

OS X 10.9で導入されたAppleScriptライブラリを記述するような場合に、ライブラリ本体にAppleScript用語辞書を加えることで用語の定義(AppleScript予約語の拡張)を行えるわけですが、そこまでやらなくてもこれらのラベルつきハンドラや意味なし予約語の併用によって可読性を上げるようなことも考えられます。

2014/05/21 AppleScript Libraries中で自分のパスを求める

AppleScript Librariesを実戦でまともに使えるか実験中です。その中で「ライブラリに何か実行ファイルをまぜて使えないと辛い」という話が(1人会議中に)出てきました。

この、いろいろと手の込んだことをやろうと思うと必須になる「パスの取得」を、実際にためしてみました。

まず、ダミーのAppleScriptライブラリを作成。

スクリプト名:soundIO Lib
on testMe()
  
  
set aPath to path to me
  
return aPath
  
end testMe

on test()
  return “test”
end test

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

この「soundIO Lib」というAppleScriptライブラリは、AppleScript Librariesなので保存時に「スクリプトバンドル」として保存しておく必要があります。

saveas.png

バンドルで保存して、~/Library/Script Libraries/に移動。

こんな簡単なテストScriptを新規作成して実行。

スクリプト名:pathTest
use soundIO : script “soundIO Lib” version “1.0″

set a to soundIO’s testMe()
–> alias “Macintosh HD:Users:me:Library:Script Libraries:soundIO Lib.scptd:”

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

これで、AppleScriptライブラリ中で自分(ライブラリ)自身のパスを取得できることが確認できました。

AppleScriptライブラリ(バンドル)の中に実行ファイルを入れておいて、ライブラリ中で呼び出すことができるというわけです。

# do shell scriptで呼び出すことを想定しています

実際に、バンドル内に同梱した実行ファイルをdo shell scriptコマンドで呼び出して、オーディオ入出力デバイスの確認や設定がAppleScriptライブラリを経由して行えるようになりました(システム環境設定を起動する必要なし)。

aslib10.png

2014/05/21 AppleScript Librariesを指定する際のuseコマンドにversion指定が可能

「(現状の)AppleScript Librariesがなぜまともに使えないか?」という問いがありますが、

 (1)それを好きこのんで提供しても開発者側にメリットがない(金銭面の問題)
 (2)新バージョンのライブラリを作っても自動的にアップデートする仕組みがない
 (3)ライブラリのバージョン管理の仕組みがない

といったあたりが問題でしょうか。仕事で大規模なシステムを組むさいに、部品の管理用には使えるかもしれない(バンドル内にライブラリを入れて非公開使用)という程度の認識です。

本当は、(4)として相互依存性の解消について(方法がないことを)挙げておきたかったのですが、そもそもそういう面倒なことに目をつぶる考えの能天気システムっぽいのでやめておきました。あくまでOSAX(Scripting Addition)の代替としてありがたく運用しろよ、というAppleScript Engineeringチーム側の意図がヒシヒシと感じられます。

(1)はそういう「仕組み」を作る必要があるし、(2)もないと困りますが……けっこう(3)が問題です。

古いライブラリを前提にAppleScriptを書いてしまい、実行環境にWebからダウンロードしたライブラリはバージョンの新しいものだった(バージョンの不一致)……ということはひじょーにありえます。困りますよね?

useコマンドには、

 (f1) 特定アプリケーションへのtellブロックのデフォルト化
 (f2) AppleScriptライブラリの使用指定
 (f3) AppleScript実行環境(AppleScriptラインタイム)のバージョン指定
 (f4) Scripting Additionの使用の有無の指定
 (f5) AppleScriptライブラリ中における、Frameworkのinclude指定(AppleScriptObjC)

といったはたらき(fはfunctionのf)があります。ここで、(f3)と(f2)に注目。

「AppleScriptのバージョンが指定できるんだから、AppleScript Librariesのバージョンも指定できるんじゃねーの?」

という疑問が、当然のように湧いてくるわけです。そこで、実際に試してみました。

aslib1.png

Charanさんのところで公開されていたJSON⇄record変換のライブラリを使ってみましょう(実体参照の置換/変換やエラー時の対処がないのは自分で書けということで)。

aslib2.png

バージョンが”1.0″になっていることを確認。このライブラリは~/Library/Script Libraries/フォルダに入れてあります。

おもむろに、AppleScript Librariesを指定するuseコマンドにバージョンを表記して構文確認(コンパイル)すると……何も問題なく構文確認が通ります。

このバージョン表記を”2.0″とかの「存在しないバージョンの値(大きいほうの)」にしてAppleScriptエディタ上で構文確認してみると……

aslib3.png

(日本語的に意味不明な)エラーメッセージが表示されます。Appleのリリースノートにも掲載されていないし、Sal Soghoian+Shane Stanleyが更新しているmacosautomation.com上の記事にも書かれてはいませんが、どーーもAppleScript Librariesもuseコマンドにバージョン表記を行うことでバージョン管理が行えるようです。

ちなみに、AppleScript LibrariesのバージョンチェックはAppleScriptエディタの起動時に行っているようで、ライブラリ側でバージョンをいじくっても、AppleScriptエディタをいちど終了させないとバージョンの更新が認識されないようでした(いったん終了させればOK)。

スクリプト名:recordをJSONに変換 2
–http://ashplanning.blogspot.jp/2014/03/applescript-json.html
–「AppleScript で JSON を利用する」より

use jsonLib : script “JSON Lib” version “1.0″

set theList to {“a&b”, “b”, {10, 20}, {age:20}}
set json to jsonLib’s deserialize(theList)

–>

(*
“[
\”a\”,
\”b\”,
[
10,
20
],
{
\”age\” : 20
}
]”
*)

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2013/11/20 AppleScript Librariesの目指すもの

OS X 10.9, Mavericksには「AppleScript Libraries」というライブラリ管理機能が、AppleScript登場20年目にしてようやく装備されました。

一般的には、これは「ライブラリ管理機能」として知らされていますが、「本当にそうなの?」というのがこの話の内容です。

ライブラリアンとしては機能が貧弱

一般的なライブラリアンの機能を表にまとめてみました。AppleScript Librariesがこれらのどの機能もサポートしていないことが分ります。

lib1.png

数年前からAppleScript向けのライブラリ管理の議論をはじめていたのですが、途中ですべてのルールを変えた出来事が起こりました。Mac OS Xのセキュリティ機能の強化の流れです。

動的な書き換えやダウンロードが行いにくい世界へ

これから先、AppleScriptでも、コードサイン、サンドボックス化、そしてMac App Storeへの登録前のバリデーション(妥当性)チェックが当たり前になっていくことでしょう。

AppleScriptで作ったソフトウェアを「外販」する場合には、少なくともMac App Storeで売る場合には当然これらの条件を満たす必要が出てきますし、他のコンピュータ上で動かす場合にこれらの条件を満たす必要が、遠くない将来に発生することでしょう。おだやかな移行かもしれないですが、いきなり昔のように「なんでもアリ」な世界には決して戻らないことでしょう。

ということは、これらのルールが強化された状態でも使えるライブラリアンでなければならない、と考えました。プログラムを作るのに便利な機能が提供されているけれども、それを利用して作ったものはよそに配れないし、オンラインで販売することもできない……という状態は避けたいと考えました。

そうなると、必然的に「自動アップデート」とか「自動ダウンロード」の機能は組み込みにくくなります。アプリケーションまるごとアップデートする、というような仕組みにする必要があるでしょう。

当時は、「ライブラリ作成環境でScriptのかたまりを静的に作り、それを配布する」ような運用を検討していました。ただ、無償でそれをやり続ける人はいないでしょう。

言語拡張をユーザー自身で行えるようにする仕組み、OSAXの代替

AppleScript Librariesは、2つの機能を目指したものだと思います。ライブラリアン的なものと、ユーザー自身による言語拡張の手段です。

前者については、ライブラリアンとはなかなか言いにくいレベルなので……Scriptの分割記述/再利用を助けるための仕組み、であると思います。ライブラリアンだと思うから腹が立つ(場合がある)のであって、決してこれは「ライブラリアン」ではありません。

主に、後者の「OSAXの代替」の話を書きます。

以下に、現在の多層的なAppleScriptの世界を図にしてみました。細かいことをいえば、Spotlightによるファイル検索機能などもパッチワーク的なAppleScriptの世界を構成する要素ではあるのですが、とりあえず置いておきましょう。おおまかに見るとこんな感じです。

非常に雑多な要素が、時代の変遷とともに積み重ねられ、統一されないまま混在している状態です。現在のAppleScriptの世界では、(最低でも)これらの要素技術をマスターしている必要があります。

lib2.png

この中で、OSの進化とともに足かせになってきた部分があります。数値で10E10以上が指数表示になるとかいう、基礎的な仕様の部分もそうではあるのですが、OSAXと呼ばれるプラグイン機構であるとか、Classic Mac OS 8.5の時代から引き継いでいる「なんちゃらScripting」「なんとかEvent」というAppleScript専用の支援ツール類です。

これらは、Carbonベースで作られており、段階的に廃止へと向かっています。

lob4.png

DataBase Events(whoseなどのAppleScriptのフィルタ参照機能でレコードにアクセスする超ド変態データベース)などは、利用者もそれほどいなさそうなので、いつ廃止されてもおかしくなさそうですが……全体的に、徐々に廃止されてきた流れは見てとれると思います。

例外はSystem Eventsで……ここには、他のアプリケーションから機能がどんどん移管されています。

ilb5.png

AppleScriptの命令を拡張するOSAXなどの機能を提供する(誰が?)仕組みとしても、このAppleScript Librariesは利用されていくのだと考えます。

lib3.png

このレベルで考えれば、AppleScript Librariesに腹は立たないでしょう。むしろ、将来的に「●●がなくなったけど、どうしよう?」という問題を(ユーザー/開発者側で自主的に)解決するための手段になるかもしれません。

2013/10/23 「ほぼApple」がMavericksのAppleScriptサイトを更新

「THIS WEBSITE IS NOT HOSTED BY APPLE INC」と銘打たれているmacosautomation.comサイト上に、OS X Mavericksの新機能に関する紹介ページがオープンしています(英文)。

同サイトは、AppleのSal Soghoianなのか、あるいはオーストラリアのShane Stanleyが更新されていると見られているサイトで、「Appleではない」といいつつも「ほぼApple」のインサイダーが更新しているものです。

iCloudのサポート

AppleScriptエディタがiCloudをサポート。AppleScriptをiCloudに保存できるようになった。

Code Signing

AppleScriptエディタとAutomatorによってアプリケーション/アプレットをexportする際に、Code signできるようになった(要・Mac Developpersアカウント)。

AppleScript Libraries

既報のとおり。表記がWWDCの時にはAppleScriptObjective-Cだったのが、AppleScript/Objective-Cになっている。どちらが公式表記なのか不明(たぶん後者)。

AppleScript Librariesを指定するuse文

特定のアプリへのtellブロックを宣言できるのと、AppleScript Librariesを指定するuse文の新設。

システムレベルのNotificationサポート

display notificationコマンドが新設され、OSの通知センターにAppleScriptから通知を表示できるようになった。

Speakable-Workflows

従来からあったSpeakable Items Script(音声認識で呼び出せるAppleScript)が拡張され、AutomatorのWorkflowも呼び出せるようになった。ただし、在来型の音声認識エンジンを使っているだけなので、英語オンリーであるうえに認識度も従来どおり。

GUI Scripting

GUI Scriptingが継続採用されているよ、という点を強調。