Menu

Skip to content
AppleScriptの穴
  • Home
  • Products
  • Docs
  • Events
  • Forum
  • About This Blog
  • License
  • 仕事依頼

AppleScriptの穴

Useful & Practical AppleScript archive. Click '★Click Here to Open This Script' Link to download each AppleScript

カテゴリー: news

AppleScript disassembler

Posted on 1月 23 by Takaaki Naganoya

Twitterで一時期さんざん騒がれていた(一部のアカウントが情報を拡散していた)、AppleScript Disasemblerについて調べてみました。

いわく、

「Macには5年前からウィルスが出回っている。というのも、実行専用のAppleScript appletはAppleのウィルスチェックの対象から外れており、中身を確認できないからである。この脅威に対処するためのツールはXXに問い合わせるとよい。aevt disassemblerなどのツールを用意している」

という内容のものでした。分かりやすい恫喝です。「5年前からウィルスが」云々の是非は知りませんし、それにAppleScriptが使われているのかどうかなども知りません。見たことがないものについては、批評も判断も不可能です。

実行専用のAppleScript AppletだとAppleのチェックを免れる、という点については疑問が残ります。ただ、仮にそうしたものがあったとして、その実行内容をいちいちOS側がチェックしているとも考えにくいので、その可能性は否定できません。

そして、「aevt disassemblerなどのツール」という点が問題です。本当にできるのか? 冗談ツールみたいなもの(特定条件では使えるが実用性がない)はあるのかもしれませんが、そんなに、現代の高度化しているAppleScriptのプログラムの内容を、実行専用バイナリから元ソース取り出しができるものなのか?????? これは、試してみないとなんとも言えません。

えーーー、AppleScriptはAppleEventのバイトコードに翻訳されて実行されます。

この、AppleEventのバイトコードから元のAppleScriptを戻せるかどうかについては、かなり初期から「イベントのコードと実際のAppleScriptの対処表を作れば、元のコードを取り出すことは原理上不可能ではないだろう」という推測が行われてきました。

ただ、その対処表を作るという手間がバカバカしく、苦労の割に得るものが少ないため誰も本気で取り組んでこなかったテーマでもあります。

とりあえず実行専用のAppleScriptでなければ「osadecompile」コマンドがOSに標準装備されているので、これでソースを取得することは可能です。

では、実行専用のAppleScriptやAppletからソースを取得できるのでしょうか?

Github上でそれらしきソフトウェアをみつけました。aevt_decompileとapplescript-disassemblerです。それぞれ実際に試してみました。

確認対象ファイルは、

①普通の(スクリプトエディタで)読める通常形式のAppleScript(.scpt)
②「実行専用」の通常形式のAppleScript(.scpt)
③「実行専用」のAppleScriptアプレット
④「実行専用」のAppleScriptアプレット(コード署名つき)

の4つです。主に、decompilerについて(確認もしないで)騒いでいる連中が槍玉に挙げているのは、③④のはずなので、①②はあくまで比較用です。

aevt_decompile

まず、aevt_decompileを実際にXcode上でビルドし、/usr/local/binにコピーしたうえでTerminal上から実行してみました。

Mac:bin me$ ./aevt_decompile /Users/me/Desktop/copy\ files\ to\ target\ folder.app 
2021-01-23 20:39:21.622 aevt_decompile[10457:2398389] The file “copy files to target folder” couldn’t be opened because you don’t have permission to view it.
Mac:bin me$ ./aevt_decompile /Users/me/Desktop/copy\ files\ to\ target\ folder.app/Contents/Resources/Scripts/main.scpt 
2021-01-23 20:39:55.375 aevt_decompile[10469:2400520] The file “main.scpt” couldn’t be opened using text encoding Unicode (UTF-8).
Mac:bin me$ ./aevt_decompile /Users/me/Desktop/copy\ files\ to\ target\ folder_no_sign.app/Contents/Resources/Scripts/main.scpt 
2021-01-23 20:41:02.693 aevt_decompile[10482:2405472] The file “main.scpt” couldn’t be opened using text encoding Unicode (UTF-8).
Mac:bin me$ ./aevt_decompile /Users/me/Desktop/copy\ files\ to\ target\ folder.scpt 
2021-01-23 20:41:47.007 aevt_decompile[10488:2407982] The file “copy files to target folder.scpt” couldn’t be opened using text encoding Unicode (UTF-8).

結果は、ことごとく「couldn’t be opened」でデスクトップフォルダ上に置いた①〜④のScriptをオープンできませんでした。

applescript-disassembler

Pythonで書かれたこのツールは実行権限を与えるだけで簡単に動きました。また、①〜④のファイルに対してアクセスすることができました。

こちらは結果が出てきました。かなり膨大な内容です。オリジナルのAppleScriptが、

set fileTexts to paragraphs of (the clipboard)

set chkFol to choose folder with prompt "[From] Select Check folder"
set moveTargFol to choose folder with prompt "[To] Select Copy Trget folder"

repeat with i in fileTexts
	set j to contents of i
	set fromPath to (chkFol as string) & j
	try
		tell application "Finder"
			duplicate file fromPath to moveTargFol
		end tell
	end try
end repeat

の程度のひじょうに簡単なものであったのですが、実際に出力されたのは、

# 注:HTMLタグと間違えられてしまう<>については全角記号に置き換えました

--Applet without Code Sign③

Mac:applescript-disassembler-master me$ ./disassembler.py /Users/me/Desktop/copy\ files\ to\ target\ folder_no_sign.app/Contents/Resources/Scripts/main.scpt 
=== data offset 2 ===
Function name : <Value type=object value=<Value type=event_identifier value=b'aevt'-b'oapp'-b'null'-b'\x00\x00\x80\x00'-b'****'-b'\x00\x00\x90\x00'>>
Function arguments:  <empty or unknown>
 00000 PushIt 
 00001 Push0 
 00002 MessageSend 0 # <Value type=object value=<Value type=event_identifier value=b'Jons'-b'gClp'-b'****'-b'\x00\x00\x00\x00'-b'null'-b'\xff\xff\x80\x00'>> 
 00005 PushLiteral 1 # <Value type=object value=<Value type=constant value=0x63706172>> 
 00006 MakeObjectAlias 22 # GetEvery

 00007 GetData 
 00008 PopGlobal b'fileTexts' 
 00009 StoreResult 
 0000a PushIt 
 0000b PushLiteral 3 # <Value type=object value=<Value type=constant value=0x70726d70>> 
 0000c PushLiteral 4 # [<Value type=special value=nil>, <Value type=string value=b'\x00[\x00F\x00r\x00o\x00m\x00]\x00 \x00S\x00e\x00l\x00e\x00c\x00t\x00 \x00C\x00h\x00e\x00c\x00k\x00 \x00f\x00o\x00l\x00d\x00e\x00r'>] 
 0000d Push2 
 0000e MessageSend 5 # <Value type=object value=<Value type=event_identifier value=b'syso'-b'stfl'-b'alis'-b'\x00\x00\x00\x00'-b'null'-b'\xff\xff\x80\x00'>> 
 00011 GetData 
 00012 PopGlobal b'chkFol' 
 00013 StoreResult 
 00014 PushIt 
 00015 PushLiteral 3 # <Value type=object value=<Value type=constant value=0x70726d70>> 
 00016 PushLiteral 7 # [<Value type=special value=nil>, <Value type=string value=b'\x00[\x00T\x00o\x00]\x00 \x00S\x00e\x00l\x00e\x00c\x00t\x00 \x00C\x00o\x00p\x00y\x00 \x00T\x00r\x00g\x00e\x00t\x00 \x00f\x00o\x00l\x00d\x00e\x00r'>] 
 00017 Push2 
 00018 MessageSend 5 # <Value type=object value=<Value type=event_identifier value=b'syso'-b'stfl'-b'alis'-b'\x00\x00\x00\x00'-b'null'-b'\xff\xff\x80\x00'>> 
 0001b GetData 
 0001c PopGlobal b'moveTargFol' 
 0001d StoreResult 
 0001e LinkRepeat 0x64

 00021 PushGlobal b'fileTexts' 
 00022 Dup 
 00023 PushLiteral 9 # <Value type=object value=<Value type=constant value=0x6b6f636c>> 
 00024 PushLiteral 10 # <Value type=object value=<Value type=constant value=0x636f626a>> 
 00025 Push2 
 00026 MessageSend 11 # <Value type=object value=<Value type=event_identifier value=b'core'-b'cnte'-b'****'-b'\x00\x00\x00\x00'-b'****'-b'\x00\x00\x10\x00'>> 
 00029 Push1 
 0002a PushUndefined 
 0002b RepeatInCollection <disassembler not implemented> 
 0002c Equal 
 0002d Equal 
 0002e PushVariable [var_0] 
 0002f PushLiteral 12 # <Value type=object value=<Value type=constant value=0x70636e74>> 
 00030 MakeObjectAlias 21 # GetProperty

 00031 GetData 
 00032 PopGlobal b'j' 
 00033 StoreResult 
 00034 PushGlobal b'chkFol' 
 00035 PushLiteral 14 # <Value type=object value=<Value type=constant value=0x54455854>> 
 00036 Coerce 
 00037 PushGlobal b'j' 
 00038 Concatenate 
 00039 GetData 
 0003a PopGlobal b'fromPath' 
 0003b StoreResult 
 0003c ErrorHandler 87 
     0003f PushLiteralExtended 16 # <Descriptor type=b'alis' content=b'\x00\x00\x00\x00\x014\x00\x02\x00\x01\x06Cherry\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00BD\x00\x01\xff\xff\xff\xff\nFinder.app\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\n cu\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cCoreServices\x00\x02\x00)/:System:Library:CoreServices:Finder.app/\x00\x00\x0e\x00\x16\x00\n\x00F\x00i\x00n\x00d\x00e\x00r\x00.\x00a\x00p\x00p\x00\x0f\x00\x0e\x00\x06\x00C\x00h\x00e\x00r\x00r\x00y\x00\x12\x00&System/Library/CoreServices/Finder.app\x00\x13\x00\x01/\x00\xff\xff\x00\x00'> 
     00042 Tell 16 
         00045 PushIt 
         00046 PushLiteralExtended 17 # <Value type=object value=<Value type=constant value=0x66696c65>> 
         00049 PushGlobal b'fromPath' 
         0004a MakeObjectAlias 24 # GetIndexed (item A of B)

         0004b PushLiteralExtended 18 # <Value type=object value=<Value type=constant value=0x696e7368>> 
         0004e PushGlobal b'moveTargFol' 
         0004f Push2 
         00050 MessageSend 19 # <Value type=object value=<Value type=event_identifier value=b'core'-b'clon'-b'****'-b'\x00\x00\x00\x00'-b'****'-b'\x00\x00\x90\x00'>> 
         00053 EndTell 
     00054 EndErrorHandler 93 
 00057 HandleError 20 21 
 0005c PushUndefined 
 0005d Dup 
 0005e StoreResult 
 0005f Jump 0x2b 
 00062 Return 

