Menu

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

AppleScriptの穴

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

カテゴリー: History

macOS(Mac OS X/OS X)上のAppleScriptの歴史

Posted on 9月 9 by Takaaki Naganoya

macOS 26.0のリリース日が公開されそうなので、AppleScriptの歴史年表について書いておきます。

各種電子書籍に掲載している内容ですが、一般にも共有できていたほうがメリットが多そうなので公開しておきます。

マイナーバージョンで発生したバグの件については、すべて掲載できていません。ファイル書き込み時の文字エンコーディングが狂うとか、OSのバージョン番号をまともに返してこないとか。

Mac OS X 10.0(AppleScript v1.6)
◯Classic Mac OS向けに書かれたOSAXを認識しなくなった 
◯Unicode Textを扱えるようになった(as Unicode Text)
◯Mac OS Xのファイル/アプリケーションの新しい仕組み「バンドル」を扱えるようになった 
◯コマンドラインからosascript、osacompile、osadecompile、osalangが使えるようになった 
◯read/writeコマンドで2GB以上のデータの読み書きができるようになった

Mac OS X 10.1(AppleScript v1.7)
◯AppleScript自体の改行コードに、CR+LF(Windows)、CR(Mac)、LF(Unix)の3種類を使えるようになった(ネイティブはCR)
◯プログラムリンクの機能が復活。ただし、AppleTalkによるノード名称の指定はできず、TCP/IPベースに変更される(eppc://)
◯SOAPとXML-RPCの機能がサポートされた
◯拡張子を扱えるようになった
◯アプレット保存時にPowerPC/68kのどちらかのバイナリを選択するようになった

Mac OS X 10.2(AppleScript v1.9)
◯choose URLがWindows系サービスとFTPサーバーに対応
◯Script Menuの機能が単体でダウンロード提供されるようになった
(Folder ActionsがSystem Eventsの管轄にあるなど混乱期)

Mac OS X 10.3(AppleScript v1.9.2)
×AppleScript史上最大最悪のバグ「is in」演算子が使えないバグが発生(→10.3.x台で修正される)
◯AppleScriptおよびアプリケーションがバンドル形式でも保存できるようになった
◯delayに小数点以下の数値が指定できるようになった
(×AppleScriptの処理系のバグがとても多かった暗黒時代)

Mac OS X 10.4(AppleScript v1.10)
◯日本語環境がらみのバグが多数修正されたが、本格的な修正は10.5を待つ必要があった
×バグの指摘から修正まで時間がかかり、このバージョンを経てようやく処理系の安定が図られるようになった
×Finderからファイルパスを取得するとエンコーディングがおかしくなったり、display dialogで日本語がまともに表示できないアプリが存在していたのもこのバージョンまで

Mac OS X 10.5(AppleScript v2.0)
◯文字列をすべてUnicodeで扱うようになった
◯ASCIIキャラクター0〜255だけでなく、Unicodeの広い範囲の文字を取得できるように「text id xxxx」(xxxxは10進数で指定)が新設された
◯日本語の文字を含むファイルパスの取扱いがまともになってきた
◯アプリケーション起動中の状態(running)を取得できるようになった
◯アプリケーションをバンドルIDで指定できるようになった
◯FolderAction SetupがScriptableになった
◯「#」ではじまるコメント行を書けるようになった

OS X 10.6(AppleScript v2.1)
◯「スクリプトエディタ」が「AppleScriptエディタ」と名称変更
◯AppleScriptエディタが「ユーティリティー」フォルダに移動になった
◯AppleScriptエディタ上での構文色分け機能が強化された
◯AppleScript処理系の(ログイン後の)起動が速くなった
→ ただし、逆にログインアイテムに登録したAppleScriptアプレットが正しく実行されないというバグを生んだ。ログインアイテムに登録したAppleScriptアプレットでSystem Eventsを呼び出すと、System Eventsの起動が間に合わず、エラーになったりしていた

OS X 10.7(AppleScript v2.2)
◯AppleScriptエディタにスクリプトテンプレートの機能が追加された
◯AppleScriptエディタ上でAppleScriptObjC(Cocoa AppleScript Applet)を書けるようになった
×64bit版に書き直されたFinder、通称「Cocoa Finder」の動作速度が遅く、とくにファイル処理をFinderに任せると大幅に速度が低下する現象が発生。Scripterの間で「ファイル処理をFinderで行わないという」暗黙の合意が広がった

OS X 10.8(AppleScript v2.2)
◯AppleScriptエディタに「エクスポート」の機能がついた。アプレットはエクスポートして生成するよう変更
◯AppleScriptがOSのSandbox化の機能の影響を受けるようになった

OS X 10.9(AppleScript v2.3)
◯AppleScript 20年来の大改革。ライブラリ機能「AppleScript Libraries」が追加された
◯ユーザーへのNotification Center経由での通知命令「display notification」が追加された
◯AppleScriptObjCのハンドラ記述方式に、Objective-Cに似た記述方式が使えるようになった(Xcode上)
◯AppleScriptエディタでアプレットへのコードサインができるようになった
◯AppleScriptエディタがiCloudに対応し、iCloud上にAppleScriptを保存、iCloudからのAppleScriptの読み込みができるようになった

OS X 10.10(AppleScript v2.4)
◯「AppleScriptエディタ」が名称変更でふたたび「スクリプトエディタ」に
◯スクリプトエディタ上でCocoaの機能を利用するAppleScriptObjCを標準でサポートするようになった
◯プログレスバーの表示機能をサポート
◯「as」による型変換(cast)で複数の型をリストで指定できるようになった
◯AppleScriptObjCのハンドラ記述方式に、Objective-Cに似た記述方式が使えるようになった(スクリプトエディタ上)
◯ハンドラ(サブルーチン)宣言部でパラメータの型指定が行えるようになった
◯無意味句を用いたハンドラ記述した場合に、パラメータ省略時の初期値を宣言できるようになった

×AppleScriptアプレット中でdelayコマンドを利用したときに、正しく時間待ちされないバグ

×AppleScriptとCocoaの間で小数点を含む実数を変換すると小数点以下の値が欠落するバグ
×NSStringとtext、NSStringとstring、NSStringとUnicode textの間でデータ 変換をしたときに、一部の文字が正しく変換されないというバグ(castバグ)
×Folder Actionにバグ。利用者権限に抵触してまともに動作しない(OS X 10.11で修正)

OS X 10.11(AppleScript v2.5)
◯Folder Actionのバグ修正。FSEventsを用いて随時ドロップされたファイルのイベントを受け付けるように処理方式があらためられた(以前は数秒ごとに対象フォルダをチェック する方式)
◯10.10のAppleScriptObjCのバグ修正(cast、enum)
◯AppleScript Librariesのファイルの置き場所を追加(環境変数で指定可能に)
◯より多くのCocoaのデータ型をAppleScriptの型に変換するようになった
◯delayの時間待ち無効バグ修正

macOS 10.12(AppleScript v2.5)
◯パフォーマンス改善のためのバグ修正を実施
×ドロップレットに不具合。ファイルの拡張属性「com.apple.quarantine」がついていると、ファイルが無視される(Script側で対処。以後Apple修正せず)
×Scripting Bridgeの定義ファイルに不具合。Enum「NSNotFound」のブリッジされている定義値が-1にならない(macOS 10.13.1で修正)

macOS 10.13(AppleScript v2.7)
◯セキュリティ関連の修正を実施
◯NSCharacterSet newlineCharacterSet()のようなメソッドでクラッシュしなくなった
◯NSNotFoundのScriptingBridge経由でブリッジされる定義値を-1に修正(macOS 10.13.1)
◯Remote AppleEventsの機能が復旧し、AppleScriptからLAN上の他のマシンの上で動作しているアプリケーションを直接操作できるようになった(起動している必要がある)

◯ScriptingBridge定義ファイルにバグ。PDFKit中のPDFPageのcurrentPage()がブリッジされていない。報告するも未修正(ずっと未修正)

macOS 10.14(AppleScript v2.7)
◯システム環境設定の「アクセシビリティ」>「プライバシー」に、「フルディスクアクセス」「オートーメーション」が新設され、ディスクやリソースへのアクセス、アプリケーションとの通信を管理するようになった。これに伴い、このアプリケーションへのアクセス認証を得ていない場合に発生するエラー(エラーコード-1743)が新設された。
◯サードパーティのOSAXサポートが廃止された
◯スクリプトメニューが、Menu Extraから独立したアプリケーションに変更になった
◯DVDプレイヤーがアプリケーションから補助ツールに格下げになり、AppleScriptからの操作が行えなくなった
◯SIPの機能が強化されセキュリティが強化された。その結果、アプレット内にFrameworkを同梱して配布したり、~/Library/Frameworksに入れたフレームワークをスクリプトエディタが認識しなくなった(事実上、Script Debuggerが必須に)
◯スクリプトエディタのAppleScript用語辞書から「execute」コマンドが削除された
◯住所録(Contacts.app)でプラグインScriptを利用できる機能が削除された(AppleScript用語辞書には残されているが機能しない)

macOS 10.15(AppleScript v2.7)
◯Remote AppleEvents(eppc)経由で他のマシン上のアプリケーションと通信する場合に、同一ユーザー名であることが必要になった。この制限を解除するためには、「defaults write /Library/Preferences/com.apple.AEServer RestrictAccessToUserSession -bool false」の操作をターミナル上で行う必要がある
◯AppleScript専用補助ツール「Image Events」がデフォルト状態ではファイルに一切アクセスできない状態で出荷される(セキュリティ設定によりアクセス可能に。その後のOSバージョンでも修正されない)

◯Cocoa呼び出しを行なった際の実行速度が大幅に低下(→macOS 12で修正)

macOS 11.0(AppleScript v2.7)
◯ARM(Apple Silicon)対応。AppleScript Appletなど実行アプリケーションがすべてApple Silicon/Intel 64のUniversal Binary化
◯Automator Action用に盲腸のように残っていたAppleScript Studioランタイムの廃止が明言される

◯AppleScriptアプレット中にproperty値が保存されなくなった。property値を保存する場合にはUser Defaultsに書き込む必要がある
◯ファイル共有のプロトコルに「afp://」が利用できなくなった。「smb://」に一本化

◯AppleScript書類(.scpt)アイコンが単なるプレーンテキストのものに変わっている(バグなのか本気なのかは不明。macOS 11.x台では修正されない見込み)

◯System Eventsの初回操作時に明示的に「launch」コマンドの実行が必要に(自動起動しない)

◯macOS 11.5において、NSString’s stringWithFormat:メソッドをAppleScriptから呼び出してもクラッシュしなくなった(macOS 11.0〜11.4の間はクラッシュ発生)

◯これまでに書かれたCocoa Scriptingのプログラムで「書き方が間違っているが、許容されてきた」書き方がエラーもしくはクラッシュを引き起こすようになった
×AppleScriptがM1 CPUの高効率コア「Icestorm」で実行されてしまうため、Cocoa Scripting時にIntel CPUにくらべて10分の1〜70分の1程度にパフォーマンス低下(→macOS 12で修正)

macOS 12.0(AppleScript v2.8)
◯ショートカット.appが標準搭載される。ショートカットにAppleScript実行アクションが搭載され、ショートカット中からAppleScript(Cocoa Scripting機能を含む)の呼び出しが可能に
◯ショートカット.appが起動中でなくてもショートカットを実行できるShortcuts Eventsが標準搭載される

◯Piyomaru Softwareの働きかけにより、macOS 10.15で生じたCocoa Scriptingの速度低下、およびmacOS 11で生じたApple Silicon MacのCocoa Scripting速度低下が是正される。Cocoa呼び出し時のAppleScriptの大幅な処理速度向上
◯macOS 12.3、悪意を持って作られたAppleScriptバイナリ(アプレット)のセキュリティ上の問題(CVE-2022-22626)を解消
◯macOS 12.1〜2の間、日本語環境限定で、NSDataDetectorで自然言語テキストから「電話番号」を抽出する機能が動作していなかった(12.3で修正)
◯macOS 12.3、スクリプトエディタのコンテクストメニュー(スクリプトアシスタント表示用)にバグ。項目が複数回表示される(macOS 13で修正)

◯macOS 12.3.1、セキュリティ強化にともなう不具合(Finder上のselectionをオープンすると、ファイルを作成したアプリケーションが起動されないエラーなど)を修正

◯macOS 12.4、AppleScriptアプレットで、入力検証を強化して、領域外読み込みの脆弱性に対処(CVE-2022-26697)。アプリケーションが予期せず終了したり、プロセスメモリが漏洩したりする可能性がある脆弱性に対し、配列境界チェック機能を改善して対処(CVE-2022-26698)。

macOS 13.0(AppleScript v2.8)
◯「システム環境設定」が「システム設定」に。AppleScriptで各種Paneを表示させる機能が動作しなくなった
→ macOS 13.5あたりでmacOS 14同様の機能を実装、機能復旧
◯「Font Book」がAppleScript非対応に
◯「アプリケーションのAppleScript用語辞書をブラウズする方法が、「アプリケーションのアイコンをスクリプトエディタにドラッグ&ドロップする」ものから「アプリケーションのアイコンをスクリプトエディタの「ライブラリ」ウインドウにドラッグ&ドロップもしくは「+」ボタンのクリックで追加するやりかたに変更される(macOS 14で復旧)
×Text To Speech(テキスト読み上げ音声)のIDがすべて変更になる。日本語環境用にSiriのO-renとHattoriが搭載されるが、sayコマンドで使えるようにはなっていない

×AppleScriptからMail.appにメール作成+送信を行うと1通作成ごとに生成されたプロセスがメモリ上から消えず、メモリを食い潰してマシンの処理速度自体が遅くなる
×スクリプトエディタ上で「Cocoa-AppleScript Applet」のテンプレートから作成したアプレットが動作しない問題が発生
◯テキスト読み上げキャラクタのうち一部のキャラクタで名前がローカライズされてしまい、sayコマンドで指定できないバグが発生(日本語環境限定バグ)

macOS 14.0(AppleScript v2.8)
◯「システム設定」のAppleScriptで各種Paneを表示させる機能が復旧
◯Safari v17で隠し命令「show credit card settings」が追加される。do javascript命令の実行許可のための「Apple EventからのJavaScriptを許可」の場所が設定>デベロッパに変更される
◯ミュージック.appでplaylistの「loved」属性が「favorited」に変更される
◯連絡先.appの廃止済みプラグイン機能用の「Address Book Rollover Suite」の属性がhiddenに変更される

◯スクリプトエディタのコンテクストメニュー・スクリプトに、絵文字つきのファイル/フォルダのコンテンツを入れると、コンテクストメニューに「項目が重複して表示される」不具合が修正される
◯「アプリケーションのAppleScript用語辞書をブラウズする方法「アプリケーションのアイコンをスクリプトエディタにドラッグ&ドロップ」が復旧する
×スクリプトエディタ上で「Cocoa-AppleScript Applet」のテンプレートから作成したアプレットが動作しない問題が継続中
×スクリプトメニューから呼び出したAppleScriptの実行速度が、スクリプトエディタ上よりも6倍以上遅くなる現象が発生
×半角スペース文字列の数値への型変換で処理系自体がクラッシュするバグ(14.0 Sonoma Crasher→ 15.0で修正)
×テキスト読み上げキャラクタのうち一部のキャラクタで名前がローカライズされてしまい、sayコマンドで指定できないバグが継続中(日本語環境限定バグ)

macOS 15.0(AppleScript v2.8)
◯Safariのtabにpidプロパティが追加される
◯AppleScriptドロップレットにドロップしたファイル/フォルダが、xattr「com.apple.quarantine」の影響とGatekeeperの兼ね合いですべてが受け渡されない現象がmcOS 10.12から継続して発生していたが、これが改められ、ドロップされたファイル/フォルダの欠損が発生しなくなった。なお、この変更がmacOS 13.xおよび14.xにもさかのぼって適用された
◯半角スペース文字列の数値への型変換で処理系自体がクラッシュするバグ(14.0, Sonoma Crasher)が解消
×スクリプトエディタ上で「Cocoa-AppleScript Applet」のテンプレートから作成したアプレットが動作しない問題が継続中

×スクリプトメニューから呼び出したAppleScriptの実行速度が、スクリプトエディタ上よりも6倍以上遅くなる現象が継続中
×テキスト読み上げキャラクタのうち一部のキャラクタで名前がローカライズされてしまい、sayコマンドで指定できないバグが継続中(日本語環境限定バグ)

macOS 26.0(AppleScript v2.8)
◯スクリプトエディタ上で「Cocoa-AppleScript Applet」のテンプレートから作成したアプレットがApple Silicon Mac上で動作しない問題が解決される(??????)
◯スクリプトエディタ上でコンパイル(構文確認)を行うと、最終行が見栄なくなる門外が解決される

◯スクリプトエディタがDark Modeに対応
◯スクリプトエディタのアイコンがmacOS 26風に変更される

Posted in History | Tagged 26.0savvy | Leave a comment

Developer CD November 1993

Posted on 7月 6, 2024 by Takaaki Naganoya

たまたま、当時の職場にあったCDを入手して(いらなかったのをもらってきた)、長年机のコヤシになっていたものを再発掘。

このCD自体はHFSフォーマットだったので、macOS 10.7搭載のオリジナルMacBook Airでマウントして中身を見ました。

New System Software Extensionフォルダに、AppleScriptが入っています。この数年前のCDから見ていましたが、この時点で初登場というわけではなく、2・3年前からずっと収録されていました。

目下、当時のSystem 7.xの環境は手元にないので(エミュレータぐらい?)これをインストールすることはできませんが、いろいろ入っていることがわかります。

このScripting Additionsフォルダにコマンドが入っています。当時はコマンド1つに1つのScripting Additionsが存在していたようなので、いまでは標準搭載のコマンドが別になっていました。

これだけでどうやってScriptを書いていいのかわからないぐらい素朴な命令群。Hypercardで書いたプログラムをScripting Additionsに変換できたようなので、割とHypercard由来のScripting Additionsが存在していました。

Posted in History | Leave a comment

AppleScript Studioの歴史

Posted on 5月 13, 2020 by Takaaki Naganoya

2002年に発表されたAppleScript Studioは、MacのGUIアプリケーションをXcode(当時はProject Builder+Interface Builder)上でAppleScriptを記述することで開発できるようにするという、画期的な存在でした。Classic MacOS上でApple純正のGUIベースのAppleScriptアプリケーション開発環境が用意されてこなかった状況と比べると大きな進歩といえました。

ただ、AppleScript Studioについては、当初は大規模なプログラム開発のノウハウが蓄積されておらず、いろいろ苦労させられました(プログラムを1行足すと構文確認できなくなる/動かなくなるなど、いろいろ神経がすり減る苦労を)。

のちに、AppleScriptの分割化や、分割したScriptを読み込んだScript Objectのメモリ上からのパージを明示的に行うことで安定性を格段に向上させるというノウハウが編み出され、Mac OS X 10.5の時代にはかなり安定してユーティリティ的なGUIアプリケーションを手軽に開発できていました。

AppleScript Studioは、旧NeXT系のProject Builder+Interface Builder(現・Xcode)にFaceSpan互換のAppleScript用語辞書を用意したものだと分析しています。

FaceSpan自体が1994年のAppleScript登場に合わせてリリースされているため、おそらくApple側からの技術支援があったものと想像していますが、関係者に確認したわけではないので正確な話はわかりません。

2008年ごろにLate Night SoftwareがFaceSpanを買収し、自社製品としてリリースするという動きがありました。当時、AppleScript Studioに対して「Xcodeの一部の機能しか利用できないのに、マスターするのにXcodeの機能の多くを知る必要がある。関係のない機能だらけの開発環境を使うのが苦痛」といった否定的な意見がユーザーの間にあり、それを汲み取ったものと見ています。

ここで、AppleがAppleScript Studioを廃止するという動きはキャッチできなかったのでしょう。もし、AppleScript Studioがもう少し継続されていたら、AppleScript Studioと文法的にほとんど同じ互換環境で、かつXcodeを使わずにGUIアプリケーションが作れる状況が作り出せたのでしょう(安定性がイマイチでしたが悪くない印象でした)。

AppleScript Studioについては、macOS最新バージョンであるmacOS 10.15においても、

tell application "System Events"
	set sRes to system info
end tell

とすると、返ってくる情報の中に「AppleScript Studio version:”1.5.3″」とあり、AppleScript Studioで作られたアプリケーションであっても64bitバイナリであれば実行できます。これは主にAutomator Actionのサポートのために残されている機能だと思っています。

# macOS 11.0でも「AppleScript Studio version:”1.5.3″」が返ってきます(Intel Mac)

現在のXcode上でGUIアプリケーションを作成するAppleScriptObjCとAppleScript Studioを比べてみると、双方ともに長所・短所があります。ドキュメントと最低限度のサンプルコードが用意されており、デバッグが(10.5上では)まともに動作していたという点ではAppleScript Studioも悪くなかったと思います。

その反面、箱庭環境が箱庭すぎて、Mac OS X側にあらたなGUI部品が追加されてもサポートされず、AppleScript Studioで作るアプリケーションの「見た目」がけっこう残念になってしまうという欠点もありました。


▲いかにもAppleScript Studioで作成したツール。みすぼらしくはないものの、派手さは一切ない。当然のことながらDarkMode非対応

当初サポートされていなかった機能が追加されたという話も聞きません(Xcode 2.5から3.2.6までAppleScript用語辞書の内容にほぼ変更なし)。さらに、AppleScript Studioランタイムの癖が強くて、通常のAppleScriptとは挙動が大幅に違う(class ofでクラスを求められないとか、Finder上のselectionを取得できないとか)といった難点も解消されませんでした。


▲AppleScriptObjCによるアプリケーション例(Kamenoko)。Toolbarを導入しており、Dark Modeに対応している

AppleScriptObjCについては、ドキュメント類はどうせ今のAppleには作れないので期待できませんが、エディタ上での構文色分けのサポートと、デバッグ機能がないのはきつい感じがします。アプリケーション開発時、デバッグ機能が弱い(logコマンドで出力するとか、ファイル書き出しして分析するしかない)というのは割と困りものです。

Posted in History | Leave a comment

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

Posted on 1月 23, 2020 by Takaaki Naganoya

Shane Stanleyにチャットで教えてもらっていました(お食事前に申し訳ない!) これは-1日になるほうが暦自体の仕様的に正しいようです。1888/1/1以前には「子午線」とかタイムゾーン(子午線ごとの標準時)という考え方自体が存在せず、1888/1/1に運用を開始した「日本標準時」に合わせてGMT +9になったため、この1888/1/1から前の日付はさかのぼって-1日される、と。

# 子午線のある現在の日付から子午線という概念がまだ存在しない日付をさかのぼった結果、日付が1日ズレた、と

現在施行されている「グレゴリオ暦」は、日本においても1873年(明治3年)に導入されました。この件については、よく知られていることです(自分の記憶があいまいで明治1年かと思っていました)。

ただ、この「グレゴリオ暦@Japan Ver.1」では子午線に関する決まりがなく、アメリカなどの国土が広い国では列車の時刻表などで問題になっていました。

その後、1884/10/11の国際子午線会議における子午線の制定を受け、日本標準時の運用が1888/1/1に開始になりました。この、1888/1/1の日本標準時の運用前にはタイムゾーンという考え方自体がなかったわけです。この、「グレゴリオ暦@Japan Ver.2」ともいえる暦法が1888/1/1に導入されたことにともない、時刻の変更とともに日付が変わったということである、と。

当時は子午線という概念そのものがなく、日本標準時が運用開始になったのが1888/1/1だということでようやく納得できました。

Classic Mac OSやMac OS X 10.6まではカレンダーの計算にこうした歴史的な経緯が加味されておらず、途中でポリシーが変更になったというのが真相のようです。累積誤差で日付が変わったんじゃなかったんですね、、、、

1582/10/15
ローマにてグレゴリオ暦 制定

1873/1/1(明治3年)
日本にてグレゴリオ暦に改暦。ただし、子午線の運用は各国間で規定がなかった。

1884/10/11
国際子午線会議

1888/1/1
日本標準時 運用開始

[おまけ] Cocoa自体のグレゴリオ暦の開始日を実際に取得してみました。

AppleScript名:gregorianStartDate.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2020/01/23
—
–  Copyright © 2020 Piyomaru Software, All Rights Reserved
—

use AppleScript version "2.4" — Yosemite (10.10) or later
use framework "Foundation"
use scripting additions

set sDate to current application’s NSDateFormatter’s alloc()’s init()’s gregorianStartDate()
–> (NSDate) "1582-10-15 00:00:00 +0000"

set asDate to sDate as date
–> date "1582年10月15日 金曜日 9:18:59"

★Click Here to Open This Script 

Posted in Calendar History | 2 Comments

1867/1/1〜1887/12/31までの範囲のdateオブジェクトからyear, month, dayを取り出すと-1日される?

Posted on 1月 22, 2020 by Takaaki Naganoya

過去のdateオブジェクトを検証する機会があり(明治の元号計算が合っていない件)、いろいろ検証していたところ、1867/1/1から1887/12/1までのdateオブジェクトからyear,month,dayを個別に取り出すと、dayが-1されるという現象が観測されました。

→ 本現象の発生メカニズムはこちら

西暦から和暦に変換する処理で、明治の年が合わないという(自分のプログラム由来の)問題を検討していました。この問題の洗い出しのため、「日」単位で順次和暦変換していたら、そのちょうど(明治→大正など)改元の境目の日付で(原因不明の)計算ミスが起こっていました。

1868/1/25からは明治時代、という判定は行えても、その1868/1/25というdateオブジェクトからYear, Month, Dayの各要素を取り出すと1868, 1, 24という結果に。

以前から「大昔の日付を扱うと問題がありそう」だとは思っていましたが、このように具体的な現象として観測したのは(個人的には)初めてでした(単に覚えていないだけかも)。

確認したのはmacOS 10.14.6とmacOS 10.15.3beta、macOS 10.13.6上ですが、どれも同じ結果になるようです。

# 追試で、OS X 10.7.5でも試してみたところ、同じ結果になりました
# OS X 10.6.8では確認されませんでした

未来のdateオブジェクトは2050年ぐらいまでチェックしてみたものの、問題はありませんでした。

過去に遡ってうるう日が設定されたとかいう話なんでしょうか? そういう話は聞いたことがないのですが、、、

日本においては太陽暦(グレゴリオ暦)を導入したのが明治元年(1868/1/25〜)なので、それ以前の日付をグレゴリオ歴で求めてもいまひとつ実用性がない(?) ともいえますが、少なくとも1868年から1887年までの間のdateオブジェクトから各種の値の取り出しが期待どおりに行われないのは問題といえるでしょう。

多分、もっと昔の日付も同様にdateオブジェクトからの値取り出しを行うと問題が出ると思われますが、前述のような理由からそこまでの日付を計算させることもないだろうかと。

# ふだん使っているgetMLenInternationalに問題があるのかと考えて、昔使っていたgetMLenを引っ張り出してきましたが、こちらはずいぶんと記法がお可愛らしい感じで、、、、

ただ、この件は気がつかなかっただけで、ずいぶん昔から存在している話なのかも????


▲Classic Mac OS 8.6では確認できませんでした(SheepShaver上で動作)この時代にはmonthをas numberで数値にcastできませんでした

AppleScript名:dateTest.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2020/01/22
—
–  Copyright © 2020 Piyomaru Software, All Rights Reserved
—

use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

script spd
  property mList : {}
end script

set (mList of spd) to {}
repeat with y from 1867 to 1888
  repeat with m from 1 to 12
    set aLen to getMlen(y, m) of me
    
repeat with d from 1 to aLen
      set aTmpStr to (y as string) & "/" & (m as string) & "/" & (d as string)
      
set aTmpD to date aTmpStr
      
      
set tmpY to year of aTmpD
      
set tmpM to month of aTmpD as number
      
set tmpD to day of aTmpD
      
      
if (tmpY is not equal to y) or (tmpM is not equal to m) or (tmpD is not equal to d) then
        set the end of (mList of spd) to {aTmpD, tmpY, tmpM, tmpD}
      end if
    end repeat
  end repeat
end repeat

return (mList of spd)
–> {{date "1867年1月1日 火曜日 0:00:00", 1866, 12, 31}, …… {date "1887年12月31日 土曜日 0:00:00", 1887, 12, 30}}

–現在のカレンダーで指定年月の日数を返す
on getMlenInternational(aYear as integer, aMonth as integer)
  set theNSCalendar to current application’s NSCalendar’s currentCalendar() — do *not* use initWithCalendarIdentifier:
  
set theDate to theNSCalendar’s dateWithEra:1 |year|:aYear |month|:aMonth |day|:1 hour:0 minute:0 |second|:0 nanosecond:0
  
set theResult to theNSCalendar’s rangeOfUnit:(current application’s NSDayCalendarUnit) inUnit:(current application’s NSMonthCalendarUnit) forDate:theDate
  
return |length| of theResult
end getMlenInternational

–指定年の指定月の日数を求める
on getMlen(aYear, aMonth)
  set aYear to aYear as number
  
set aMonth to aMonth as number
  
  
set aDat to (aYear as text) & "/" & (aMonth as text) & "/1"
  
if aMonth is 12 then
    set eDat to ((aYear + 1) as text) & "/" & (1 as text) & "/1"
  else
    set eDat to ((aYear as text) & "/" & (aMonth + 1) as text) & "/1"
  end if
  
  
set eDat to date eDat
  
set eDat to eDat – 1
  
  
set mLen to day of eDat
  
return mLen
end getMlen

★Click Here to Open This Script 

Posted in Calendar History | Tagged 10.13savvy 10.14savvy 10.15savvy | 1 Comment

path to temporary items

Posted on 1月 6, 2020 by Takaaki Naganoya

AppleScript users ML上で2016/10/16〜18に行われていた議論の内容を自分でも再確認しました(Thanks Yvan!)。一時フォルダの場所を求める「path to temporary items」の値が、macOS 10.12から変更になっています。


▲AppleScript Users ML上の議論のフロー(Mail Flow Visualizerによりバッチ出力。つまり、Mail.app上で出力フローを選択してAppleScriptでフロー図出力しています)

AppleScript標準装備の「path to」コマンドは、Classic MacOS環境からMac OS X環境に移行した後に重要度が上がったコマンドです。OS側が用意している特別な意味を持つフォルダの場所を返してくれます。

とくに、(いまさらですが)Mac OS X環境はマルチユーザー環境なので、とくにPicturesとかDocumentsとかDesktopとかの特別なフォルダのパスを求める機能は基礎的ではあるものの、とても重要です。このあたりをめんどくさがってなんでもかんでも固定パスで書きたがる人を見かけたことがありますが、その人が書いたプログラムは他のユーザー環境で動かなくて苦労していました(本人ではなく周囲の人々が)。

AdobeのCS/CCアプリケーションのサンプルAppleScriptでも固定パスで書かれたものを多数見かけましたが、あれはなんだったんでしょう。

ドメイン

もともと、path toコマンドにより求められる各種パスには、

system domain:/System 
network domain:/Network
user domain:~

などのほか、

local domain:/Library
Classic domain: Classic Mac OSのシステムフォルダ(Classic環境をサポートするOS&ハードウェアの組み合わせ上でのみ有効)

などの「ドメイン」が指定できることになっていました。system domainはOSのSystemが利用、User domainはユーザーのホームフォルダ以下。network domainはmacOSのNetBootが廃止/他の機能への移行対象となっている(すでに、iMac ProではNetBoot非サポート)ほか、そのような環境下にないと有意な結果が得られません。

作業用一時フォルダtemporary items

ドメインの区分けが存在するものの、これらの区分のうちClassic domainははるかかなた昔に消滅、network domainも使ったことのあるユーザーは稀(まれ)でしょう。

そんな中、作業用の一時フォルダの場所を求める「path to temporary items」の仕様がmacOS 10.12で変更になっていました。

テンポラリフォルダの特性ゆえに、細かいディレクトリ名はユーザー環境ごと、実行時ごとに微妙に異なりますが(赤字部分が変化する部分)、上の図では(↑)どのあたりに作られるのかという点に着目して色分けしてみました。

macOS 10.12以降では、user domainでもsystem domainでも同じような場所が指定されることになることがわかります。

ちなみに、Cocoaの機能を用いて求められる一時フォルダはまた別の場所が示されています。

use framework "Foundation"

current application’s NSTemporaryDirectory() as text
–> "/var/folders/h4/jfhlwst88xl9z0001s7k9vk00000gr/T/"

★Click Here to Open This Script 

Posted in File path History | Tagged 10.12savvy 10.13savvy 10.14savvy 10.15savvy | Leave a comment

Mojaveに合わせて「Mac OS XのバージョンとAppleScriptの動向の年表」を改定

Posted on 10月 4, 2018 by Takaaki Naganoya

電子書籍「AppleScript最新10大技術」に掲載の「Mac OS X/OS X/macOSのバージョンとAppleScriptの動向」の表を現在最新のmacOS 10.14に合わせて改定してみました。

macOS 10.12を歴史的な観点から再評価し、「セキュリティ至上主義期」のはじまりと位置づけた点が大きく異なります。

同バージョンでAppleScriptドロップレットへのファイル受け渡しがファイルの拡張属性(Xattr)「com.apple.quarantine」によって制御されるようになり、受け渡しの順番が変わったり、ユーザーの手によって確認されていないファイルはドロップレット処理時に無視されるなど、機能不全が目につくようになりました(10.13はOS自体が機能不全の塊なので評価に値しません)。

macOS 10.12自体にはその解消を行うための機能が用意されていないことから、この時期から「セキュリティを向上させることが最優先、既存機能に不具合が出ても整合性を維持するつもりがない」という現在のティム・クックCEO体制下における「動かないコンピュータ至上主義」(セキュリティ的には動かないコンピュータが最高だぜ!)ともいえる方針に沿った改変が行われていることを感じます。

ただし、最新のmacOS 10.14においてはシステム環境設定の「セキュリティ&プライバシー>オートメーション」の項目で、ホームディレクトリ以下のファイルにアクセスする権限を与える「フルディスクアクセス」の項目、およびアプリケーション間通信を許可する「オートメーション」の項目によって明示的に許可を行うようになった点は前進と言えるのかもしれません。

AppleScriptアプレットにおいてもこれらの制限機能による影響を受けるようになったわけですが、CodeSignすればいちいち「フルディスクアクセス」「オートメーション」項目の認証を必要としないため(CodeSignしても初回のみ聞かれる)、プロのAppleScript開発者はいままでどおりCodeSignすることで問題を回避できるはずです。

未確認ではあるものの、Terminal.appもMojaveの「フルディスクアクセス」管理下にあり、デフォルト状態ではホームディレクトリ下のファイルのcatやlsなども行えないとのこと(手動で登録すれば操作できるようになるとのこと)で、do shell scriptコマンドがどのような扱いになっているかが問題です。

なお、AppleはまだAppleScript Release Notesの「10.14 Changes」を公開しておらず、未完の作業が存在していることをうかがわせる(macOS 10.14.0はRelease版といいつつもGMビルドを公開しなかったなど、明らかにBetaレベルの仕上がり)状態です。
→ 後日、リリースノートが「macOS Mojave 10.14 Release Notes」に統合されていることが明らかになりました

Mac OS X/OS X/macOSのバージョンとAppleScriptの動向

OSバージョン 内容
10.1〜10.2 Classic Mac OSからの移行期(Classic Mac OSからMac OS Xへの移行)
10.3〜10.4 移行混乱期(Classic Mac OSからMac OS X、CarbonからCocoa、PowerPCからIntel x32)
10.5〜10.6 安定期(Mac OS Xとしての当初の目標レベルに到達?)
10.7〜10.8 制限化、64ビット(Intel x64)移行、iOS連携強化期。Carbon系の32ビット補助アプリケーションの切り捨て
10.9〜10.11 次世代準備期。「次の10年を担う機能」の実装開始。過去のバージョンとの互換性よりも、機能強化に舵をきった?
10.12〜10.14 セキュリティ至上主義期。別名、「アプレット迫害期」。セキュリティ向上のためなら、OS上の各種機能の不具合が起こることもやむなし、という方向性が強まった。アプレットやドロップレットにセキュリティ上の制限がかかり、解決する方法が提供されるまでに時間がかかるようになった。10.14でシステム環境設定の「セキュリティとプライバシー>オートメーション」項目に、「フルディスクアクセス」「オートメーション」の2項目を新設してアプレットへの制御権限のコントロールを行うようになった。OSAXの事実上の廃止。
10.15 32bitアプリケーションの起動禁止
11.0(10.16) iOSアプリケーションとの混在。ASからの操作が可能なものも?
Posted in History | Tagged 10.14savvy | Leave a comment

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

Google Search

Popular posts

  • Numbersで選択範囲のセルの前後の空白を削除
  • macOS 15でも変化したText to Speech環境
  • macOS 26, Tahoe
  • AppleScript入門③AppleScriptを使った「自動化」とは?
  • Script Debuggerの開発と販売が2025年に終了
  • KagiのWebブラウザ、Orion
  • 【続報】macOS 15.5で特定ファイル名パターンのfileをaliasにcastすると100%クラッシュするバグ
  • macOS 14で変更になったOSバージョン取得APIの返り値
  • AppleScript入門① AppleScriptってなんだろう?
  • macOS 15 リモートApple Eventsにバグ?
  • NSObjectのクラス名を取得 v2.1
  • macOS 15:スクリプトエディタのAppleScript用語辞書を確認できない
  • 2024年に書いた価値あるAppleScript
  • 有害ではなくなっていたSpaces
  • Pixelmator Proがv3.6.8でHDR画像をサポート
  • Xcode上のAppleScriptObjCのプログラムから、Xcodeのログ欄へのメッセージ出力を実行
  • (確認中)AppleScript Dropletのバグっぽい動作が解消?
  • AVSpeechSynthesizerで読み上げテスト
  • AppleScript Dropletのバグっぽい動作が「復活」(macOS 15.5β)
  • 指定フォルダ以下の画像のMD5チェックサムを求めて、重複しているものをピックアップ

Tags

10.11savvy (1101) 10.12savvy (1242) 10.13savvy (1391) 10.14savvy (587) 10.15savvy (438) 11.0savvy (283) 12.0savvy (212) 13.0savvy (201) 14.0savvy (156) 15.0savvy (145) CotEditor (66) Finder (52) Keynote (119) NSAlert (61) NSArray (51) NSBitmapImageRep (20) NSBundle (20) NSButton (34) NSColor (53) NSDictionary (28) NSFileManager (23) NSFont (21) NSImage (41) NSJSONSerialization (21) NSMutableArray (63) NSMutableDictionary (22) NSPredicate (36) NSRunningApplication (56) NSScreen (30) NSScrollView (22) NSString (119) NSURL (98) NSURLRequest (23) NSUTF8StringEncoding (30) NSView (33) NSWorkspace (20) Numbers (76) Pages (55) Pixelmator Pro (20) Safari (44) Script Editor (27) WKUserContentController (21) WKUserScript (20) WKWebView (23) WKWebViewConfiguration (22)

カテゴリー

  • 2D Bin Packing
  • 3D
  • AirDrop
  • AirPlay
  • Animation
  • AppleScript Application on Xcode
  • Beginner
  • Benchmark
  • beta
  • Bluetooth
  • Books
  • boolean
  • bounds
  • Bug
  • Calendar
  • call by reference
  • check sum
  • Clipboard
  • Cocoa-AppleScript Applet
  • Code Sign
  • Color
  • Custom Class
  • date
  • dialog
  • diff
  • drive
  • Droplet
  • exif
  • file
  • File path
  • filter
  • folder
  • Font
  • Font
  • GAME
  • geolocation
  • GUI
  • GUI Scripting
  • Hex
  • History
  • How To
  • iCloud
  • Icon
  • Image
  • Input Method
  • Internet
  • iOS App
  • JavaScript
  • JSON
  • JXA
  • Keychain
  • Keychain
  • Language
  • Library
  • list
  • Locale
  • Localize
  • Machine Learning
  • Map
  • Markdown
  • Menu
  • Metadata
  • MIDI
  • MIME
  • Natural Language Processing
  • Network
  • news
  • Noification
  • Notarization
  • Number
  • Object control
  • OCR
  • OSA
  • parallel processing
  • PDF
  • Peripheral
  • process
  • PRODUCTS
  • QR Code
  • Raw AppleEvent Code
  • Record
  • rectangle
  • recursive call
  • regexp
  • Release
  • Remote Control
  • Require Control-Command-R to run
  • REST API
  • Review
  • RTF
  • Sandbox
  • Screen Saver
  • Script Libraries
  • Scripting Additions
  • sdef
  • search
  • Security
  • selection
  • shell script
  • Shortcuts Workflow
  • 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)
  • 未分類

アーカイブ

  • 2025年9月
  • 2025年8月
  • 2025年7月
  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2024年2月
  • 2024年1月
  • 2023年12月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年2月
  • 2023年1月
  • 2022年12月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 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

Forum Posts

  • 人気のトピック
  • 返信がないトピック

メタ情報

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