ついに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
System Eventsの動作状態の変更:理由=(3)
OSが起動して他のGUIアプリケーションを操作可能な状態になって久しい状態だというのに、System Eventsに対する操作を行おうとしたら、プロセスが起動していないといったエラーが表示されました(macOS 11.3 beta3)。
launchコマンドでSystem Eventsの起動を明示的に行うことで、問題なく操作できましたが、System Eventsに明示的にlaunch操作を行わなくてはならなくなったようです。リリースノートに記載すべきレベルの変更が加わっているように感じます。
NSStringのstringWithFormat:を呼び出すとクラッシュ:理由=(3)
こんな基礎的な箇所でバグを作られるとウンザリします。また、使っている箇所が多過ぎてウンザリします。このバグのせいで、Mac App Storeで配布しているUni DetectorのCPUアーキテクチャ別のグラフ表示機能を実行すると(macOS 11.x台、11.5より前では)クラッシュしていました。
–> macOS 11.5で修正されました。macOS 11.0〜11.4の間、この機能がまともに動いていなかったわけです。AppleScriptのプログラムは、macOS 11に対しては最新のバージョン以外はサポートしないということになるでしょう。
AppleScript名:stringWithFormatのじっけん.scptd |
— – Created by: Takaaki Naganoya – Created on: 2021/06/19 — – Copyright © 2021 Piyomaru Software, All Rights Reserved – 本Scriptを実行すると、Intel Mac/Apple Silicon Macの両方でクラッシュします
use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions
set dTemp to "chart.data = [{ \"label\": \"Apple Silicon\", \"value\": %@, \"color\": chart.colors.next() }, { \"label\": \"Intel 64 bit\", \"value\": %@, \"color\": chart.colors.next() }, { \"label\": \"Intel 32 bit\", \"value\": %@, \"color\": chart.colors.next() }, { \"label\": \"PowerPC 64 bit\", \"value\": %@, \"color\": chart.colors.next() }, { \"label\": \"PowerPC 32 bit\", \"value\": %@, \"color\": chart.colors.next() }];"
set ppc32Count to 1 set ppc64Count to 2 set intel32Count to 3 set intel64Count to 4 set arm64Count to 5
set aDataStr to current application’s NSString’s stringWithFormat_(dTemp, arm64Count, intel64Count, intel32Count, ppc64Count, ppc32Count) as string |
★Click Here to Open This Script
|
NSString’s StringWithFormat:をmacOS 11で実行すると100%クラッシュ