のような、膨大な内容です。まるで、アセンブラのニーモニックを読んでいるかのような感覚です。

10行程度のScriptから14倍の内容が出力されています。一応、一部の処理内容については(エラートラップ部分など)推測することは可能ですが、前半部分はさっぱりです。断片的に変数名などがわかったり、後半のインデント構造的なものが見えたりするあたりはソースのように見えなくもありませんが、この出力から元のAppleScriptの内容を理解できたりするのでしょうか?

もしかすると、Classic Mac OSの開発経験があるとこの内容を「読む」ことが可能なのかもしれませんが、この内容では自分にはさっぱり分かりません。

現状では、AppleEventを人間が読んでも理解できそうな命令語に置き換え、パラメータともども一覧表示しているというものに見えます。そのレベルの機能については間違いなく実現しているでしょう。ただ、そのAppleEventニーモニックの展開ができたからといって、元のAppleScriptのプログラムを復元できるようには見えません。

# じっと眺めていると「スタック操作を頻繁に行っている」ように見えますが、それでもそれ以上の情報は読み取れません

applescript-disassemblerの機能は同梱のドキュメントのとおりで、実行専用のアプレットから元のAppleScriptのプログラムソースが得られるといったものではありませんでした。その動作内容についても確認できましたし、処理レベルも確認できました。

自分が行った検証のかぎりでは(検証前からおぼろげにわかっていましたが)、一部の人間が他の多くのユーザーの警戒心を煽っているような状況では「ない」と思います。おそらく、その解決ツールという名目でそれらしい動作を行うツールを(AppleScriptを読めない顧客に)売りつけ、お金を巻き上げようという魂胆なのでしょう。

Posted in news Security | Tagged 10.14savvy 10.15savvy 11.0savvy | Leave a comment

Script Debugger v8 日本語対応中

Posted on 1月 14 by Takaaki Naganoya

Script Debuggerのv8のPublic Betaが出たので、早速試していますが……まだ日本語環境で作ったAppleScript書類の表示に問題を抱えています。

今回のv8ではApple Silliconへの対応のほか、待望のDark Mode対応なども行われ……普通にAppleScriptを表示するうえにScript Debugger側で設定したDark Themeで表示するなど表示情報が多層化されているようです。

そのために、Roman Language以外のCJK環境のフォント表示で問題を抱えているもよう。とはいっても、LateNight SoftwareはこのジャンルではMac界最強の開発チームであるため、対応は行われることでしょう。

それが今日明日のうちに実現されるかと言われれば、まだ時間が必要といった印象を受けています。

なお、さまざまな仕様の多くはSD7に準じているもようです。

「as anything」は「as any」と解釈されます。これは、macOS 10.13までは「as list or list of string」という謎の解釈を行なっていた(any型は内部的に存在していたが予約語がなかったもよう)ものが、macOS 10.14でスクリプトエディタ側は「as anything」と解釈し、Script Debugger側では「as any」と解釈するようになりました。

自分が「as anything」を発見した顛末は、

as anything

にまとめたとおりです。欠点もありますが、自分はこの「any型cast」は言語仕様上必要だと思います。スクリプトエディタとScript Debuggerでこの解釈が統一されていないのは問題であると考えます。

あるいは、スクリプトエディタやScript Debugger以外の「何か」があったほうがよいのかもしれません。Apple側は機能については追加する考えはないようですし(削るばっかり)、Script Debuggerも生産性の向上にはさほど寄与しません(ないと困る道具ではあるものの、あったからといってものすごく効率が上がるわけでもありません。クラッシュ回数多すぎです)。

生産性を維持するために自分がやっていることは、いままでに組んだScriptを部品化して再利用すること、部品を探しやすくすること、スニペット(断片的なプログラム記述入力)を充実させることです。Script Debuggerのスニペットで高度なことができるわけではない(Script Debugger側が想定している範囲を超えられない)ので、本当に必要な時以外はインテリジェントなスニペット(Piyomaru Script Assistant)で魔改造しまくってあるスクリプトエディタを使っています。

Script Debuggerが提供しているデバッグ機能は、ブレークポイントの設定やステップ実行、トレースなどのまっとうで高度な機能ですが、正直なところそれって「入門者レベルに有用」なものばかり(初心者にScript Debuggerは有用)。普通に書いているScripterがそれを必要としているかといえば、ちょっとニーズがズレてしまっていると感じます。数千行クラスの大規模なScriptのデバッグでステップ実行みたいな悠長なことはしませんよね? モジュール単位で再テストしやすくするための仕組みのほうが大事ですよね?

正直なところ、自分はスクリプトエディタにもScript Debuggerにも満足できていないので、第3の選択肢はあるべきだと考えます。

Posted in news | Tagged 10.14savvy 10.15savvy 11.0savvy Script Debugger | Leave a comment

2020年に書いた価値あるAppleScript

Posted on 12月 21, 2020 by Takaaki Naganoya

毎年書いている記事であり、いろいろ準備していました。コロナ禍の影響もあり、踏んだり蹴ったりの1年といってよいでしょう。

→ 2019年に書いた価値あるAppleScript
→ ぴよまるソフトウェアが選ぶ、2018年に書いた「価値あるScript」

本Blogにおいては、1つの大きな方針転換を行なっています。自分は高性能な部品を適度に提供しておけば、AppleScriptの有用性は主張できると思っていたのですが、部品だと価値がわからない人がとても多いという結論に至りました。

つまり、おいしい野菜やお肉を提供していても、みんなが調理できないので「料理」として提供しないと理解されないということなんですね。なので、「料理」としてのMac App Storeアプリケーションを作って売ることに重点を移しました。フルコース料理を出してみたら意外とウケなかったので、その引き立て用の小皿料理を増やしているという状況です。

今年1年を通じて一番「会心の一撃」だったのは「Kamenoko」。最も多くの人にリーチしたのは「Uni Detector」でしょう。どちらもAppleScriptで開発して、Mac App Storeから提供しています。

そうしたアプリケーションを作る中で育てられた機能も多く、1年を通じて画期的なScriptが登場してきたと感じます。今年1年だけで相当の進歩が達成されています。

ではさっそく、振り返ってみましょう。

■2020/1

2020年1月は、「各月で2本」という選定基準を遵守できないほど画期的なScriptが多数出てきました。この月に登場したScriptは重要なものばかりです。

とくに、AppleScriptのランタイム環境の名称がAppleScript側から取得できるようになったことの意義は大きく、ランタイム環境ごとに挙動を変化させるといった処理が可能になりました。この情報はかなり前(それこそMac OS X 10.1ぐらいの時期)から調べていたものですが、別の用途のために作ったものが使えてしまい、実は5年前にはその方法を明らかにするScriptを書けていた(のに気づかなかった)ことに驚きを禁じえません。

eppcで他のMac上のアプリケーション操作

GUI Scriptingでコンテクストメニューのキャプチャを取得

1888年1月1日以前の日付が-1日になる問題の原因

AppleScriptを実行中のランタイムプログラム名を取得する

display drop dialog Script Library

RoundWindow v2

■2020/2

Kamenokoの部品として作った「common elements Lib」が登場しています。まだKamenokoにフィードバックできていませんが、個人的にこんな演算ができたことに驚いています。

Wikipedia経由で2つの単語の共通要素を計算するcommon elements Lib Script Library

画像の指定エリアを透明色塗りつぶし(矩形切り抜き)

■2020/3

このあたりもKamenokoの部品です。

正方形セルの表データで指定セルに隣接するセルブロックを検出

NSURLSessionでREST API呼び出しv4.4

■2020/4

AppleScriptで作ったSandboxアプリケーションでファイル保存の処理を行うときに必須の「ファイル保存ダイアログ」Script。アプリケーション内でREST APIを呼び出すための部品もキャッシュが有効になるなど高度な進化を遂げました。今年、JavaScriptのライブラリを呼び出して異次元の処理ができるようになったScript群の先鞭をつけたScriptも4月に登場しています。

ファイル保存ダイアログ(SavePanel)表示

NSURLSessionでREST API呼び出しv4.4.2a

アラートダイアログ上にWkWebViewでGoogle Chartsを表示 v2

■2020/5

このあたりも、Kamenokoのために作った部品ですね。

ダブルクリックとコンテクストメニュー表示をサポートするボタン

Kamenoko、Mac App Storeで販売開始

■2020/6

今年の一番のScriptが登場。WebView上でインタラクティブな表示を行い、選択表示ができる部品に昇華しています。この時点ではただ表示するだけでしたが、指定した内容を表示して、選択したアイテムを取得できるように使いこなせています。

アラートダイアログ上にWebViewで3Dコンテンツを表示(WebGL+three.js)

アラートダイアログ上にd3-cloudを用いてワードクラウドを表示

■2020/7

このあたりも地味ですが、非常に良作です。macOSの新たに作られたUTI系のFrameworkで、実際に使いこなした記事が存在するのが本Blogのみという状況が長く続いていました。

