AppleScript Studio
クラス継承関係
Xcode
順番
- 新規プロジェクト作成。
- AppleScript Application
- AppleScript Document-based Application
- AppleScript Droplet
- Info.plistの中身をいぢくる。
ヘルプを作る
リンク
- AppleScript Studio入門教室(掌田津耶乃)
- AppleScript Studio(アプリケーション設定からローカライズまで)
- AppleScript for OS X(初期設定/Perl連携/文字コード)
- AppleScript PARK(AppleScriptと周辺情報)
- AppleScript PARK / Tips / Basic
- AppleScript PARK / Dictionary(用語説明/サンプル)
- MacWiki - AppleScript
AppleScript
サンプル
- /ライブラリ/Scripts/
- Samples of Script Application(たくさん)
- Applescriptのごく基本的なサンプル(OS X用)
- AppleScript for Other Application(市川せうぞー)
- Script factory(Tetsuro KURITA)
--cmd+space tell application "System Events" keystroke "" using command down end tell
--アプリケーションの起動チェック tell application "System Events" if application process "iPhoto" exists then display dialog "yes" else display dialog "no" end if end tell
--appパッケージ内のResourceフォルダのパス set rscDir to resource path of main bundle as stirng
iPhoto
アルバムか写真か
set _theseItems to the selection if class of item 1 of _theseItems is album then --album else if class of item 1 of _theseItems is photo then --photo else --??? end if
写真プロパティ
{ dimensions:{480.0, 640.0}, image filename:"06-07-24_17-02.jpg", image path:"/Users/XXXXX/Pictures/iPhoto Library/2006/07/24/06-07-24_17-02.jpg", date:"2006-07-24 17:02:00 +0900", title:"06-07-24_17-02", class:photo, height:640.0, thumbnail path:"/Users/XXXXX/Pictures/iPhoto Library/2006/07/24/Thumbs/10753.jpg", name:"06-07-24_17-02", thumbnail filename:"10753.jpg", comment:"", width:480.0, id:4.294978049E+9 }
もろもろ
tell appliction "iPhoto" --最後のロール select last import album --現在のアルバムの1枚目の写真 select photo 1 of current album end
リンク
- Scriptable Applications\:iPhoto
- iPhoto Export Script
- Exif Jpeg header and thumbnail manipulator program(コマンドラインからExif操作)
その他
do shell script
do shell script plain text -- the command or shell script to execute. Examples are "ls" or "/bin/ps -auxwww"
[administrator privileges boolean] -- execute the command as the administrator
[password plain text] -- use this administrator password to avoid a password dialog
[Result: plain text] -- the command output
キーチェーン
PackageMaker
Xcode+AppleScript+Perl、作ってみる(2009-10-08)
環境: Mac OS X 10.4.11 / Xcode 2.2.1 / Interface Builder 2.5.3
アプリ名称を仮に「AppName」とする。
- 新規プロジェクトで「AppleScript Application」でスタート。
- Perlソースファイル(001.pl)は、UTF-8/LF。
- AppleScriptソースファイル(AppName.applescript)は、エンコーディング: Unicode (UTF-8)、行末コードは「指定なし」。
- (普通は 「日本語 (Mac OS)」にしないとダメって書いてあるのだけど)
- Perlソースは、Xcodeのウィンドウの左欄「グループとファイル」の「Resources」へドラッグ&ドロップした。
- 「デスティネーショングループのフォルダに項目をコピーする」にチェック(チェックしないとプロジェクト内にコピーされない)。
- 「追記したフォルダに再起的にグループを作成する」にチェック(よく分からない)。
- Perl Module(モジュール/ライブラリ)は、「lib」フォルダにまとめて(別にlibという名称じゃなくてもいいけど)、同様にXcodeのウィンドウの左欄「グループとファイル」の「Resources」へドラッグ&ドロップ。
- 「デスティネーショングループのフォルダに項目をコピーする」にチェック(チェックしないとプロジェクト内にコピーされない)。
- この場合は「追加したフォルダにフォルダ参照を作成する」にチェック(じゃないと階層が崩れる?)。
※AppleScriptソースファイルの文字コードをどうするかは、よく分からない(10.3、10.4、10.5でそれぞれ違う?)。
そもそも、AppleScript Studio環境では、ソースファイルの中に日本語は一切使わない方がいいらしい。
display dialog等、使いたいところがあれば、ローカライズファイルで対応(面倒…)。
AppleScriptソース内で、ダブルクオートのエスケープ(通常はバックスラッシュ)がなぜかうまくいかないので、以下で対応。
set dq to ASCII character 34
Perlソースの場所は、自分自身の場所から「Contents/Resources/」へ辿る。
set myPackagePath to POSIX path of (path to me) --このアプリの場所 set myResourcesPath to myPackagePath & "Contents/Resources/" --リソースの場所 set perl001Path to myResourcesPath & "001.pl"
- Perl(UTF-8)から標準出力へ吐いたものをAppleScriptで受け取り、そのままdisplay dialogして、OK(化けない)。
- 「lib」を参照する関係で、いちどcdしてからperlを実行。
- 標準入力にUTF-8フラグをたてるため、perl実行時に「-CA」オプション付加。
set arg1 to "1" set arg2 to "2" set dq to ASCII character 34 set results to do shell script "cd " & myResourcesPath & ";" & "perl -CA " & dq & perl001Path & dq & " " & dq & arg1 & dq & " " & dq & arg2 & dq
Perlソースの先頭は、以下な感じ。
#!/usr/bin/perl -w use strict; use warnings; use utf8; use Encode; use lib './lib'; use Text::Iconv;
このPerlからテキストファイルの読み書きをするなら、通常のPerlの文字コード指定に従って指定すればよい。
#入出力がutf8の場合 use open IO => ":utf8"; #INだけ指定 use open IN => ":utf8"; #OUTだけ指定 use open OUT => ":utf8"; #Shift_JISの場合 use open IO => ":encoding(shift_jis)"; #WindowsなShift_JISなら use open IO => ":encoding(cp932)";
あるいは、ファイルを開く際に、
open TEMP, ">:utf8", $out_path or die $!; open TEMP, ">:encoding(cp932)", $out_path or die $!;
といった感じで毎回指定するとか。
AppleScriptからファイルやフォルダのパスをもらった場合
AppleScriptからdo shell scriptでperlの引数(@ARGV)として、パスを受け取る際の処理。
- AppleScript内で、TextFieldから取得したパス文字列は、そのまま@ARGVへ渡す。
- as unicode textしなくてもよい。
- スペースが入ってたりするので、前後にダブルクオートするのを忘れずに。
- Perl実行時に「-CA」オプションをつけているので、Perlの中に入ってきた時点で、UTF-8フラグがたってる。
Perl側で@ARGVで受け取ったパス文字列は、open/opendirしたりする場合は、そのまま使えばでOK
my $in_path = $ARGV[0]; my $in_dir = $ARGV[1]; open IN, "<:utf8", $in_path or die $!; close IN; opendir DIR, $in_dir or die $!; closedir DIR;
ただし、パス文字列から、何かしら日本語を抜き出す場合は、以下の処理が必要。
(例えば、パスからフォルダ名を取得するとか)
use lib './lib'; use Encode; use Text::Iconv; my $in_dir = $ARGV[0]; my $in_dir_nfc = Encode::decode('UTF-8', Text::Iconv->new('UTF-8-MAC', 'UTF-8')->convert($in_dir));
Text::Iconvで、「MAC版NFD」から「普通のNFC」へ変換し、でもそうするとなぜかUTF-8フラグが落ちてしまったので、改めてEncode::decodeでUTF-8フラグをたててる。
丁寧に書くと、以下。
use lib './lib'; use Encode; use Text::Iconv; my $in_dir = $ARGV[0]; my $in_dir_nfc = Text::Iconv->new('UTF-8-MAC', 'UTF-8')->convert($in_dir) my $in_dir_nfc_utf8flagged = Encode::decode('UTF-8', $in_dir_nfc);
以上でとりあえず動いた(最初に書いた環境下で)。
OSやその他の環境のバージョンが変わったら、このあたりのルールも変わっちゃうんだろうか。
以上、2009-10-16に書きました。