macOS 11.0上のUTIのじっけん

画像の空白判定プログラムの検証

■2020/8

このScriptは、そもそもOS側にそうした機能が存在していないにもかかわらず、実際に機能を提供できてしまうというものです。

PDFにパスワードが設定されている場合には、そのパーミッション情報を取得する

■2020/9

本Scriptはいろいろ重要なものです。PhotoshopデータであるPSD形式の書類を作成できることはとても重要です。Mac App Storeにアプリケーションに、他のアプリケーション(Photoshop)の存在を前提としたものは提出できません。AppleScriptで作ったアプリケーションであったとしても、Photoshop形式のデータを自力でオープンできたり、自力で保存できる必要があります。

SFPSDWriterのじっけん v2

■2020/10

なぜかAppleScriptでゲームを作りました。

AppleScriptでリアルタイムキースキャンを行いCotEditor書類上にカーソル描画

Pixelmator Pro AppleScriptコンテストで優勝

■2020/11

これも、各種アプリケーションで利用するために作成したものです。

ステータスバーアイテムの点滅

■2020/12

実際にいま作っているコンテスト用の作品に向けて書いたものです。

HTMLカラー値から明度を取得

Posted in news | Leave a comment

同じバージョン番号のまま大幅に機能が変更されたSystem Events

Posted on 12月 15, 2020 by Takaaki Naganoya

macOS 10.15はBetaの頃から出来が悪くて、とても「これは常用できない」としてメインマシンにはインストールせず、専用のマシンに入れて様子を見ていました。10.15については「こんなもんリリースすんな」という印象。10.13については、担当者の首が飛ばない理由が分からない出来でした。

そんなmacOS 10.15で、ご無体な変更がSystem Eventsに見られました。

10.13、10.14、10.15、11.0とSystem Eventsのバージョン番号は同じ「1.3.6」ですが、AppleScript用語辞書の内容が大幅に変更されています。

これまでにもAppleのエンジニアの失敗やバグにいろいろ酷い目に遭わされてきましたが、「内容に大幅に変更があってもバージョン番号を変えない」という新たな失敗が記録されることになりました。これは、斬新な手口ですね! 

今後も、バージョン番号を変更せずに機能の変更を行なってくることが予想されます。できれば、ちゃんとバージョン番号を変更することも覚えてほしいですよね。

■macOS 10.13→10.14

(1)Disk-Folder-File Suiteから、指定のOSA言語のScriptを実行する「do script」コマンドが削除されました。同機能は標準命令の中にも重複して存在しており、とくに影響はありません。

■macOS 10.14→10.15

(1)desktop picture settingsに「dynamic style」という属性値が新設されました。指定できる値は「auto」「dynamic」「light」「dark」「unknown」。

(2)Audio File Suiteが削除された
どこまで行っても実装が微妙だったAudio File Suiteが削除されました。32bitコードだったのでしょうか。

(3)Movie File Suiteが削除された
同じく、微妙な出来だったMovie File Suitesが削除されました。理由はAudio File Suiteと同じなのでしょう。

(3)QuickTime File Suiteが削除された
同上。

(4)key up/key downコマンドが強化された
文字コードでしか指定できなかったkey up/key downコマンドが強化され、integerでキーコードを指定する従来どおりの指定方法のほか、textでキーボードの文字を指定できるようになりました。

■macOS 10.15→11.1

(1)dock preferences objectに属性値が新設された
autohide menu bar:システムメニューバーの自動非表示機能のオン/オフ
double click behavior:ウィンドウのタイトルバーをダブルクリックしたときの挙動の切り替え
minimize into application:ウィンドウのタイトルバーをダブルクリックしたときにDock上のアプリケーションアイコンに向けて最小化?
show indicators:Dock上のアプリケーションアイコンに起動中のインジケータ表示を行う/行わない設定
show recents:最近使ったアプリケーションのグループを表示する設定

こうした調査は、AppleScript用語辞書ファイル(sdef)そのものや、それをHTMLに書き出したデータを比較することで検討しているわけですが、一回それを電子書籍のオマケにすることを検討したものの、他のScripterに「そういうものに興味はないか?」と聞いてみたところ、まったく関心を持っていないようでした。

ある意味、最重要書類というか「秘伝のタレ」に近い情報ではあったものの、コピペだけでコードを書いているレベルのScripterは、そういう「一次情報」(死活問題になる)に関心がないんだなーということが分かっただけでした。

■表 System Eventsの用語辞書の変遷(「最新事情がわかるAppleScript 10大最新技術」より引用してアップデート)

macOS Version 10.x 2 3 4 5 6 7 8 9 10 11 12 13 14 15 11.0
Standard Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
System Events Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Accounts Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Appearance Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
CD and DVD Preferences Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Desktop Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Dock Preferences Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Login Items Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Network Preferences Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Screen Saver Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Audio File Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Security Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Disk-Folder-File Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Folder Actions Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Movie File Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Power Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Processes Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Property List Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
QuickTime File Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
XML Suite ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Type Definitions ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
Scripting Definition Suite ■ ■ ■ ■ ■ ■ ■
Text Suite ■ ■ ■ ■ ■ ■ ■
Expose Preferences Suite ■ ■ ■ ■
Posted in news | Tagged 10.14savvy 10.15savvy 11.0savvy System Events | Leave a comment

歴史的大ニュース:Amazon AWSがMacインスタンスのサポートを開始

Posted on 12月 1, 2020 by Takaaki Naganoya

久しぶりに震えました。Amazon AWS(EC2)がMacのインスタンスをサポートしました(Amazon EC2 Mac instances)。

New – Use Amazon EC2 Mac Instances to Build & Test macOS, iOS, ipadOS, tvOS, and watchOS Apps

Amazon EC2 Mac InstancesDevelop, build, test, and sign Apple apps on Amazon EC2

このMacインスタンスは、通常のAWSとは異なりMac1台をまるまる占有するタイプのようです。ハードウェアはMac mini(Core i7 3.2GHz)でメモリ32GB。10Gbit Ethernet搭載モデルとのこと。

Amazon EC2 Mac InstancesがサポートするOSはmacOS 10.14と10.15、2021年にはM1 Mac miniの投入を検討しているのだとか。こちらはmacOS 11.x以降での運用になることでしょう。

利用者はTerminal上でSSHで接続するか、VNC Remote Desktop経由で接続することになるとのこと。XcodeでiOSなどのアプリケーションをビルドするための需要を見込んでいるようです。

「仮想マシンの1インスタンス時間貸し」というAWSのサービスイメージと大きく異なり、1台まるごと貸し出しサービスです。仮想化技術を用いて大量のインスタンスを同時実行する方向では、ライセンスの問題を解決できないことは明らかでしたが、逆に「こういう方法があったのか」というコロンブスの卵的な解決策ではあります。クラウドというよりは、時間貸しのコロケーションサービスともいえます。

最近のmacOSでは滅多にありませんが(のぞく、macOS 10.13と10.15)、OSごとまるごとクラッシュして再起動が必要になるとか、リセットが必要になるケースもないことはないでしょう。また、セキュリティ設定をユーザーが好き勝手にいじくれるかどうかも見所です(SIP解除して運用できるのかどうか、これは切実な問題です)。

Amazon EC2 Mac Instancesのサービス提供リージョンは、US East (N. Virginia), US East (Ohio), US West (Oregon), Europe (Ireland), and Asia Pacific (Singapore) とのことで、Tokyoは現段階ではありません。今後増えていくような書き方はされていますが、正直わかりません。

EC2というと、あらかじめディスクイメージを用意しておいて、インスタンスの起動をディスクイメージで実行、サービス運用と終了の必要な期間がきわめて短くて済むことを売りにしている印象があるものの、このAmazon EC2 Mac Instancesで運用するとどーなるのか。

利用料金をまだ確認できていないので、コロケーションサービス(初期費用が必要)に比べてどうなのかとか、実機まるごと買ったほうが安いんじゃないかとか、疑問はいろいろあるわけですが、REST APIのインタフェースだけ作ってしまえばクラウド上でAppleScriptによってサービスを作って提供できるわけで、ずいぶん悩ましい存在です。

AppleScript on the cloud的なサービスもできるし、仲間内で冗談でしか出てこなかった「Adobe Creative Grid」(時間貸しで大量のマシンによりAdobeアプリケーションのデータを高速かつ並列に処理する)みたいなサービスも作れてしまう(Adobe Createve Cloud税が高いのでむやみに実験はできないんですけれども)わけで、ずいぶん楽しい感じになってきました。

OS X 10.10で通常のAppleScriptからCocoaの機能が利用できるようになり、Cloud系のサービスを利用できるようになりました。機械学習系の機能も利用できています。

AppleScriptで大規模データとか超大量のデータ処理を行うさいの物理的な制約がなくなってきたわけで、数万人のユーザーへの一括メール送信とかいう無茶な処理も、外部のCloud(SendGrridなど)の機能を活用してできるようになりました(そこまで大量の送信は実際にはやっていないので、理論上最大値ということで)。

一方で、AppleScriptを使ってWebサービスそのものを作って運用するという方向には、ほとんど手が伸びていなかった状態です。外部でそのような需要が発生するか否かについては不明ですが、自分で作って自分で運営するサービスでは、柔軟に規模の拡大・縮小が行えることは重要です。

そうしたときに、外部とのI/FをRemote AppleEventで行うわけにはいかないでしょうし(AWSのデータセンターでポート3031へのリクエストが通るんだろか?)、一般的なREST APIでリクエストを受け付けてJSONで返すみたいな構造にする必要はあるでしょう。

あとは、並列処理技術。これまで、「Mac App Store向けのアプリケーションでは仕様上実装しづらい」ことから、それほど活躍の場がなかったAppleScriptによる並列処理技術ですが、外部からのリクエストを処理する場合には、とても必要になってくることでしょう。

やはり、実際にさわってみないとなんとも言えないですね。

Amazon EC2 Mac Instancesについて言及している記事一覧

Amazon Web Services ブログ 新登場 – Amazon EC2 Mac インスタンスを使用した macOS、iOS、ipadOS、tvOS、watchOS アプリの構築とテスト
もともとの記事の日本語版。サービス開始に向けた担当者の思いはわかるものの、費用とかmacOS環境でどのあたりがカスタマイズされているのか(ソフトウェア的に)とか、実際に使うとどの程度の差があるのかといった情報はない。Macユーザーに対して「Amazonは敵じゃないんだよー」と訴えている以上の情報はない

Amazon EC2 Mac Instance を早速使ってみました
EC2の使い方がわかる記事。これを読まないと接続までの手順がわかりづらいものの、これを読んだからといってMac Instanceの実情がわかるというほどの情報量はない

macOSがクラウドで利用可能に――、AWSがMac Miniベースの「Amazon EC2 Mac Instances」を一般提供開始

文章書きのプロがいい感じにまとめている。「よくわからない人」向けにまとめた記事

AWSにMacインスタンスが追加。6コアCore i7搭載Mac miniをクラウドで利用可能に

ニュースリリースまとめただけ。書くのに30分もかけていない速報記事(たぶん)

AWSがMac miniのクラウド化を発表、Apple Silicon Mac miniの導入は2021年初頭か

サービス料金面では一番詳細な記事。Amazon EC2 Mac Instancesは秒単位で課金されるが、最低利用ラインが「24時間」になっているため、24時間を過ぎたら秒単位で課金計算されるということが明記されている

Posted in Network news | Tagged 10.14savvy 10.15savvy 11.0savvy | Leave a comment

Uni Detectorのアイコンを変更!

Posted on 11月 16, 2020 by Takaaki Naganoya

Uni Detectorのアイコンを変更します。ウニ(Sea Urchin)のアイコンには個人的に思い入れも深く、この現行のアイコンも随分前に奥方様と一緒に行った寿司屋でデジカメで撮影したものです(8年ぐらい昔?)。

つまり、「どうせPowerPCからIntelに移行したんだし、10年ぐらいたったら再びCPUの移行はあるだろう」と読んで、ものすごく時間をかけてアイコン候補の写真を撮影するような、凝ったことをしていたわけです。

ただ、いろいろダウンロード状況を分析するに、U.S.のユーザーが全然食いつかない(大統領選が終わっても変化なし)。不思議なぐらい食いつかない。無料のアプリケーションという「撒き餌」にまったく食いつかない。食い気が感じられない。

なぜだろう? と、首をひねっていたのですが、われわれには美味しい食材にしか見えない海鮮丼の写真が、海外のユーザーにはグロい写真で嫌がらせをしているようにしか見えないのでは? という仮説に至りました。

その仮説をもとにSNS上で意見を募ってみたところ、

  「Dock上に置きたくないデザイン」
  「ハイコンテクストすぎてApp Store向けアプリには不向き」
  「そういうのは趣味でやれ」

という散々な結果に。

タイミングをねらって、必要な道具をピンポイントでリリース。ユーザーへの知名度の向上と、各種ソフトウェアの宣伝を意図した戦略的なソフトウェアが、アイコンというきわめて重要度の低い構成要素のために本来の役割を果たしていないものと判断。ここに、苦渋の決断をもってアイコンを無難なものに変更することといたしました。


▲新旧アイコン。右側が新しいアイコン(Appleにリジェクトされなければ)

Posted in news PRODUCTS | Tagged 10.13savvy 10.14savvy 10.15savvy 11.0savvy | Leave a comment

macOS 11.0, Big Sur AppleScript関連の変更点

Posted on 11月 13, 2020 by Takaaki Naganoya

ついにmacOS 11.0, Big Surが正式リリースされました。これほどリリースが待ち遠しく、リリースを恐れていたOSバージョンもありません。機能的にはいいのに、見た目がアレな、ある意味「次世代のmacOSのPublic Beta」みたいな位置付けです。バージョン0.xから始まるのも初めてですし。1.0未満だと受け取っておきましょう。

→ その後、マイナーアップデート版が「11.1」であることが判明し、今後は「12.x」「13.x」とiOSライクなナンバリングが施されることがうかがわれます。

ハードウェア面では「M1搭載のファンレスのMacBook AirがCore i9のCPUを蹂躙する図」が展開されているなど絶好調ですが、ソフトウェア面ではいろいろ(見た目に)問題があります。

macOS 11.0.1について、AppleScript的には大きな違いはありません。大きな違いというのは、macOS 10.15からの大きな違いということです。10.15のあまりの不具合の多さに、β段階で「毒の沼」認定してメイン環境で利用することを放棄したため、個人的には11.0にすぐ移行したいところです(検証用のMac mini 2014しか対応ハードウェアがない問題)。

macOS 11.0搭載のAppleScriptはあいかわらずバージョン2.7。スクリプトエディタもビルドが少し変わったぐらいでバージョンは同じです。

スクリプトエディタのヘルプが、macOS 10.13、10.14、10.15と毎回更新されていましたが、今回はその余裕がなかったのか10.15, Catalinaのままです(あとでオンライン更新されるのかも???)。

毎回、OSのアップデートがあるたびに書き換えの必要があるScriptが出てきます。すべてのScriptが必要というわけではないはずですが、理由は大きく分けると以下のとおりです。

(1)Script専用補助アプリケーションやOS標準装備のアプリケーションの機能に変化が生じたり、名前が変わったり、統廃合されたりした
(2)AppleScriptの言語処理系、標準装備のScripting Additionsや標準命令に新たなバグが発生した
(3)OS自体の仕様変更、未知のバグが発生した
(4)GUI ScriptingでメニューなどのGUI部品を指定している箇所が、GUI修正などの理由によりそのままでは動かなくなった
(5)Cocoaの仕様変更により動かなくなったり修正が必要になった

スクリプトエディタのsdefの差分をチェックしてみたところ、macOS 10.14/10.15から変化はありません。つまり、今回は(1)(2)由来の発生の可能性は低いことが期待されます。(4)は当然そうなるものなので(些細な変更で発生するものなので)、必要最低限の箇所に使うべきものです。(5)は、Cocoa自体の仕様変更は割とひんぱんに発生しているので、なんともいえませんが、Cocoa自体に仕様変更やバグがなくてもScripting Bridge定義ファイルのバグや理不尽な変更(主にmacOS 10.13で発生した件。一切説明なし)によって影響を受ける可能性はあります。

カレンダー.appのバンドル内に同梱された大量のAppleScriptもβ時からそのままです。

(何か発見があったら追記)

アプレットのプロパティが保持されない件:理由=(3)

LateNight Software Blogに掲載された「BIG SUR: LOST PROPERTIES」をGoogle翻訳で読んでみました(ちょっと時間がないので)。

macOS 11.0, Big SurではスクリプトエディタでAppleScriptアプレット書き出しを行うと、

Arm 64/Intel 64のUniversal Binaryで書き出されます。

そして、アプレット書き出し時にCode Signが自動的に行われ(Run Localy)、Apple Developer IDを持っていなくても実行バイナリにCode Signされることになります(Notalizationはまた別)Code Signされるということは、アプレットの情報書き換えが保持されなくなるということであり、property文で設定値を維持しようとしても、実行ごとに内容がフラッシュされる(保持されない)ことになります。

このことはmacOS 10.10ごろから「そういう風になるんだろう」とわかっていたので、property文で設定値を保持するような書き方は一切してきませんでした。設定保存の必要があればUser Defaultsへ書き込み。

サードパーティのOSAX(Scripting Additions)が廃止されることはOS X 10.6の頃からわかっていましたし、OS X 10.10の頃からpropertyで値を保持してはいけないことはわかっていました。

AppleScript Studioランタイムがdeprecated扱いに:理由=(3)(5)

最新の「兆し」は、PowerPC→Intel→Apple Siliconと3世代にわたってメンテナンスされてきた「AppleScript Studioランタイム」(Automatorアクションでこれを使っているものがある)が、いよいよdeprecated扱いになったことです。

もともと、OS X 10.6のときにXcode上から開発用のテンプレートが削除されたためにAutomator Action作成時に積極的にAppleScript Studioの機能を使おうとも思わないのですが、これまで維持され続けてきたというわけです。あれだけの規模のものを、OSのGUI部品が変更され続けていく中メンテナンスしてARM対応まで行なって破棄するとは……自分がその仕事に携わっているならやり切れないものがありますが、既定路線ではあります。

今後、macOS上で実行できるAutomator ActionはAppleScriptObjCベースのものに一本化される、ということです。

ファイル共有のプロトコルがsmbに一本化:理由=(3)

この話が出てきたのが何回目だか覚えていませんが、ファイル共有のプロトコル「afp」が使えないようになりました。「smb」のみです。

LAN上の他のマシンやファイルサーバー、NASのボリウムをマウントする処理は割とありふれたものですが、そのためのサーバーの指定方式がsmbに一本化されたという「変化」があったということです。

ファイルサーバーのマウント処理を記述してあるScriptについては、macOS 11.x以降では書き換えの必要があります。

AppleScript書類(.scpt)アイコンがプレーンテキストを示すアイコンに変更:理由=(3)

なんなんでしょうね? これは、、、ミスなのか、意図があるのか。

System Eventsの機能変更:理由=(2)

これだけ機能が変わっていたらバージョン番号を変更してほしいところです。
→ 同じバージョン番号のまま大幅に機能が変更されたSystem Events

Posted in news | Tagged 11.0savvy | 2 Comments

macOS 11.0.x Big Surが11/13にリリース、ARM Mac発表

Posted on 11月 11, 2020 by Takaaki Naganoya

予告されていたとおり、Apple Silicon(M1)搭載のMacが紹介され、macOS 11.0.1 Big Surの正式リリースが11/13(日本時間)と発表されました。11.0.1 Release Candidate 2が開発者向けにリリースされています。

Apple SiliconのMac版である「M1」を搭載したMacBook Air(ファンレス)、MacBook Pro 13インチ(USB x2の下位モデル)、Mac miniです。見た目や名前は変更されていません。

これまでのCPU移行と異なり、MacBook Air/MacBook Pro 13インチ/Mac miniともにIntel版を併売。

メモリが8GB/16GBとなっており、これはRAMをCPUに内蔵して高速処理させる(Unified Memory)ためにある程度「大容量メモリは搭載できないだろう」と予想されてきました。逆に、Intel Macよりも搭載メモリーが少なめでも効率的に動作することも予想していました(実際に動かさないとわからないですが)。


▲事前に予想していたARM Mac移行の概要

今回発表されたモデルの中にMac miniが入ってきたことは驚きでしたが、ほかは事前のリーク情報どおりです。

M1搭載機種のスピードについては実際に試してみないとなんとも言えません。Appleに自信はあると思われますが、今回の機種については初心者やよくわかっていない人が手を出すと「こんなはずじゃなかった」ということに。

初物M1 Macの注意点は、プリンタドライバや周辺機器(オーディオインタフェースなど)のデバイスドライバです。現状でIntel Mac用のドライバしか公開されていないため、少し古めのプリンタを利用している場合には工夫が必要になります(LAN上にプリンタをつないだ別のMacを用意し、フォルダアクションを用いて他のApple Silicon Macから書類をドラッグ&ドロップして印刷実行)。

macOS 11.0 Big Surについて、自分が確認している範囲ではおかしな動作が若干あります。iOSアプリケーションが動作するはじめての世代のmacOSなので、Mac OS Xでいえば「Public Beta」同然です(OSバージョンが0.x台ではじまるのはこれが初?)。

macOS 11.0 Big Surは、よくいえばmacOS 10.15 Catalinaの機能継続版。悪くいえばCatalinaで「なにこれ?」というおかしな仕様(PDFViewでPDF内のURLリンク処理が厳密すぎて使い勝手が落ちるなど)がそのままということです。

macOS 11.0から、AppleScriptは「iOSアプリケーションをコントロールする」という新たな課題を抱えることになります。現状ではGUI Scripting経由でしか操作できないはずなので、そのmacOS上の「異物」をどのように操作するか、そのノウハウの蓄積が必要です。

Posted in news | Leave a comment

CotEditor v3.9.7でAppleScriptコマンドを追加

Posted on 10月 23, 2020 by Takaaki Naganoya

CotEditor v3.9.7(macOS 10.1510.13以降対応)でAppleScript用語辞書にコマンドが追加されていました。

document中のselectionに対して処理を行うもので、英語のダブルクォート/シングルクォートをワープロ的なクォート開始文字とクォート終了文字に置き換えます。


▲smarten quotes実行前


▲smarten quotes実行後


▲straighten quotes実行前


▲straighten quotes実行後

AppleScript名:smarten quotes
tell application "CotEditor"
  tell front document
    smarten quotes selection
  end tell
end tell

★Click Here to Open This Script 

AppleScript名:straighten quotes
tell application "CotEditor"
  tell front document
    straighten quotes selection
  end tell
end tell

★Click Here to Open This Script 


▲smarten quotes実行前


▲smarten quotes実行後

Posted in news | Tagged 10.15savvy 11.0savvy CotEditor | Leave a comment

Universal Binaryチェックツール「Uni Detector」をMac App Storeでリリース

Posted on 10月 21, 2020 by Takaaki Naganoya

Universal Binaryチェックツール「Uni Detector」をMac App Storeで無料リリースしました。macOS 10.13以降用です。私の作るものなので、すべてAppleScriptで記述してあります。

前作「うにばーさる」はPowerPCからIntelへの切り替え時に、AppleScript Studioで作りました。

「Uni Detector」はAppleScriptObjCで作成。いろいろこなれてきているのですが、商品にはなりそうにもなかったので(そんなにひんぱんにバイナリアーキテクチャを調べたい人はいない)宣伝用にフリー配布です。

# Macの販売店の店頭でデモするのには向いているかも?

バイナリ対応度を調べるだけのソフトウェアでは、一度試したらおしまいです。日常的にこのソフトウェアを使うと便利なよう、自分で使い込んでさまざまな機能を実装しました。アプリケーションのメタデータを読み込んで、しぼり込み検索してカテゴリごとのバイナリアーキテクチャ分布を調べられるようにしました。

また、Universalバイナリ対応のほかに「AppleScript対応度」の調査もこのアプリケーションの1つの大きなテーマにすえました。AppleScript対応度もカテゴリごとに調査できます。「Microsoft」や「Adobe」をキーワードに絞り込んで、アーキテクチャやAppleScript対応度を調査することも可能です。

Scriptableなアプリケーションの一覧を表示したり、選択中のアプリケーションのAppleScript用語辞書を表示させたり、とくに本Blog上のサンプルScriptを表示させる機能がよそには真似できないところでしょう。

一覧で選択したアプリケーション名をキーとして本Blogの記事を検索・表示させる「サンプルScript表示機能」。これだけのためにポップアップするミニWebブラウザを実装しています。

「Universal Binary」は、NeXT時代のMAB(Multi Architecture Binary)、FATバイナリを引き継いだもので、NEXTSTEP(正確には後継のOPENSTEP)時代にはx86(Intel)、68K(NeXT)、SPARC(Sun)、PA-RISC(HP)などの複数アーキテクチャ向けバイナリをまとめてパッケージ内に格納できていました。

当時は複数アーキテクチャ、複数環境をサポートするための技術と受け取っていましたが、Mac OS X上での使われ方は自社プラットフォームのCPU切り替えを円滑に行うためのもので……MAB/FATバイナリとはモノが同じでありながら運用の仕方が全然違いますね。

技術的には、ツールバー上のSegmented Controlで作ったボタンがmacOS 11.0上でどう見えるか、きちんと見えるのか、Betaのたびにコロコロ見え方が変わるので、そのあたりを回避したらどうなるのかとか、そういう実証試験を行なっています。

また、macOS 10.15以降でアプリケーションフォルダ(/Applications)の内容が、/Applicationsと/System/Applications/に分かれ、フォルダの内容をScriptから取得できないあたりで悩まされました。アプリケーションのアイコンをInfo.plist経由で取得できないケースも見られ(とくに、Apple純正アプリケーション)、そのあたりの対処も悩まされたところです(フリー配布なのに手間がかかりまくっていて大変です)。

Terminal.appのコントロールを行なったら一発リジェクトでしたが、スクリプトエディタのコントロールはいいんだ、へーという発見はありました(macOS 10.14で「execute」コマンドが削除されたので無害?)。アプリケーションのAppleScript用語辞書を表示させているだけなので、コントロールというレベルではありませんけれども。

Posted in news PRODUCTS | Tagged 10.13savvy 10.14savvy 10.15savvy 11.0savvy | Leave a comment

macOS 10.15以降のカレンダーアプリケーション内に同梱された大量のAppleScriptを発見

Posted on 10月 15, 2020 by Takaaki Naganoya

たまたま、macOS 11.0Betaで特定のアプリケーションのアイコンを取得できない問題に直面し、その調査を行なっていたところ……カレンダーアプリケーションのバンドル内のResourcesフォルダに大量(32本)のAppleScriptが入っているのを見つけました。

見つけたのはmacOS 11.0Beta上ですが、10.15.7環境でもチェックしてみたところ同数のAppleScriptが入っていました。10.14.6ではみつかりません。10.15.x以降でこうなっているようです。

macOS 10.15はBetaの途中で「これは使い物にならない!」と見切りをつけ、テスト環境で様子を見ながらも本気では使い込んでこなかったので、いまごろ細かい変更点に気づきました(全力で10.15はパスして11.0に移行したいです)。


▲macOS 10.15.7のカレンダー内に入っているAppleScriptと11.0betaに入っているもののdiffをとってみた結果。違いはないもよう

拡張子がscptで、実行専用になっていません。つまり、中身が読めるわけです。

サンドボックス環境のアプリケーションが内部からこうしたAppleScriptを呼ぶ際には実行専用で、かつファイルを読み取り専用に設定しておく必要があります。読み取り&編集可能な状態なので、サンドボックス化されている「カレンダー」アプリケーションがこれらを内部で呼び出している可能性は低そうです。部品として入れるならハンドラ宣言を行なって、外部から呼び出しやすいようにするはずです。これらのAppleScriptをテンプレートとして読み込んで、変数内容を実際のデータに置換して実行するという方法もないことはありませんが、そこまでやらないでしょう(必要に迫られて、やったことありますけれども)。そういう使い方をするならテキスト形式で保存しておくとか、もっと「テンプレートらしく」書いておくことでしょう。書き換え部分を「%@」と書いておくとか。

よって、カレンダーアプリケーション内部でこれらのAppleScript群を呼び出している可能性はほとんどないと思います。

実際にScriptの内容を読んでみると、基礎的なカレンダーアプリケーションの操作を行う、地に足のついた実に質実剛健で良質なサンプルScript集という雰囲気でした。AppleのサンプルScriptにありがちな、冒頭に著作権と(訴訟回避の)お断り文言のオンパレードのテンプレートコメントが30行ぐらい書いてありそうなものではありません。

AppleScript名:addAttendees.scpt
–> Script creates an event and adds invitees. Please modify the email to test account before running the script
set theStartDate to (current date)
set hours of theStartDate to 15
set minutes of theStartDate to 0
set seconds of theStartDate to 0
set theEndDate to theStartDate + (1 * hours)
tell application "Calendar"
  tell calendar "calendar"
    make new event with properties {summary:"Apple Script Invitations", start date:theStartDate, end date:theEndDate, location:"one Infinite Loop"}
    
    
set theEvent to (first event where its summary = "Apple Script Invitations")
    
tell theEvent
      make new attendee at end of attendees with properties {display name:"test", email:"caltest_as1@icloud.com"}
    end tell
  end tell
end tell

★Click Here to Open This Script 

自分もCotEditorのサンプルAppleScriptパックを配布していますが、あれの飛び道具系(PowerPack)ではなく、基礎的なBasicPackの雰囲気です。

この手のサンプルScriptというと、AppleがmacOSに同梱している悪夢のようなApple純正サンプルスクリプト集があるわけですが(日本語環境で構文確認が通らないとか言語道断。しかも書き方が古臭い)、そういうテイストではありません。

「実務でAppleScriptを書いている人間」による簡素なテストコードといった雰囲気を感じます。

まるで、Apple社内で機能テストに使っているAppleScriptがそのままRelease版に残ってしまったような感じです。正確なところはわかりませんけれども。

意図して入れているのか、意図していないのかはまったく不明ですが、OSのアップデートで消去されないうちにバックアップをとっておくことをおすすめします。

このScriptを入れてあることが何かのメッセージなのかどうかは不明です。たいして意味はないでしょう。ただ、Apple社内もしくは外注にちゃんとまともなAppleScriptを書ける人間がいるぞ、という自己紹介的なものだと受け取っておきます。

カレンダーアプリケーションのAppleScript用語辞書内にこれらのAppleScriptサンプルを(本Blog掲載のAppleScriptのようにリンクつきで?)掲載しておけという指定を受けた部下が、その言葉の意味がわからずにそのままバンドル内に渡されたAppleScriptをファイルのまま入れてしまったというあたりが真相ではないかと思われます。

Posted in news | Tagged 10.15savvy 11.0savvy Calendar | Leave a comment

Xcode 12上でのCocoa AppleScriptアプリケーションのUniversalビルド状況

Posted on 10月 14, 2020 by Takaaki Naganoya

目下、最大の関心事はmacOS 11向けにXcode上のCocoa AppleScriptアプリケーションをApple Sillicon & IntelのUniversal Binaryでビルドする方法についてです。

まず、Xcode 12と言われるものは2系列存在しています。Xcode 12.1GMと呼ばれるものと、Xcode 12.2Beta 3です。

調査前には、「Xcode 12.1GMを使ってビルドするんじゃないの? GMだし」と思っていました。Mac App StoreはReleaseビルドのXcodeからのアプリケーション送信しか受け付けない仕様になっているため、Beta版の出来がいくらよくても、GM版、Release版が必須です。

ただ、Xcode 12.1GMでCocoa AppleScriptアプリケーションをUniversal Binaryでビルドしようとしても、出来上がるバイナリはIntel 64bit向けのみです。

だいたい、Xcode 12.1GM上ではビルドターゲットとして「macOS 11.0」を選択できません。

これまでにARM/IntelのUniversal Binaryビルドできたのは、Xcode 12.2Beta2。GM版ではどれもビルドできていません。

実際に、Xcode 12.2Beta3上でCocoa AppleScriptアプリケーションのプロジェクトをUniversal Binaryビルドできることが確認できました。

ただし、Xcode 12.2beta3上でも、既存のXcodeプロジェクトではUniversal Binaryビルドが行えず、新規作成したプロジェクト(コードはほぼからっぽの状態でテスト)でのみUniversal Binaryビルドできました。まだ、既存のプロジェクトのUniversal BinaryビルドができないあたりがBetaっぽいですが、注意を要するところです。

AppleScriptアプレットのUniversal Binary対応状況

スクリプトエディタから書き出したアプレットは、macOS 11.0Beta初期からUniversal Binaryで書き出されていることを確認しています。

AppleScript Studioランタイムが廃止に

その他、Mac OS X 10.6で廃止になった「AppleScript Studio」のランタイムがXcode上の開発テンプレート廃止後も実行のみサポートが継続されています。

これはAutomator登場初期に作られたAutomatorアクションがこのAppleScript Studioのランタイムを利用していたためです。

Automatorアクションの実行サポートのためにAppleScript Studioのランタイムが最新OS上でも維持され続けてきました。先日、ついにこのAppleScript Studioランタイムの将来的な廃止がAppleのWebサイトに掲載されていました。

AppleScript StudioランタイムのARM Binary(ここも、Xcode上で「ARM」という言葉を使わないようにいろいろ記述が変わっている)化を行なっているとは思えないので、おそらくARM/Intelの両方のCPUサポートを3〜4年ぐらい行い(AppleScript StudioランタイムはRosetta2で実行?)、Rosettaの廃止ライミングでAppleScript Studioランタイムも一緒に廃止するのでしょう。

AutomatorアクションのAppleScriptによる開発テンプレートはAppleScriptObjCベースのものに(とっくの昔に)変更になっています。AppleScriptObjCベースで開発していれば問題ありません。

Posted in news | Tagged 11.0savvy Xcode | Leave a comment

Evernoteがv10.0でElectronベースのWebブラウザ的なアプリに

Posted on 10月 8, 2020 by Takaaki Naganoya

Evernoteがv10.0にアップデートして、内容がローカルのアプリケーションではなくWebブラウザ的な(Electron Frameworkを用いた)アプリケーションになりました。

Electron Frameworkを用いたアプリケーションの特徴で、まずAppleScriptには対応しておらず、実際にスクリプトエディタでEvernoteアプリケーションを調べ、AppleScriptからのコントロール機能が存在していないことを確認しました。

AppleScriptからこの手のデータ・スクラップ的なアプリケーションを操作するのであれば、MacJournal v7がいまならフリーで利用できます(Mariner Softwareから作者のDan Schempfに移管になりました)。

メモをとって(Appleの)デバイス間で共有するという目的であれば、macOS標準搭載の「メモ」もよくできているため、これに乗り換えてもよいでしょう。

MacJournalもメモもAppleScriptに対応しており、検索でデータの追加をAppleScriptから行なって、他のアプリケーションとの連携を行うことが可能です。個人的にはMacJournalを利用しており、これに満足しているので問題はありません。

自分のマシンでは、Evernoteは不要なのでアンインストールしておきます。それほど使っていたわけでもありませんが、Evernoteとはお別れです。

→ AppleScriptからのコントロール機能を残したEvernote Legacyが配布されているようです。アップデートした後でAppleScriptが使えなくなって対処ができない場合には、こちらを試してみてもよいでしょう

Posted in news | Tagged Evernote | Leave a comment

Mac App StoreでTable Dripper v1.1が審査中

Posted on 10月 2, 2020 by Takaaki Naganoya

Mac App StoreにWebの表データ(tableタグで書かれた表)のインタラクティブ・スクレーパーである「Table Dripper」のバージョン1.1を申請し、目下審査中です。

データスクレイパーの多くは、定期巡回してまとめてサイトのデータを取ってくるものですが、Table DripperはWebブラウザで表示中の、いま目の前にある見えている表データを取り出すことに特化しています。

v1.0の審査は10日ぐらいかかったのですが、今回はもう少し早く結果が出て欲しいところです。

v1.0がAppleの承認を経て公開になったあとで、あとから「やっぱりこのアプリ、Mac App Storeの規約に反しているのでー」と言ってきたので、その部分に手を加えてアップデートしました。

temporary items folderにユーザーがアクセスできてしまうことを問題視したようです。他のアプリケーションの審査では指摘されていた項目ではあったものの、当時Mac App Storeの審査に1人で同時に3本ぐらい突っ込んでおり、他のレビューでは指摘されていた内容でした。

ちなみに、ダルそうに電話してきたApple側の担当者は「Table Dripper」という単語を読めませんでした(おかわいらしい!)。「Sandboxの仕様で話はわかるが、どう回避しろと?」と問えば、自分はそんなことは知らない、とのこと。

なるほどー、文字が読めない人間に電話させてくるのかー、知能のない人間を担当にして反論を封じるとはなかなか洒落たことをするものであります。言葉のわからないにゃんこちゃんに反論はできませんので。

これを、難しい専門用語で「サンドボックス環境」ならぬ「サンドバック担当」と呼びます。


▲起動時にDrip Folder(作業用の表データ書き込み先フォルダ)の選択を求められるようになりました。Sandboxの仕様上、動作を変えた部分


▲5つのWebブラウザをサポート。FireFoxやOperaはAppleScriptのサポートが弱い(do javascriptに相当するコマンドがない)ためにサポートできません


▲表データの解釈機能を大幅に強化。取り込み時に行ヘッダーを削除する機能を追加


▲表データをHTML形式でも取り込めるようにしました(CSVに解釈できない場合への対処)


▲行ヘッダー削除のパターンを図示(ねんのため)

Posted in news PRODUCTS | Tagged 10.14savvy 10.15savvy 11.0savvy | Leave a comment

Pixelmator Pro AppleScriptコンテストに「もぐら叩きゲーム」を応募

Posted on 9月 29, 2020 by Takaaki Naganoya

LateNight Software主催のPixelmator Pro AppleScriptコンテストに応募してみました。

応募内容は、「もぐら叩きゲーム」です。

Pixelmator Proというグラフィックソフトを使ってもぐら叩きゲーム。不可能ではありません。

Pixelmator ProのAppleScript用語辞書をながめていたら、レイヤーごとの表示/非表示を制御できることがわかったので、レイヤーをセルに見立ててパラパラアニメーション的なものを表示しつつCocoaの機能を使ってキースキャンするとできそうだと思っていました。作ってみたら、問題なくできてしまったと。

このもぐら1匹バージョンのもぐら叩きは1時間ぐらいで出来たのですが、3匹バージョンを試してみたところ、とても100行に収まりきらない感じだったので、3匹バージョン構想は破棄しました(時間かけるような内容でもないですし)。

コンテストのレギュレーションを詳細にチェックすると、1つの外部ファイルの読み込みはOKということになっており、表示用のPixelmator Pro書類がこれに該当するかどうか、という点が気になっていました。

こういうレギュレーションの機敏については、コンテスト開催側の胸先三寸で決められる部分なので、主催者側に判断をおまかせするしかありません。

あとは、環境に応じて時間待ちループ時間を大幅に変えないとダメそうです。AppleScriptObjCのプログラムは、HDDで動いているMac上だと極端に遅くなる傾向があるので、たまたま手元でmacOS 10.15.7を動かしている隔離環境(10.15のテスト環境)だとずいぶん動作が遅い(実際にはAppleScriptの実行が速すぎてウェイト入れまくっているんですが)印象を受けました。

このあたり、実行環境のパフォーマンスを計測して時間待ちの長さを適宜調節すべきなんですが、そういうパフォーマンス計測だけで数十行ぐらいは平気でかかってしまうので、100行以内というレギュレーションだとかなり無理な感じがします。Pixelmator Proに新規書類作成などのコマンドを送ってみて、どのぐらいの時間で処理できるかをその場で計測し、パフォーマンスを計ってウェイト時間を調整するべきなんでしょう。

ただ、コンテスト用のScriptだし、なるべくシンプルなものがいいんでしょう。音がないとさびしいので、iTunesなりMusic.appをコントロールしてBGMを鳴らそうと思っていたんですが、行数が足りなくてダメでした。

Pixelmator Pro向けには、KamenokoのデータをPixelmator Proのネイティブオブジェクトで内容を再現するものを試作して動かしています。ただ、1書類の内容を再構成すると40秒ぐらいかかるのと、Pixelmator Proのオブジェクトで再現するよりPDFベースでコピペしたほうが綺麗だったので、そのプログラムはお蔵入りしています。

この手の「とてもゲームが作れるようには見えない」アプリケーションを使って別のものを仕立てるのは、実は慣れたもので……

Mac World Expo/Tokyoでデモした「FMバトラー」(ファイルメーカーProをAppleScriptでコントロールしてホームページ対戦ゲームに仕立てたデモプログラム)など、これまでにもいろいろ作ってきました。

さらに、Cocoaの機能がAppleScriptから直接呼べるようになったので、複数キーの同時入力受付(正確には、ShiftやControlなどのModifier Keyのキースキャン)といったあからさまにゲームが作りやすそうな機能を利用できるようになったので、過去の無理やりつくったデモ用ゲーム風システムよりも、今回は作りやすかったといえます。

でも、真剣に「Pixelmator Proで込み入ったゲームを作れるんだろうか?」と試してみたところ、そこまでのパワーはありませんでした。オブジェクトの属性値の変更も、様子を見ながら限定されたものを操作するのは向いているものの、大量のオブジェクト操作を行うとアプリケーション側がついてきません。

きしくも、応募作品のもぐら叩きゲームは「奇跡的にちょうどいいバランス」で成立していることがわかりました。

後日、「外部プログラムの威力を利用して画像認識機能をPixelmator Proに足してみては?」と、Web APIとかdarknet(YOLO v3 model)を併用して画像認識した内容をレイヤー名に反映させたりと試していたところ……Pixelmator Proにやられました。

Pixelmator Proにはデフォルトで画像認識機能が入っていて、簡単な動物などの写真はインポートした瞬間に画像認識されて、それっぽいレイヤー名を自動で命名することが判明!

Pixelmator Proのバンドルパッケージを開けてみると、いくつもCore ML Modelのファイルが入っており、深層学習データを併用してさまざまな処理を行なっていることが伺われました。


▲Finder上からPixelmator Pro書類に画像をドラッグ&ドロップすると、その場で画像認識されて「それっぽい」レイヤー名が自動で割り振られる。「犬」とか「鳥」といった名前はPixelmator Proが自動でつけたもの


▲「どうせ認識しないだろ」と思って、ガンダムの画像をドロップしたら「おもちゃ」と認識。たった34MBの深層学習データでどうしたらここまで認識できるのやら。学習データだけでなく、別の手段も併用している???(画像取得元のURLの情報を取っているとか?)

もしかして、各種レイヤーの画像を随時(保存時にでも)画像認識して、ユーザーごとの画像⇄レイヤー名の関連性を学習して、再インポート時には過去の画像から類推して近いものを提案するのでは? などと思ってしまうところです。

これはオシャレです! センスよすぎです。さりげなさすぎて気づきませんでした。出しぬこうと悪だくみしてみたら、相手の方がはるかに上手だったということが判明したのでした。アプリケーションの機能で感動したのは久しぶりです。

Posted in news | Tagged 10.15savvy Pixelmator Pro | Leave a comment

SFSymbolsフォントにAppleScript

Posted on 9月 23, 2020 by Takaaki Naganoya

macOS 10.15.x以降で使用できる、よく使われるアプリ内アイコンをフォント化した「SF Symbols」フォントが配布されており、このフォントにAppleScriptアイコンが用意されていることを見つけました(たいした発見ではありません。「へーそうなんだー」ぐらいの内容です)。

「SF Symbolsベータ」アプリケーションをインストールすると、さまざまなカテゴリに区分されたアイコン文字を閲覧、コピーすることができます。

このように、macOS 10.15.x以降にSFSymbolsフォントがインストールされていれば、Keynote書類上に文字情報をコピーすることも可能です(文字なので)。

もしやと思い、macOSの日本語Input Methodのユーザー辞書にこのAppleScriptアイコンを登録。

テキストエディタ(CotEditor)上で「あっぷるすくりぷと」と入力して変換すると、AppleScriptアイコンに変換されました。なるほど。たしかに文字ですわ。

–> ASInput demo movie

Posted in news | Tagged 10.15savvy 11.0savvy | Leave a comment

Xcode 12.2betaでIntel/ARM Universal Binaryのビルドを確認

Posted on 9月 20, 2020 by Takaaki Naganoya

Xcode 12GMではビルドできなくなっていたIntel/ARM Universal Binaryが、Xcode 12.2betaでビルドできることを確認しました。

このビルドの確認は、AppleScript Cocoaアプリケーションのプロジェクトのビルドで行い、生成されたバイナリにIntel/ARMアーキテクチャのバイナリが含まれていることが確認できました(fileコマンドでUniversal Binaryを確認。ARM Mac実機上での実行確認は行っていません)。

me@MacMini2014 ~ % file /Users/me/Library/Developer/Xcode/DerivedData/asTest3-delafurpjctyxkasofeysytgsiny/Build/Products/Release/asTest3.app/Contents/MacOS/asTest3
/Users/me/Library/Developer/Xcode/DerivedData/asTest3-delafurpjctyxkasofeysytgsiny/Build/Products/Release/asTest3.app/Contents/MacOS/asTest3: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64:Mach-O 64-bit executable arm64]
/Users/me/Library/Developer/Xcode/DerivedData/asTest3-delafurpjctyxkasofeysytgsiny/Build/Products/Release/asTest3.app/Contents/MacOS/asTest3 (for architecture x86_64):	Mach-O 64-bit executable x86_64
/Users/me/Library/Developer/Xcode/DerivedData/asTest3-delafurpjctyxkasofeysytgsiny/Build/Products/Release/asTest3.app/Contents/MacOS/asTest3 (for architecture arm64):	Mach-O 64-bit executable arm64

Mac App StoreではBeta版のXcodeからのバイナリ提出を認めていないため、Universal Binary版のAppleScriptアプリケーションをMac App Storeに提出するためには、このXcode 12.2正式版のリリースを待つ必要があることでしょう。

現時点で先行して、macOS 11.0 Big Sur対応をIntel Mac向けのみで(ARMバイナリなしで)行うことは不可能ではありませんが、あまり意味がないことでしょう。まだRelease前ということもあって、Betaごとに仕様が変わってきています。とくにGUIまわりで。細かなバグもBetaごとに異なるものが見られます。

Xcode上でAppleScript Cocoa Applicationをビルドする際に、Build ArchitectureをUniversal Binaryに設定した状態で、Target OSをmacOS 10.13ぐらいに設定して問題がないか(Build条件をしぼられていないか)確認したところ、確認した本バージョン(12.2beta)では大丈夫でした。

補足までに、macOS 11.0, Big Sur上のスクリプトエディタでアプレット書き出しを行い、アプレットがIntel/ARMのUniversal Binaryのランタイムとともに書き出されていることも確認しています。

me@MacMini2014 ~ % file /Users/me/Desktop/appTEST.app/Contents/MacOS/applet 
/Users/me/Desktop/appTEST.app/Contents/MacOS/applet: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64:Mach-O 64-bit executable arm64]
/Users/me/Desktop/appTEST.app/Contents/MacOS/applet (for architecture x86_64):	Mach-O 64-bit executable x86_64
/Users/me/Desktop/appTEST.app/Contents/MacOS/applet (for architecture arm64):	Mach-O 64-bit executable arm64
Posted in news | Tagged 11.0savvy Xcode | Leave a comment

Pixelmator Pro 1.8 AppleScriptコンテスト開催

Posted on 9月 18, 2020 by Takaaki Naganoya

Late Night Software Blogの告知がTwitterに流れてきていました。Pixelmator Pro v1.8にてAppleScriptに対応したことを祝して、Late Night Software主催でPixelmator ProのAppleScriptプログラミングコンテストが開催されるとのこと。

Pixelmator Proはいわば「IllustratorとPhotoshopを足して2で割った」ようなアプリケーション。Photoshopの代用になる廉価なアプリケーション、という路線です(旧Macromedia FireWorksに近いかも)。基本的にはラスター画像の処理ソフトで、ビットマップイメージを作成するものです。ベクター図形や文字などもキャンバス上に配置できますが、最終的には画像化されます。ラスター画像に対して非破壊で各種フィルタ処理が行えることが売りです。Web画像素材やアプリケーションのアイコン画像作成といった用途、写真のレタッチなどに使われているようです。登場直後にAppleScript対応リクエストを出していたものの、今回10年越しぐらいで実現して腰を抜かしました。

さて、コンテストに話を戻します。Pixelmator Pro v1.8の試用版を使うことで、同アプリケーションのScriptを書いて試せるとのこと(やっています)。辞書内容は事前に確認していましたが、ツッコミどころがあまりないぐらい、さまざまな機能が載っていました。「え、こんな機能まで乗せてるの?」という謎の充実度を見せており(Pixelmator Pro本体に搭載されていないQRコードの検出機能とか)、AS機能の開発に元AppleのSal Soghoianが協力したという話もうなづけます。

以下、コンテストのレギュレーションです。

*締め切り日:2020年10月8日 00:00(PST、日本標準時より1時間早い。別名「Shane Stanley時間」)
*Late Night Softwareのフォーラムで「いいね」が押された数で競う(あ、これ女性と子供が有利なやつだ ^ー^;)
*賞品はPixelmator ProのMac App Storeクーポンコード。優勝者は複数(Winnersと書いてある)だが、どうも人数は決めていない様子。
→ 入賞枠は3とのこと(補足)
*コンテスト応募は、LateNight Softwareのフォーラムに「pixelmatorpro」と「contest」のタグをつけて投稿すること
*AppleScriptの行数は100行まで(えーー)。コメントと空き行は除く。継続記号(┐)で続けた行も区切ってカウントされる。1行が200文字を超えてはいけない
*全Script行数の25%以上、Pixelmator Proの機能を呼び出さなくてはならない
*ScriptはmacOS 10.15, Catalina上で動作しなくてはならない
*ScriptはすべてAppleScriptでなくてはならない(JXAやshell scriptその他はダメ)。ASOCはOK
*外部Script Librariesの使用禁止(BridgePlusが使えない。これは痛い)
*Scriptはサードパーティのソフトウェア使用禁止。macOS Catalinaの標準搭載アプリケーション(ただし、Keynote、Pages、Numbersは使用OK)および(当然)Pixelmator Proのコントロールはしてよいものとする
*Scriptは製作者提供の外部データを1つに限り読み込んでよいものとする
*インターネット上のデータの読み込みはOK
*ScriptのInfo欄にスクリーンショットを入れてもいいよ
*楽しんでくれ。嫌がらせや破壊行為はNG
*ルールの明示化のためにルール自体の補足・説明を(主催者が)随時行えるものとする
*Script Debugger上で動作すること

……巨大Scriptで一部のScripterがコンテストを蹂躙することを避けつつ、「このあたり、穴場だよね?」という箇所を埋めてあります。あっと驚く参加者(たぶん、最年少参加者)が優勝をもぎ取って、真の実力者(Edama2さんみたいな)が投稿したScriptが全力でスルーされつつPixelmator Pro Scriptingの肥やしになりそうな、よく考えられたレギュレーションです(コンテストってそういうもんなんで)。

そして、一部のScripterが巨大な外部ライブラリを使ってコンテストを荒らすことを防ぐ、いいレギュレーションだと思います(Piyomaru Software対策)。

macOS標準装備のScript Editorと、LateNight Softwareが提供しているScript Debuggerの間で、(主にCocoa Scriptingで)若干の挙動の違いがありますが、レギュレーションではScript Debugger上で動作することを明記しています。まー、こんな100行程度のScriptでCocoa Scripting使ってもたいした処理が書けないんで、Cocoaの使いこなしで発生する実力差を相殺したいんだと思います。

自分が参加するとしたら、優勝狙いではなく「AppleScriptでこんなことできないでしょ」という連中を一発で黙らせるような破壊力のあるものを投稿して、それでも優勝しないという内容でしょう。ただ、100行以内だと「秘密兵器」を仕込むほどの分量がありませんね。

「1つの外部ファイルを読み込んでよい」というあたりが狙い所でしょうか。ここで勝負が決まると思います。ベトナムとかマレーシアの女子中学生あたりが優勝しそうだと予想。

Pixelmator ProのAppleScript用語辞書にはサンプルコードが多数掲載されており、それらを試してみるだけでもかなりのことがわかってきます。ただ、サンプルは行数を減らして見せるよう書かれているため、表記ゆらぎが大きく、オブジェクト階層を素直にtell文で順序立てて書くようなScriptに書き直さないと「部品」としては使いにくい印象も受けました。

実際に、Pixelmator ProのScriptingを行って、Kamenokoのネイティブデータにアクセスしてデータ書き出しを行ってみましたが、これだけでも数百行のコード規模になっているので、100行だけだと実に過酷だと感じましたわー。

Posted in news | Tagged 10.15savvy Pixelmator Pro | Leave a comment

Now, we have attack by somebody via e-mail

Posted on 7月 2, 2020 by Takaaki Naganoya

Now, we have e-mail attack by somebody. We don’t have an intention to attack. I think the attacker use mail address spoofing.

Webmail UI might be cracked.

Posted in news | Leave a comment

WWDCでMacのARM移行と次期macOS 11「Big Sur」を発表

Posted on 6月 23, 2020 by Takaaki Naganoya

WWDC20にて、MacのARM(Apple Silicon)移行と、次期macOS 11「Big Sur」が発表されました。

Apple Silicon(A12z Bionic)搭載の開発者向けマシン「Developer Transition Kit」(Mac mini筐体、A12Z Bionic 2.6GHz 8Core, RAM 16GB, SSD 512GB)も500ドルで提供されることが発表されました。

Big Surの出来については「iOSっぽいデザイン」としか言いようがありませんし、中身についてはBeta版を見て判断するほかありません。

→ AppleがMacでも独自開発のプロセッサに移行する「Apple Silicon」を発表、iPhone&iPadのアプリがMacでも利用可能に


▲Xcode 12betaでAppleScriptObjCアプリケーションを作ってビルド(初期β版のものです)


▲スクリプトエディタ上でAppleScript v2.7が動作。見た目はちょっと……随分変わります(初期β版のものです)


▲自作のアプリケーション「Kamenoko」も動作。ただ、Big Sur向けに部品を変えたほうがいい部分もあります

Posted in news | Tagged 11.0savvy | Leave a comment

Post navigation

  • Older posts

電子書籍(PDF)をオンラインストアで販売中!

Google Search

Popular Posts

  • Keynoteの最前面のドキュメントの現在のスライドに指定月の日曜日はじまりカレンダーを表で作成
  • Numbersで選択範囲のセルのデータを取得して重複データを抽出
  • 配列の指定要素を検索する(テキスト)
  • 文字列のURLエンコード、URLデコード
  • 指定フォルダに指定アイコン画像をつける v3
  • リストから選択してアイテム番号を返す
  • AppleScript上でJavaScriptを実行する
  • ディスプレイの設定切り替えをAppleScriptでも行えるSwitchResX
  • Xcode 12.2betaでIntel/ARM Universal Binaryのビルドを確認
  • AppleScriptでキースキャン
  • Numbersで選択中の表のセルの範囲を背景色で頻度集計
  • SafariでURLをローディング
  • CotEditorで編集中のMarkdown書類をPDFプレビュー
  • AppleScript disassembler
  • Safariで表示中のWebページの最終更新日時を取得
  • 【基礎】AppleScriptの実行を(操作により)中断する
  • 各種GUI要素なしでSafari上に新規ウィンドウ表示
  • NSProcessInfoでプロセスの各種情報を取得
  • Safariで表示中のURLをwebarchive保存
  • Bluetoothデバイスのバッテリー残量を取得 v3

Tags

10.11savvy (1109) 10.12savvy (1249) 10.13savvy (1384) 10.14savvy (504) 10.15savvy (295) 11.0savvy (103) CotEditor (47) Finder (43) iTunes (25) Keynote (58) NSAlert (59) NSAlertSecondButtonReturn (16) NSArray (50) NSBitmapImageRep (20) NSBundle (19) NSButton (33) NSColor (48) NSDictionary (26) NSFileManager (23) NSFont (18) NSImage (40) NSJSONSerialization (20) NSMutableArray (61) NSMutableDictionary (21) NSPredicate (36) NSRunningApplication (55) NSScreen (30) NSScrollView (22) NSString (113) NSURL (93) NSURLRequest (22) NSUTF8StringEncoding (29) NSUUID (18) NSView (33) NSWindow (17) NSWorkspace (19) Numbers (42) Pages (16) Safari (34) System Events (16) WKUserContentController (20) WKUserScript (19) WKUserScriptInjectionTimeAtDocumentEnd (17) WKWebView (21) WKWebViewConfiguration (21)

カテゴリー

  • AirDrop
  • AirPlay
  • Animation
  • AppleScript Application on Xcode
  • Bluetooth
  • boolean
  • Bug
  • Calendar
  • call by reference
  • Clipboard
  • Code Sign
  • Color
  • Custom Class
  • dialog
  • drive
  • exif
  • file
  • File path
  • filter
  • folder
  • Font
  • GAME
  • geolocation
  • GUI
  • GUI Scripting
  • History
  • How To
  • Icon
  • Image
  • Input Method
  • Internet
  • JavaScript
  • JXA
  • Keychain
  • Language
  • list
  • Locale
  • Machine Learning
  • Markdown
  • Menu
  • Metadata
  • MIDI
  • MIME
  • Natural Language Processing
  • Network
  • news
  • Noification
  • Notarization
  • Number
  • OCR
  • OSA
  • PDF
  • Peripheral
  • PRODUCTS
  • QR Code
  • Raw AppleEvent Code
  • Record
  • recursive call
  • regexp
  • Release
  • Remote Control
  • Require Control-Command-R to run
  • REST API
  • RTF
  • Sandbox
  • Screen Saver
  • Script Libraries
  • sdef
  • search
  • Security
  • shell script
  • Sort
  • Sound
  • Spellchecker
  • Spotlight
  • SVG
  • System
  • Tag
  • Telephony
  • Text
  • Text to Speech
  • timezone
  • Tools
  • Update
  • URL
  • UTI
  • Web Contents Control
  • WiFi
  • XML
  • XML-RPC
  • イベント(Event)
  • 未分類

アーカイブ

  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年12月
  • 2019年11月
  • 2019年10月
  • 2019年9月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
  • 2018年10月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年6月
  • 2018年5月
  • 2018年4月
  • 2018年3月
  • 2018年2月

https://piyomarusoft.booth.pm/items/301502

メタ情報

  • 登録
  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org
Proudly powered by WordPress
Theme: Flint by Star Verte LLC