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

可変次元のベクトルに対応したコサイン類似度計算

Posted on 11月 23, 2023 by Takaaki Naganoya

ChatGPTに書かせたAppleScriptを微修正したものです。ベクトルの内積、外積の計算を経てコサイン類似度計算のAppleScriptを書かせました。

もともとは、ChatGPTのAPIを利用して自然言語テキストをベクトル化し、それらの類似度を計算させるための準備で用意しました。自分が試したときには、ChatGPTのREST APIは1536次元のベクトルを返してきました。残念ながら、いま試してみると(全然REST API呼び出しをしていないのに)Quota Exceedのエラーが出てしまって目的の処理はできませんでした。

このあたり、実際にChatGPTのコンソールから利用履歴を確認してみても、全然呼び出していないことが確認できたので、自分の記憶違いではありません。

もともと、日本語テキストを複数の機械翻訳APIを利用して英訳し、再度日本語訳したのちに文章をベクトル化。これらの複数の機械翻訳APIの結果を比較して、もともとの日本語の文章と類似度が高いものを「正確に英訳された文章」として採用してみるといいんじゃないかと思っていました。翻訳文の質を疑似的に評価してみようと思ったわけです。

ChatGPTに出力させたAppleScriptは、「間違ってはいないんだけど、正しくないし、微妙にムカつく(resultを使って計算したりする)」内容で、よくわかっている人間にとっては簡単に修正できるものですが、基礎がわかっていないとどこが間違っているか指摘しにくいし、そもそも間違っているかどうかも指摘しにくいので……より正確な知識が要求されます。

AppleScript名:可変次元のベクトルに対応したコサイン類似度計算.scpt
— ベクトルの例
set vectorA to {1, 2, 3, 4}
set vectorB to {4, 5, 6, 7}

— コサイン類似度を計算
set similarityResult to cosineSimilarity(vectorA, vectorB)

— 結果を表示
return similarityResult
–> 0.975900072949

— ベクトルのノルムを計算する関数
on vectorNorm(aVec)
  set sumSquares to 0
  
repeat with i from 1 to (count of aVec)
    set sumSquares to sumSquares + (item i of aVec) ^ 2
  end repeat
  
return (sumSquares) ^ 0.5
end vectorNorm

— ベクトルのコサイン類似度を計算する関数
on cosineSimilarity(vector1, vector2)
  set dimension1 to count of vector1
  
set dimension2 to count of vector2
  
  
if dimension1 = dimension2 then
    set dotProductResult to dotProduct(vector1, vector2)
    
set norm1 to vectorNorm(vector1)
    
set norm2 to vectorNorm(vector2)
    
set similarity to dotProductResult / (norm1 * norm2)
    
return similarity
  else
    error "ベクトルの次元数が一致していません。"
  end if
end cosineSimilarity

— ベクトルの内積を計算する関数
on dotProduct(vector1, vector2)
  set dimension1 to count of vector1
  
set dimension2 to count of vector2
  
  
if dimension1 = dimension2 then
    set sRes to 0
    
repeat with i from 1 to dimension1
      set sRes to sRes + ((item i of vector1) * (item i of vector2))
    end repeat
    
return sRes
  else
    error "ベクトルの次元数が一致していません。"
  end if
end dotProduct

★Click Here to Open This Script 

Posted in list Natural Language Processing | Tagged 13.0savvy 14.0savvy | Leave a comment

macOS 13 TTS環境の変化について

Posted on 11月 22, 2023 by Takaaki Naganoya

正確にいえばmacOS 12あたりから大幅に変わっていて、忙しさにかまけて詳細な調査は行なってこなかったのですが……必要に迫られていろいろ調べてみました(Piyomaru Context Menu Assistant関連で)。

変更点1:TTS Voiceから年齢(Age)という属性値が削除された

変更点2:TTS Voiceの名前(Name)という属性値がローカライズされて返るようになった

変更点3:AppleScriptのsayコマンドにTTS Voiceの名前(Name)を設定するとエラーになるものが多数出てきた

変更点4:TTS Voice低音質キャラクタと高音質キャラクタ(Premium、Enhanced)があった場合に、AppleScriptのsayコマンドで低音質キャラクタが指定されるようになった。高音質キャラクタ(Premium、Enhanced)を明示的に指定する方法はない(sayコマンドでは不可能。AVSpeechSynthesizerを呼び出して読み上げるのは可能)

変更点5:AppleScriptのsayコマンドでSiriボイスを指定できないが、システムのデフォルト読み上げ設定にSiri音声を指定していると、sayコマンドでTTSボイス無指定(システムのデフォルト設定ボイスを使用)でSiri音声で読み上げられる

変更点1は、ポリコレの一環なんでしょうか。別に機械音声なので「年齢を基準に処理するな」とかいう不満は誰も抱かないと思います。これを決定した責任者は、頭がおかしいです。

変更点2は、NameのほかにLocalizedNameとかいった属性値を持たせるべきだったんじゃないでしょうか。経験の足りないエンジニアがとりあえずやっつけで仕事をしてしまったように見えます。これを決めた責任者は頭がおかしいです。バカと言って差し支えないでしょう。

変更点3は、けっこう困ります。AppleScriptのデフォルトコマンドには、TTS Voiceキャラクタ名の一覧を取得する、といった命令が存在せず、なんとなく「システム環境設定に出てくる名前を指定して使ってね」といった無責任な状況になっていました。昔からあるTTS VoiceのうちBells、Hysterical、Organ、Princess、Trinoids、Whisperを指定してもエラーになります(OS内に存在しているのに)。これは、OSの内部が壊れているものと判断しています。いい加減にしてほしいです。

変更点4は、Apple社内がえらく混乱しているように見えます。ちゃんと状況を整理していないような、開発現場のカオスな状況しか感じません。エンジニアの人数はさほど増やしていないのに、OSの数を野放図に増やしすぎです。これは、そういう管理をしている管理職の頭がおかしいです。

変更点5は、おそらくApple側が意図していない動作だと思われますが、「いまだとsayコマンドでAppleScriptからSiriの音声が指定し放題」であるということです。sayコマンドでは音声の指定を行わないと、OSデフォルトの音声キャラクタが指定されます。このデフォルト音声をSiriの音声にしておいて、キャラクタ無指定でsayコマンドを実行すると、Siriの音声キャラクタで発声が行われます。

sayコマンドで指定できるということは、音声ファイルにレンダリング可能だということで、Appleがキャラクタ提供元とそういうライセンス契約をしているのであればよいのですが、バグによって意図しない使われ方をしてしまう可能性があるわけです。ただ、このような状況を作った責任はAppleにあるものであって、ユーザーにはありません。

–> Play TTS by Siri demo

追跡調査を行なってみたところ、shell commandの/usr/bin/sayは、これらの、AppleScriptのsayコマンドではエラーになるText To Speechキャラクタ「Bells」も問題なく指定できました。

Posted in Bug Text to Speech | Tagged 13.0savvy | Leave a comment

Piyomaru Softwareの電子書籍カタログを発行

Posted on 11月 20, 2023 by Takaaki Naganoya

Piyomaru Softwareの電子書籍カタログ(2024年冬版)を刊行しました(フリー配布)。PDF 100ページです。

数年前は「AppleScriptの書籍がぜんぜんない」と言われていましたが、いまでは「多すぎて選べない」と言われる状況に。いろいろな角度から、ぴったり合う本が選べることでしょう。

Posted in Books news | Leave a comment

日付変更通知

Posted on 11月 12, 2023 by Takaaki Naganoya

日付の変更を通知するAppleScriptです。

この手のScriptを組もうとしたら、一定間隔で日付(current date)を確認する ぐらいが安全な方法として考えられます。on idleハンドラを利用して、一定間隔でタイマ割り込みを利用するのが「定番」でしょう。ただ、そのためにはApplet形式で書き出して実行する必要があります。

最近のAppleScript実行環境は、ごく一部の例外をのぞいてCocoaの機能を呼び出せるので、Cocoaの機能でタイマー割り込みを行って、一定間隔で日付データを確認することもできます。こちらは、。一度実行すればメモリ上にオブジェクトが常駐するので、Script Editorの実行が停止していても、起動さえしていれば日付変更時に通知を受信できます。

タイマー割り込み以外の方法を調べてみたら、こんなSystem Notificationが利用できたので、まとめておきました。

本Scriptが機能するのは、「AppleScript最新リファレンス v2.8対応」で明記した「システム通知の受信が有効なAppleScript実行環境」のみです。

AppleScript名:日付変更通知.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2023/11/12
—
–  Copyright © 2023 Piyomaru Software, All Rights Reserved
—

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

set dOvs to current application’s NSNotificationCenter’s defaultCenter()
dOvs’s addObserver:me selector:"dateChanged:" |name|:(current application’s NSCalendarDayChangedNotification) object:(missing value)

on dateChanged:anObj
  display dialog "Update"
end dateChanged:

★Click Here to Open This Script 

Posted in Noification | Tagged 12.0savvy 13.0savvy 14.0savvy | Leave a comment

macOS 13.6.3beta登場。Cocoa-AppleScript Applet改修はなし

Posted on 11月 11, 2023 by Takaaki Naganoya

macOS 13.6.3betaが出てきました。通常のmacOSでは、マイナーアップデートが.6台で終了することが多く、.7台まで行くことは「まれ」です。

誰もが目を覆いたくなるような大失敗だった「macOS 10.13」「macOS 10.15」(はじめてBlogに登場記事の掲載を拒否)といった、歴史に残る失敗OSバージョンでも、マイナーバージョン6ないし7で打ち止めです。

# 歴史に残る失敗バージョンのmacOSには、Apple Siliconで不具合出まくりのmacOS 11(永遠のβ)とか、Release後にバグが出まくるmacOS 12、13もあるわけで、いい加減にしていただきたいところです

早速、Cocoa-AppleScript Applet(通常環境ではない、Script Editorのテンプレートから作成する特殊なCocoa AppleScript環境)が動作するのかどうか確認してみたところ、相変わらず動きません。

Cocoa-AppleScript Appletが動かない問題が、macOS 13.x台で改修されるのかは、果てしなく怪しい雰囲気になってきました。

●Mac OS X v10.0 (Cheetah)~10.0.4 (2001年6月22日)
2001年3月24日

●Mac OS X v10.1 (Puma)~10.1.5 (2002年6月6日)
2001年9月25日

●Mac OS X v10.2 (Jaguar)~10.2.8 (2003年10月3日)
2002年8月24日

●Mac OS X v10.3 (Panther)~10.3.9 (2005年4月15日)
2003年10月24日

●Mac OS X v10.4 (Tiger)~10.4.11 (2007年11月14日)
2005年4月29日

●Mac OS X v10.5 (Leopard)~10.5.8 (2009年8月5日)
2007年10月26日

●Mac OS X v10.6 (Snow Leopard)~10.6.8 v1.1 (2011年7月25日)
2009年8月28日

●OS X v10.7 (Lion)~10.7.5 (2012年9月19日)
2011年7月20日

●OS X v10.8 (Mountain Lion)~10.8.5 (12F45) (2013年10月3日)
2012年7月25日

●OS X v10.9 (Mavericks)~10.9.5 (13F34) (2014年9月17日)
2013年10月22日

●OS X v10.10 (Yosemite)~10.10.5
2014年10月17日

●OS X v10.11 (El Capitan)~10.11.6
2015年09月31日

●macOS v10.12 (Sierra)~10.12.6
2016年10月21日

●macOS v10.13 (High Sierra)~10.13.6
2017年10月21日

●macOS v10.14 (Mojave)~10.14.6
2018年09月26日

●macOS v10.15 (Catalina)~10.15.7
2019年10月8日

●macOS v11 (Big Sur)~11.7.3
2020年11月13日

●macOS v12 (Monterey)~12.6.3
2021年10月22日

●macOS v13 (Ventura)~13.6.3?
2022年10月24日

●macOS v14 (Sonoma)~14.0
2023年09月27日

Posted in Bug Cocoa-AppleScript Applet news | Leave a comment

macOS 13.xでAS処理系に変更。組み込み実行環境でもライブラリ呼び出しをサポート?

Posted on 11月 8, 2023 by Takaaki Naganoya

macOS 13.xで、アプリケーション組み込み型のAppleScript実行環境(内蔵Script Menu装備)において、ホームディレクトリ下のAppleScriptライブラリを読み込んで実行することが「できなかった」ものを、「できる」ように改修されたようです。

実際に確認を行ったのは、macOS 13.xとCotEditorの組み合わせにおいてです。macOS 13の早期バージョンにおいてはライブラリ呼び出しが行えなかったものが、macOS 13.6.2においては呼び出せるように変わっています。なお、CotEditor側ではAppleScript実行機能まわりに改修を行なっていないことを確認しています。

CotEditorのAppleScript実行機能の実装はosascriptコマンドを呼び出すというものであり、手間をかけていない割に.scpt形式も.scptd形式も実行できるため、「妥当な実装」といったところでしょう。

自分は、各AppleScriptランタイム環境においてAppleScriptライブラリの読み込みと実行が行えるかをチェックしており、現時点でこれが行えない環境は……

・Automatorおよび書き出したアプレット(古すぎる。廃止予定)
・スクリプトエディタの内蔵コンテクストメニュー(セキュリティ的に無理そう)
・フォルダアクション(セキュリティ的に無理そう)
・Switch Control(パレットごと配布することを考えると、やらないほうが安心?)
・FileMaker Pro(構造が違いすぎて対応が難しい?)
・Hammerspoon(applescriptFromFile)(できてもおかしくないが……)

と認識しています。もしかしたら、Hammerspoonは再確認したら動くかもしれません。

なお、もっと巨大で深刻なバグ(AppleScriptドロップレットにドラッグ&ドロップしたファイルが正しく処理されない問題)はmacOS 10.12から相変わらず放置されています。

Posted in news | Tagged 13.0savvy 14.0savvy CotEditor | Leave a comment

指定のPages書類の言語設定を英語に

Posted on 11月 7, 2023 by Takaaki Naganoya

電子書籍「AppleScript The Latest Reference for v2.8」の翻訳作業を行うにあたって、同書を作成しているPagesを操作して、書類の言語設定を変更するAppleScriptを記述しました。なぜこれが必要になってくるかといえば、英単語のハイフネーション方式をネイティブの方式に合わせる必要があったためです。Pages自体のメニューなどのUIの表示は日本語のままで使い続けられる、というのがメリットでしょう。

本記事にScriptは掲載しておきますが、動作のためには同書に同梱しているライブラリ「dynamic Menu Clicker」が必要であり、ここではScriptの内容そのものは重要視していません。

一度作成して、テストデータで問題なく動作していたものの、数時間後に同じ書類に対して同じScriptを実行してみたら、エラー続出で動かなくなっていた、という怪奇現象が発生。この問題の解決に時間がかかりました。

このトラブルが発生した箇所はGUI Scriptingでウィンドウの上に表示されたシート、の上のポップアップボタンをクリックするという記述箇所です。

結論からいえば、Pages上で作業をしていたときにカラーピッカーのパレットを表示させたままにしたため、これがWindow 1とカウントされ、ドキュメントのウィンドウはWindow 2と認識されたため、問題が発生しました。

しかも、Pagesを後ろに持っていくとカラーピッカーのパレットは表示されなくなります。これで、何が原因なのかがわかりにくく、まさに怪奇現象のように振る舞いました。こんなのは久しぶりです。

結局、ウィンドウの名称をすべて取得して、カラーピッカーが表示されていたらドキュメント表示ウィンドウのインデックスを2にする、というやっつけで対処することになりました。

カラーピッカーはPagesが最前面のときには表示され、背面に回したときには表示されなくなります。この種類のフローティングパレットはPagesに4つ搭載されており、より広域に配布するScriptであればこれらをすべて表示させた状態を想定する必要があることでしょう。

ただし、本Scriptは自分1人が使うことを想定しているため、「パレットの非表示状態を確認したうえでScriptを実行」という申し送りをScript内に記述することで回避することにしました。ただ、なかなか原因がわからなかったので、英訳プロジェクトの第1日目にしてけっこう消耗しました。

AppleScript名:指定のPages書類の言語設定を英語に.scpt
—
–  Created by: Takaaki Naganoya
–  Created on: 2023/11/06
—
–  Copyright © 2023 Piyomaru Software, All Rights Reserved
—
use AppleScript version "2.8" — Monterey (12) or later
use framework "Foundation"
use scripting additions

use dClick : script "dynamicClicker"
use dLib : script "display drop dialog"

–注意:使用前にPagesのカラーパレットが表示されていないことを確認すること!!!!

set aMainMes to "Drop Pages Document"
set aSubMes to "Drag and Drop Pages files to Table (.pages)"
set aUTI to "com.apple.iwork.pages.sffpages"
set aRes to (display drop dialog aUTI main message aMainMes sub message aSubMes with initial folder "" OK button title "Execute")

activate application "Pages"

repeat with i in aRes
  set j to i as alias
  
  
tell application "Pages"
    open j
  end tell
  
  
chengeLangTo() of me
  
  
tell application "Pages"
    close front document with saving
  end tell
  
end repeat

on chengeLangTo()
  set appName to "Pages" –Application Name
  
set aList to {"ファイル", "詳細", "言語と地域…"} –Localized Menu Title Structure
  
set aRes to clickSpecifiedMenuElement(appName, aList) of dClick
  
delay 1
  
changeDocLanguageSetting("英語", "アメリカ合衆国") of me –"English" , "United States"
  
–changeDocLanguageSetting("日本語", "日本") of me
end chengeLangTo

on changeDocLanguageSetting(targLang, targCountry)
  activate application "Pages"
  
tell application "System Events"
    tell process "Pages"
      set winNum to 1
      
set nList to name of every window
      
if "テキストのカラー" is in nList then set winNum to 2 –Pagesのカラーパレットが表示状態の場合
      
      
tell window winNum
        tell sheet 1
          
          
click pop up button 1
          
tell pop up button 1
            tell menu 1
              click menu item targLang
            end tell
          end tell
          
          
click pop up button 2
          
tell pop up button 2
            tell menu 1
              click menu item targCountry
            end tell
          end tell
          
          
click button "OK"
        end tell
      end tell
    end tell
  end tell
end changeDocLanguageSetting

★Click Here to Open This Script 

Posted in GUI Scripting How To | Tagged 13.0savvy System Events | Leave a comment

「AppleScript最新リファレンスv2.8対応」の英訳プロジェクトを開始

Posted on 11月 5, 2023 by Takaaki Naganoya

電子書籍「AppleScript最新リファレンスv2.8対応」の英訳プロジェクトを開始しました。

同書は、1,000ページを超えるボリウムを持つ大規模書籍であるため、いきなりすべてを翻訳することはできません(間違いなく挫折します)。そこで、おおよそ250ページごとに分けた4分冊にする方向で作業を進めることにしました。

まずは、スクリプトエディタ内のローカリゼーションファイルから情報をClaris FileMaker Proに書き出して、検索できるようにしてみました。

実際にAppleScriptを書いてスクリプトエディタ内のloctableファイルを読み込んで言語ごとに分け(macOSは39言語にローカライズされている)、Claris FileMaker Proにデータを順次格納してみたら、1万レコードを超えてもまだ処理が続きそうだったので、強制停止。

enと「en_GB」、それと「ja」のローカライズ情報のみに限定して書き出しておいたほうがよさそうです。

あとは、macOS/AppleScriptの専門用語について日本語と英語の対訳データベースを作っておきたいところです。

AppleScript名:Script Editor内部のloctable情報を抽出.scpt
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

script spdB
  property urlList : {}
end script

property NSPredicate : a reference to current application’s NSPredicate
property NSArray : a reference to current application’s NSArray

–Script Editorのバンドル内のResourceから「.loctable」で終わるファイル名のパスを抽出
tell application "Finder"
  set defPath to application file id "com.apple.ScriptEditor2"
end tell

set defPath to (POSIX path of (defPath as alias)) & "Contents/Resources" –Cocoa流のPOSIX path
set fList to getFilesIn(defPath) of me

set anArray to NSArray’s arrayWithArray:fList
set aPred to NSPredicate’s predicateWithFormat:"SELF ENDSWITH ’.loctable’"
set locRes to (anArray’s filteredArrayUsingPredicate:aPred) as list

–.loctableファイルでループ
repeat with i in locRes
  set j to contents of i
  
set (urlList of spdB) to (my readPlistAt:(j))
  
set langKeys to ((urlList of spdB)’s allKeys()) as list
  
  
–Language Codeでループ
  
repeat with ii in langKeys
    set jj to contents of ii
    
set aLangDat to ((urlList of spdB)’s valueForKey:jj)
    
    
—plist(=loctable)のlabelでループ
    
set allLangKeys to (aLangDat’s allKeys()) as list
    
repeat with iii in allLangKeys
      set jjj to contents of iii
      
set aVal to (aLangDat’s valueForKey:(jjj))
      
copy {j, jj, jjj, aVal as string} to tmpList
      
createFMRec(tmpList) of me
    end repeat
  end repeat
  
end repeat

on createFMRec(aList)
  copy aList to {f1, f2, f3, f4}
  
  
tell application "FileMaker Pro"
    tell database 1
      set curRec to create new record
      
tell curRec
        set cell "FilePath" to f1
        
set cell "LangID" to f2
        
set cell "LabelName" to f3
        
set cell "stringVal" to f4
      end tell
    end tell
  end tell
end createFMRec

–Read Plist
on readPlistAt:thePath
  set thePath to current application’s NSString’s stringWithString:thePath
  
set thePath to thePath’s stringByExpandingTildeInPath()
  
set theDict to current application’s NSDictionary’s dictionaryWithContentsOfFile:thePath
  
return theDict
end readPlistAt:

–指定フォルダ内のファイルのフルパス一覧を返す
on getFilesIn(posixPath)
  script spd
    property allItems : {}
  end script
  
  
set allItems of spd to {}
  
  
— make URL
  
set theNSURL to current application’s |NSURL|’s fileURLWithPath:posixPath
  
  
— make file manager
  
set theNSFileManager to current application’s NSFileManager’s new()
  
  
— get URL enumerator
  
set theNSFileEnumerator to theNSFileManager’s enumeratorAtURL:theNSURL includingPropertiesForKeys:{current application’s NSURLIsDirectoryKey, current application’s NSURLIsPackageKey} options:((current application’s NSDirectoryEnumerationSkipsPackageDescendants) + (current application’s NSDirectoryEnumerationSkipsHiddenFiles as integer)) errorHandler:(missing value)
  
  
— get all items from enumerator
  
set (allItems of spd) to theNSFileEnumerator’s allObjects()
  
set theFolders to {} — to store folders
  
  
— loop through
  
repeat with i from 1 to count of (allItems of spd)
    — is it a directory?
    
set {theResult, isDirectory} to ((item i of (allItems of spd))’s getResourceValue:(reference) forKey:(current application’s NSURLIsDirectoryKey) |error|:(missing value))
    
if isDirectory as boolean = false then
      set {theResult, isPackage} to ((item i of (allItems of spd))’s getResourceValue:(reference) forKey:(current application’s NSURLIsPackageKey) |error|:(missing value))
      
      
— is it not a package?
      
if not isPackage as boolean then
        set end of theFolders to (item i of (allItems of spd))’s |path|() as string –«class furl»
      end if
    end if
  end repeat
  
  
return theFolders
end getFilesIn

★Click Here to Open This Script 

Posted in news | Leave a comment

display drop dialogライブラリをv1.5にアップデート

Posted on 11月 4, 2023 by Takaaki Naganoya

電子書籍「AppleScript最新リファレンスv2.8対応」の添付Scriptの中にこのAppleScriptライブラリを呼び出しているものがあったので、macOS 11以降のUIに応じて各種サイズを変更した「display drop dialog」のバージョン1.5をリリースしました。

複数のUTIを指定して、複数タイプの書類のドラッグ&ドロップを受け付けるようにしました。.scptと.scptdのドラッグ&ドロップを受け付けるとか。

また、本ライブラリではダイアログ上でのファイルの並び順もドラッグ&ドロップで変更できるため、複数のPDFをドラッグ&ドロップで指定して、処理順をダイアログ上で変更するといった用途に用いることを想定しています。

AppleScriptをmacOS標準搭載のスクリプトメニューから呼び出したような場合に、処理対象のファイルをドラッグ&ドロップで指定する場合のファイル受け付けのインタフェースとして用意したものです。

–> Download displayDropDialog15(Install to ~/Libraries/Script Libraries/ folder)

AppleScript名:accept AppleScript documents.scpt
use dropLib : script "display drop dialog" version "1.5"

set aMainMes to "Drop AppleScript"
set aSubMes to "Drag and Drop AppleScript files to Table (.scpt & .scptd)"
set aUTI to {"com.apple.applescript.script-bundle", "com.apple.applescript.script"}
set execButtonTitle to "Execute"

set aRes to (display drop dialog aUTI main message aMainMes sub message aSubMes with initial folder "" OK button title execButtonTitle)

★Click Here to Open This Script 

Posted in dialog file File path GUI Library | Tagged 11.0savvy 12.0savvy 13.0savvy 14.0savvy | Leave a comment

macOS 13.6.2アップデート Cocoa-AppleScript Applet修正はなし

Posted on 10月 28, 2023 by Takaaki Naganoya

macOS 13.6.2アップデートが配信されました。Cocoa-AppleScript AppletがmacOS 13.xの途中で動かなくなり、macOS 13.6.x台で修正されるのではないか? などと思っていましたが、そういう状態にはなっていないようです。

ちなみに、macOS 13.xよりももっと古いOSで「Cocoa-AppleScript Applet」のアプレットを作成し、そこから実行バイナリ部分(/Contents/MacOS/CocoaApplet)を抜き出して、macOS 13.x上で作ったCocoa-AppleScript Appletの同一バイナリを削除して入れ替えると動く、という検証報告も入っています。

正直、Cocoa-AppleScript Appletは登場以来、「こんなので使えるか!?」という存在でした。その後OS X 10.10で一般のAppleScript実行環境でCocoa呼び出しが許可されてから、Scripter側にCocoa活用のノウハウが蓄積され、「標準環境よりもできることが多い」とのことで再評価されたものでもあります。

Posted in Bug Cocoa-AppleScript Applet news | Tagged 13.0savvy | Leave a comment

Finder上で選択中のASバンドル書類をオープンしてscpt形式で再保存

Posted on 10月 20, 2023 by Takaaki Naganoya

Finder上で選択中のAppleScriptバンドル形式書類をスクリプトエディタでオープンして、scpt形式で保存し直すAppleScriptです。

スクリプトエディタのコンテクストメニューが.scpt形式しか認識しないので、バンドル形式のScriptを変換するために作ったものです。

Finderの選択中のファイルをフィルタするのに、フィルタ参照ではなくUTIを求めて判定しています。

「AppleScript最新リファレンスv2.8対応」の付録Scriptの加工用に作ったものです。バンドル形式への変換は書いてあったものの、scpt形式に変換するものは書いていなかったので急遽、用意しました。

AppleScript名:Finder上で選択中のASバンドル書類をオープンしてscpt形式で再保存.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2023/10/20
—
–  Copyright © 2023 Piyomaru Software, All Rights Reserved
—
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

property |NSURL| : a reference to current application’s |NSURL|
property NSArray : a reference to current application’s NSArray
property NSPredicate : a reference to current application’s NSPredicate
property NSURLTypeIdentifierKey : a reference to current application’s NSURLTypeIdentifierKey

on run
  set aResList to main("com.apple.applescript.script-bundle") of me
  
  
set ngList to {}
  
  
repeat with i in aResList
    set anAlias to contents of i
    
set aRes to saveAppleScriptAsScript(anAlias) of me
    
    
if aRes = false then
      set the end of ngList to contents of i
    end if
  end repeat
  
  
return ngList
end run

–scptdファイルをaliasで渡すと、scptファイルで同じ場所に保存し直す
on saveAppleScriptAsScript(aFile)
  set dPOSIX to POSIX path of aFile
  
if dPOSIX ends with "/" then
    set dPOSIX to (strings 1 thru -2 of dPOSIX)
  end if
  
  
–フルパスから、拡張子を付け替える
  
set newPath to changeExtFromPath(dPOSIX, "scpt") of me
  
set newFile to POSIX file newPath
  
  
tell application id "com.apple.scripteditor2"
    try
      open aFile
      
      
tell front document
        check syntax
      end tell
      
      
save front document as "script" in file newFile
      
close front document without saving
      
return true
    on error
      return false
    end try
    
  end tell
end saveAppleScriptAsScript

–POSIX pathの拡張子を付け替える
on changeExtFromPath(aPath, newExt)
  set pathString to current application’s NSString’s stringWithString:aPath
  
set newPath to ((pathString’s stringByDeletingPathExtension())’s stringByAppendingPathExtension:newExt) as string
  
return newPath
end changeExtFromPath

on main(acceptUTI)
  tell application "Finder"
    set aSel to selection as alias list
  end tell
  
  
set aList to {}
  
  
repeat with i in aSel
    set anAlias to contents of i
    
set aUTI to getUTIfromPath(anAlias) of me
    
if aUTI is not equal to missing value then
      set uRes to filterUTIList({aUTI}, acceptUTI) of me
      
      
if uRes is not equal to {} then
        set the end of aList to contents of i
      end if
    end if
  end repeat
  
  
return aList
end main

–AliasからUTIを求める
on getUTIfromPath(anAlias)
  set aPOSIXpath to POSIX path of anAlias
  
set aURL to current application’s |NSURL|’s fileURLWithPath:aPOSIXpath
  
if aURL = missing value then return missing value
  
set aRes to aURL’s resourceValuesForKeys:{current application’s NSURLTypeIdentifierKey} |error|:(missing value)
  
if aRes = missing value then return missing value
  
return (aRes’s NSURLTypeIdentifierKey) as string
end getUTIfromPath

–UTIリストが指定UTIに含まれているかどうか演算を行う
on filterUTIList(aUTIList, aUTIstr)
  set anArray to NSArray’s arrayWithArray:aUTIList
  
set aPred to NSPredicate’s predicateWithFormat_("SELF UTI-CONFORMS-TO %@", aUTIstr)
  
set bRes to (anArray’s filteredArrayUsingPredicate:aPred) as list
  
return bRes
end filterUTIList

★Click Here to Open This Script 

Posted in file File path filter | Tagged 12.0savvy 13.0savvy 14.0savvy Finder Script Editor | Leave a comment

新刊発売 AppleScript最新リファレンス v2.8対応

Posted on 10月 13, 2023 by Takaaki Naganoya

ようやく完成しました。最初の「AppleScript最新リファレンス macOS 10.11対応」の刊行から7年。完全刷新のアップデート版を刊行しました。PDF 974ページです。

→ 販売ページ

最新OS環境に合わせてアップデート

現行のAppleScript v2.8環境に合わせ、macOS 12/13/14を対象としたアップデートを行いました。可能なかぎり、macOS 10.13あたりからの各アプリケーションの用語辞書の変化などを追いかけ、それぞれのAppleScript実行プログラムのセキュリティ上の制約について、ベンチマークScriptを用いて評価も行なっています。

より広く、よりわかりやすく、よりくわしく

最初の「AppleScript最新リファレンス」(483ページ)から大幅にページを増やして974ページ。その分、解説範囲を広げています。

また、解説内容の難易度や想定ユーザーのレベルに分けた章構成を採用しています。

Script入門者向けに有用な情報(入門編)、Script利用者向けに有用な情報(利用編)、実際にScriptを書くユーザー向けに有用な情報(実践編)、困ったときに調べると便利な情報(資料編)など。

本書の付録は、スクリプトエディタのコンテクストメニューから呼び出すSnipet Scriptの「Piyomaru Context Menu Assistant」最新版、スクリプトエディタのテンプレートとして呼び出せる「Piyomaru Script Templates」、そしてGUI Scriptingの強力な助っ人「Dynamic Menu Clicker」などで構成されます(これからまとめて添付します。ちょっと手直しも必要なので)。

これからScriptに手を出そうかなという人にも、すでに使っているという人にも有用と思われる情報をわかりやすくまとめた1冊です。

■特集
AppleScriptv2.8の全貌
Shortcuts Events
OSAXなき時代のAppleScript命令拡張
各種セキュリティ制限を解除する
各種支援プログラムの現状
macOS標準装備&Apple純正アプリのAppleScript対応度解説
Finder/Automator/カレンダー/連絡先/メール/マップ/メッセージ/ミュージック/メモ/写真/システム設定/プレビュー/QuickTime Player/リマインダー/Safari/スクリプトエディタ/ショートカット/ターミナル/テキストエディット/tv/VoiceOver/画面共有/コンソール/System Information/Keynote/Pages/Numbers/Claris FileMaker Pro/Xcode/Apple Configurator/Garageband/iMovie/Instruments

■入門編
AppleScriptの世界を形作るもの
macOS標準搭載アプリケーションで AppleScript対応機能を持つもの
AppleScriptを実行できる、 さまざまなmacOS標準搭載ツール
AppleScriptを実行できる、 サードパーティのハード&ソフト
AppleScriptってなんだろう?
スクリプトエディタの使い方
「構文確認」時に行われること
Scriptを書く前に準備しておくこと
AppleScript最速マスター
文法編
AppleScript予約語一覧
AppleScript最新リファレンス
tellブロック/アクション/ダイアログ表示/コマンド/他の言語呼び出し/序数/制御構文/文字列操作/システム日付/データ型/定数/変数・プロパティ宣言/関数/演算子/パス関連/ファイル入出力/ローカライズ関連/テキスト要約/Webサービス呼び出し/フィルタ参照/サブルーチン宣言/無意味語/クリップボード制御/音量制御/スクリプトオブジェクト/その他
アプリケーションへの命令パターン
Script Debuggerとは?
Finder用語辞書攻略ガイド
Finderを使った定型処理
コラム GUIアプリの操作に影響を与えるFinder設定項目

■利用編
Script Menuの使い方
FastScripts 3
アプリケーションごとのScript Menu
フォルダアクション解説
Terminalから使うAppleScript
各種プラグインAppleScript
PDF Workflow Script解説
Mail Plugin Script解説
コンテクストメニューから呼び出す
廃止されたプラグインAppleScript
その他のAppleScriptランチャー〜スイッチコントロール/Automator/ショートカット/音声コントロール/Adobe Illustrator 2023/Adobe InDesign 2023/Keyboard Maestro/Hammerspoon/Service Station/Dropzone 4/Visual Studio Code/CotEditor+PowerPack/Xojo 2023/Live Code/Elgato Stream Deck
制限つきユーザーアカウント&制限つきマシン環境下のAppleScript
ペアレンタルコントロールとAppleScript
MDMによる制限環境下のAppleScript

■実践編
OSバージョン番号確認
ランタイム環境を知る
ハードウェア情報
GUI Scriptingの概要
AppleScriptからネット上の機能を手軽に活用
REST API呼び出し
CDN上のJavaScriptライブラリ呼び出し
ドロップレットを作らなくても大丈夫なScript運用術
Cocoa Scripting入門
対応Framework一覧(macOS 13/14)
Mac App StoreでAppleScriptで作ったアプリを販売
Piyomaru コンテクストメニューアシスタント
Piyomaru Script Templates

■資料編
AppleScriptと相性のよくない技術
各アプリケーションにおけるさまざまな座標系
独自マクロ言語内に記述するAppleScript〜Microsoft Office VBA/Claris FileMaker Pro Script Step
iOSデバイスとの連携
下準備
iOSデバイスからAppleScriptを実行する
iOSデバイス上の情報を更新する
AppleScriptで電話をかける
AppleScriptでSMSを送信する
iPhone/iPadとFaceTimeで通話する
リソースリファレンス〜Predicate文/UTI/アイコン/ディスクイメージ
AppleScriptの歴史
macOSとAppleScriptの要素技術史
AppleScriptの歴史 macOS編
AppleScriptの歴史 Classic MacOS編
AppleScript FAQs
エラー番号とエラーメッセージ
AppleScriptのエラー・コード表
キーコード表
キー入力シミュレーション用キーコード
あとがき

Posted in Books news | Tagged 12.0savvy 13.0savvy 14.0savvy | Leave a comment

macOS 14、英語環境で12時間表記文字と時刻の間に不可視スペースを入れる仕様に

Posted on 10月 7, 2023 by Takaaki Naganoya

macOS 14の英語環境だけで発生している現象ですが、12時間制の時刻表記設定にしてdateオブジェクトから文字列に変換すると、

時刻と「AM」「PM」の間にUTF-8で202Fのキャラクタ「Narrow No-Break Space」を入れてくるようになったもよう。これを入れるとどういう「いいこと」があるのかは、自分にはわかりません。

macOS 10.12あたりで日本語IMからFinder上のファイル名を入力した際に不可視文字を突っ込まれるという「大惨劇」が起こって、こっそり「なかったこと」にされたようですが、あの時にはリネームできないわファイル名を指定すると一致しないわ、既存の不可視文字入りファイルを修正してもそのままでは保存ができないわで、ひどい目に遭いました。現在日時をそのままファイル名に指定すると大惨劇が起こりそうです。

まぁ、でもAppleに報告してもどうせ真面目に取り合わないでしょうし、日本語環境でこの惨劇は発生しないので、英語圏の誰かが報告すればいいんじゃないでしょうか。

なお、Sonomaの日本語環境で12時間制の時刻表記設定にしてdateオブジェクトから文字列を取り出しても、「午前」「午後」といった12時間表記にともなう表記文字と時刻情報との間に、このような不可視キャラクタが混入することは確認できませんでした。

Posted in Bug news | Tagged 14.0savvy | Leave a comment

macOS 13.6.1アップデート。Cocoa-AppleScript Appletの修正はなし

Posted on 10月 4, 2023 by Takaaki Naganoya

macOS 13.6.1アップデートがβ段階を経由せずに配信されました。セキュリティ上の問題を解消するためのもの、とのことです。

念のために試してみましたが、macOS 13.x上で実行ができなくなっているCocoa-AppleScript Appletランタイムは、依然として実行できません。彼らがこれを直す気があるのかどうか、まったくわかりません。

Posted in Cocoa-AppleScript Applet news | Tagged 13.0savvy | Leave a comment

macOS 14、「辞書」が10個増えて、1つ削除に

Posted on 10月 3, 2023 by Takaaki Naganoya

macOS 14上で、恒例の「辞書」アプリ用にOSに収録している辞書について調査を行いました。スクリプトエディタ上で手軽にCocoa Scriptingを使えるようになったmacOS 10.10以降、AppleScriptからこれらの辞書にアクセスして検索ができるようになり「これは便利!」だと痛感。この機能が失われたら大問題だと感じたためです。

辞書データに対して検索を行う場合には、「どの辞書で検索するか」といった指定を文字列で行う必要があるので、正式な名前について知っておく必要があります。

以来、すべてのバージョンで辞書の名称一覧を取得して記録を行なっています。

理由は、macOSのメジャーアップデートごとに辞書の名前が微妙に細かく変わっているからです。

それらの名称変更には、理由がよくわからないものもあれば、なんとなくわかるものもあります。

これは、見て確認して腰を抜かしました。辞書の名前が変わるというのは「おおごと」だと思っており、このようにコロコロ変えていいものではないと考えています。Appleの命名ルールがコロコロ変わるということを思い知らされた事件でした。

これは…名前を変える必要があったものと見ています。

この「Oxford American Writer’s Thesaurus」の変更箇所は、「’」です。macOS 10.13で全角のアポストロフィ文字に変更され、以後そのまま継続しています。

よくよく考えると、これはPredicates文で抽出するさいに「’」が半角で入っていると処理系の都合で問題になるので全角文字に置き換えたというパターンなんでしょう。

ちなみに、macOS 14で追加になったのは….

NE Nationalencyklopedin AB Professional English-Swedish / Svensk-Engelska
Stavropoulos Oxford Greek-English Learners Dictionary
Kamus Komprehensif Bahasa Melayu – Malay Monolingual Dictionary, Oxford Fajar
Kamus Dwibahasa Melayu/Inggeris – English/Malay Bilingual Dictionary, Oxford Fajar
Larousse Editorial Diccionario General de la Lengua Española
Тълковен речник на съвременния български език
Λεξικό της κοινής νεοελληνικής
Larousse Editorial Diccionari Manual de la llengua catalana
Uniwersalny słownik języka polskiego
Dicţionarul explicativ al limbii române
Oxford Punjabi Dictionaries – ਪੰਜਾਬੀ ਅੰਗਰੇਜ਼ੀ ਕੋਸ਼ • پنجابی انگریزی لغت

で、削除されたのは、

Diccionario General de la Lengua Española Vox

です。Google翻訳すると「スペイン語の一般辞書vox」とのこと。あまり大きくない辞書だったのかも?

Posted in news | Tagged 14.0savvy Dictionary.app | Leave a comment

Cocoa-AppleScript Appletランタイムが動かない?

Posted on 9月 22, 2023 by Takaaki Naganoya

AppleScriptObjC(Cocoa Scripting)の実行環境は大きく分けて3つあります。

1つ目は、Script EditorもしくはScript Debugger上で動かすもの、あるいはアプレットの書き出しを行なったもの。実行環境IDを取得すると、AppletとDropletは別のIDが返ってきますが、だいたい同じものです。

2つ目は、Xcode上で作成するCocoaアプリケーションです。AppleScriptでアプリを作成して、Mac App Store上で販売することもできます。かなり多くのCocoaの機能を利用できます。

3つ目が、これら2つの中間的な機能を持つCocoa AppleScript Appletです。Script Editorのファイル>テンプレートから新規作成>Cocoa-AppleScript Applet.appを実行すると編集可能になります。

Cocoa-AppleScript Appletは、Script Editor上のCocoa Scriptと同様の機能が使える上に、アプリケーション由来のイベント(起動中であるとか、起動終了したとか)を利用できます。

Cocoa-AppleScript Appletが登場したOS X 10.7時代、Xcode上のようにInterface Builderで手軽にGUIが作成できるわけでもなく、Script Editor上で普通に動かすScriptのようにログを表示してデバッグができるわけでもなく、何か明確な用例が存在するわけでもないため「これでどないせーっちゅーんじゃ?」と、とても手を出せないものと感じました。自分はこれを明確な「失敗作」として評価していました。この環境を嬉々として使っている人物といえば、edama2氏ぐらいのものです。

その後、macOS 10.10以降で通常のScript Editor上で動かすAppleScriptでもCocoaの機能が利用できるようになったため、Cocoa Scriptingのノウハウが蓄積され、「より高機能なCocoa Scripting環境」としてCocoa-AppleScript Appletが再評価されるようになりました。

Script Editor上で記述するCocoa Scriptで機能的に不十分だと感じるようになる場面で、Xcodeを使ってフル機能のアプリケーションを作るほどでもない、という状況において、Cocoa-AppleScript Appletという第3の選択肢が存在していることの意義はあったのです(使っているユーザーがめちゃくちゃ少ないとは思いますが)。

そして、ごくたまに様子を見るぐらいだったCocoa-AppleScript Applet環境ですが、最近(macOS 13.x上で)動かないという声が寄せられるようになりました。自分も動かないことを確認しています。テンプレートから1行も追加していない状態でも動かないので、これは明らかにApple側のミスでしょう。

バグレポートすれば直してもらえるのかもしれませんが、こうした情報が共有されるとか、Appleがドキュメントを出すようにしないと、いつも不手際をこっそり誤魔化すだけで「給料をもらって毎日バグを作るAppleエンジニア」「Appleのエンジニアは製品を作らない。バグを作る」といった批判をかわせない状態になることでしょう。

これは、年表を頻繁に作る立場の人間からいえば、Mac OS X 10.3で「is in」演算子が動作しなかったのと同じぐらいの大規模なバグに見えます。

本件、macOS 14RC上でも同様に発生しています。おおかた、「証明書の期限が切れている」といったたぐいのトラブルだと思っています。

Posted in Bug Cocoa-AppleScript Applet | Tagged 13.0savvy 14.0savvy | 2 Comments

Keynote/Pages/Numbers v13.2がリリースされる

Posted on 9月 22, 2023 by Takaaki Naganoya

iWork……という言葉は最近はあまり使われないようなので、Keynote、Pages、Numbersと呼びますが……これらのアップデート版v13.2が公開されました。AppleScript用語辞書の修正、追加はありません(作成できるグラフ形式が増えているのですが、ASから作成できるようにはなっていません)。

メジャーアップデートのv14.0などではないので、本バージョンは堅実で小刻みな機能アップデート版といえるでしょう。

3Dオブジェクトを格納するUSDZファイルをデータとして挿入できたりアニメーション表示(Keynote)できたり、新しいテーマが追加されたり、その他SVG画像を素材として利用できるようになったもようです。

USDZ形式のファイルを扱えるのは、いまのところ手元のアプリケーションではXcodeとPreview.appのみ。

SVGについては、いろいろ増えてきています。

こうした各種書類形式をキーにして、さまざまなアプリケーションを連携させられるという情報を提供する件をAppleのWWDRに提案したことがありましたが、どこのチームも興味を持たなかったとのこと。

USDZ形式データについては、数年前からこの形式データの利用を広めたいという「意図」が見えたので、いろいろ情報収集はすすめてきました。iWork Appsでサポートするということで、1段階利用が広がったというところですが、たとえばKeynoteで3Dを前提としたアニメーションやトランジッションが実装される、という機能が整備されるまでは単なる素材が1つ増えたぐらいでしょう。

Keynoteに3Dトランジッションや3Dアニメーションを追加するぐらいのことは、とっくの昔から検討されていたと思われますが、おそらく実装してみると「思ったよりも効果的ではない」という結論になったのでしょう。Vision ProのようなxRデバイスで閲覧するという「ブラウズ環境」を整備できたことにより、USDZ形式のデータを広くサポートする「価値」が生まれると踏んだのでしょう。

Vision Proが成功を収めるか、誰もが記憶から追い出したくなるような失敗として記録されるかは不明ですが、USDZ形式の利用が広くサポートされれば、それは多くの人々に役立つものとなることでしょう。

Posted in news | Tagged 12.0savvy 13.0savvy 14.0savvy Keynote Numbers Pages | Leave a comment

Calendar.appのイベントにAppletを添付できる?

Posted on 9月 22, 2023 by Takaaki Naganoya

Calendar.appのイベント(予定)に、ファイルを添付できるようになっています。ここに、AppleScriptアプレットを添付して実行することで、タイマー実行アプリとしてCalendar.appを利用する、というスタイルが初期のMac OS Xで見られました。Mac OS X 10.6ぐらいまででしょうか。

その後、どうもCalendar.appのイベントにAppletを添付しても実行されなくなった、という話をよく聞くようになりました。

自分も、タイマー実行アプリとしてCalendar.appは「使えないもの」と判断し、自前でタイマー機能などを作り込んで使ってきました。確実さでいえば、これは実に確実ではあるものの、それを外部に提供するのかという話については、いい「落とし所」を見出せない感じではあります。

こちらもタダで出すつもりはないけれど、これどうせ国内外のScripter連中は買わないよね、というところで話が止まっているものでもあります。モノがモノなので、Mac App Storeにも出せないでしょう(あらかじめ、どういうアプリを操作する、という設定を行なって提出する必要があるので。事前にわかるわけがない)。

そんな中、X(旧称Twitter)上で「Calendar.appをAppleScript Appletのタイマー起動用に使っている」という話を聞きつけ、その内容について実際にやりとりをして、自分の手元でもできることを確認しました。

その時点での自分の理解では、「イベントにAppletを添付して、イベントのアクションで『添付ファイルをオープンする』という指定を行えばOK」だという話だと納得しました。なるほど、自分は使い方を誤解していたのか、と。

しかし、その翌日に「別のAppletも添付して試してみよう」ということで、別のイベントを作成して別のAppletを添付して「添付ファイルをオープン」させてみたものの、今度はイベントの指定時刻に通知は来るものの、添付ファイルであるAppletは起動されませんでした。

Calendar.app自体のバグなのか、それともイベントへのApplet添付・実行には何か気づかないパラメータが存在しているのか?(イベント登録時のアカウントであるとか、ローカルの通知だけにしておかないとダメとか) そのあたりがまったく不明です。

昨日、一昨日ぐらいの段階でCalendar.appへのAppletの添付・実行は2・3度成功していたので、なかなか謎なところがあるものです。

Posted in Bug Calendar | Tagged 13.0savvy Calendar | Leave a comment

macOS 14の変更がmacOS 13にも反映

Posted on 9月 21, 2023 by Takaaki Naganoya

macOS 14RCをさわって「システム設定」をAppleScriptから操作し、目的のPaneをIDで指定して表示できることを確認しました。

macOS 13に戻ってきて資料を作成(macOS 14を信用していないので)。「macOS 13でも動いてみたりして?」と、冗談半分にmacOS 14用のScriptを走らせたら……動いてしまいました。

各PaneのIDやnameを取得でき、指定IDのPaneを表示でき、現在表示中のPaneの情報を取得できます。

厳密に「いつから」この状態になっていたのかは不明ですが、macOS 13.5あたりでしょうか? 自分の環境はmacOS 13.6betaなので、13.5/13.5.1の状況は確認のしようがありませんが、OSのマイナーバージョンアップ時にこうしたまともな改修を行うなんて、前代未聞です。よほど、全世界的に文句を言われたのでしょう。

name ID
(ユーザーの名前) com.apple.systempreferences.AppleIDSettings*AppleIDSettings
ファミリー com.apple.Family-Settings.extension*Family
Wi‑Fi com.apple.wifi-settings-extension
Bluetooth com.apple.BluetoothSettings
ネットワーク com.apple.Network-Settings.extension
VPN com.apple.NetworkExtensionSettingsUI.NESettingsUIExtension
通知 com.apple.Notifications-Settings.extension
サウンド com.apple.Sound-Settings.extension
集中モード com.apple.Focus-Settings.extension
スクリーンタイム com.apple.Screen-Time-Settings.extension
一般 com.apple.systempreferences.GeneralSettings
外観 com.apple.Appearance-Settings.extension
アクセシビリティ com.apple.Accessibility-Settings.extension
コントロールセンター com.apple.ControlCenter-Settings.extension
SiriとSpotlight com.apple.Siri-Settings.extension
プライバシーとセキュリティ com.apple.settings.PrivacySecurity.extension
デスクトップとDock com.apple.Desktop-Settings.extension
ディスプレイ com.apple.Displays-Settings.extension
壁紙 com.apple.Wallpaper-Settings.extension
スクリーンセーバ com.apple.ScreenSaver-Settings.extension
省エネルギー com.apple.Battery-Settings.extension*EnergySaverPreferences
ロック画面 com.apple.Lock-Screen-Settings.extension
ログインパスワード com.apple.Touch-ID-Settings.extension*TouchIDPasswordPrefs
ユーザとグループ com.apple.Users-Groups-Settings.extension
パスワード com.apple.Passwords-Settings.extension
インターネットアカウント com.apple.Internet-Accounts-Settings.extension
Game Center com.apple.Game-Center-Settings.extension
キーボード com.apple.Keyboard-Settings.extension
マウス com.apple.Mouse-Settings.extension
ゲームコントローラ com.apple.Game-Controller-Settings.extension
プリンタとスキャナ com.apple.Print-Scan-Settings.extension
AppleScript名:すべてのPaneの情報を取得.scpt
tell application "System Settings"
  set aList to properties of every pane
  
–> {{class:pane, name:"外観", id:"com.apple.Appearance-Settings.extension"}, {class:pane, name:"ロック画面", id:"com.apple.Lock-Screen-Settings.extension"}, {class:pane, name:"キーボード", id:"com.apple.Keyboard-Settings.extension"}, {class:pane, name:"ファミリー", id:"com.apple.Family-Settings.extension*Family"}, {class:pane, name:"Wi‑Fi", id:"com.apple.wifi-settings-extension"}, {class:pane, name:"デスクトップとDock", id:"com.apple.Desktop-Settings.extension"}, {class:pane, name:"Bluetooth", id:"com.apple.BluetoothSettings"}, {class:pane, name:"壁紙", id:"com.apple.Wallpaper-Settings.extension"}, {class:pane, name:"SiriとSpotlight", id:"com.apple.Siri-Settings.extension"}, {class:pane, name:"マウス", id:"com.apple.Mouse-Settings.extension"}, {class:pane, name:"プライバシーとセキュリティ", id:"com.apple.settings.PrivacySecurity.extension"}, {class:pane, name:"機能拡張", id:"com.apple.ExtensionsPreferences"}, {class:pane, name:"プロファイル", id:"com.apple.Profiles-Settings.extension"}, {class:pane, name:"省エネルギー", id:"com.apple.Battery-Settings.extension*EnergySaverPreferences"}, {class:pane, name:"一般", id:"com.apple.systempreferences.GeneralSettings"}, {class:pane, name:"情報", id:"com.apple.SystemProfiler.AboutExtension"}, {class:pane, name:"ソフトウェアアップデート", id:"com.apple.Software-Update-Settings.extension"}, {class:pane, name:"ストレージ", id:"com.apple.settings.Storage"}, {class:pane, name:"AirDropとHandoff", id:"com.apple.AirDrop-Handoff-Settings.extension"}, {class:pane, name:"ログイン項目", id:"com.apple.LoginItems-Settings.extension"}, {class:pane, name:"言語と地域", id:"com.apple.Localization-Settings.extension"}, {class:pane, name:"日付と時刻", id:"com.apple.Date-Time-Settings.extension"}, {class:pane, name:"共有", id:"com.apple.Sharing-Settings.extension"}, {class:pane, name:"Time Machine", id:"com.apple.Time-Machine-Settings.extension"}, {class:pane, name:"転送またはリセット", id:"com.apple.Transfer-Reset-Settings.extension"}, {class:pane, name:"起動ディスク", id:"com.apple.Startup-Disk-Settings.extension"}, {class:pane, name:"集中モード", id:"com.apple.Focus-Settings.extension"}, {class:pane, name:"ゲームコントローラ", id:"com.apple.Game-Controller-Settings.extension"}, {class:pane, name:"スクリーンタイム", id:"com.apple.Screen-Time-Settings.extension"}, {class:pane, name:"長野谷隆昌", id:"com.apple.systempreferences.AppleIDSettings*AppleIDSettings"}, {class:pane, name:"VPN", id:"com.apple.NetworkExtensionSettingsUI.NESettingsUIExtension"}, {class:pane, name:"ディスプレイ", id:"com.apple.Displays-Settings.extension"}, {class:pane, name:"プリンタとスキャナ", id:"com.apple.Print-Scan-Settings.extension"}, {class:pane, name:"Game Center", id:"com.apple.Game-Center-Settings.extension"}, {class:pane, name:"インターネットアカウント", id:"com.apple.Internet-Accounts-Settings.extension"}, {class:pane, name:"コントロールセンター", id:"com.apple.ControlCenter-Settings.extension"}, {class:pane, name:"ネットワーク", id:"com.apple.Network-Settings.extension"}, {class:pane, name:"スクリーンセーバ", id:"com.apple.ScreenSaver-Settings.extension"}, {class:pane, name:"アクセシビリティ", id:"com.apple.Accessibility-Settings.extension"}, {class:pane, name:"サウンド", id:"com.apple.Sound-Settings.extension"}, {class:pane, name:"ユーザとグループ", id:"com.apple.Users-Groups-Settings.extension"}, {class:pane, name:"パスワード", id:"com.apple.Passwords-Settings.extension"}, {class:pane, name:"通知", id:"com.apple.Notifications-Settings.extension"}, {class:pane, name:"ログインパスワード", id:"com.apple.Touch-ID-Settings.extension*TouchIDPasswordPrefs"}, {class:pane, name:"SwiftDefaultApps", id:"cl.fail.lordkamina.SwiftDefaultApps"}, {class:pane, name:"SwitchResX", id:"fr.madrau.switchresx.prefpane"}}
end tell

★Click Here to Open This Script 

AppleScript名:現在表示中のPaneの情報を取得.scpt
tell application "System Settings"
  set aList to properties of current pane
  
–> {class:pane, name:"外観", id:"com.apple.Appearance-Settings.extension"}
end tell

★Click Here to Open This Script 

AppleScript名:WiFiのPaneを表示.scpt
tell application "System Settings"
  reveal pane id "com.apple.wifi-settings-extension"
end tell

★Click Here to Open This Script 

Posted in news System | Tagged 13.0savvy 14.0 System Settings | 1 Comment

macOS 14RCはじめました

Posted on 9月 19, 2023 by Takaaki Naganoya

昨日の今日でナニではありますが、M1 Mac miniの起動SSDに別パーティション(Beta)を作って、macOS 14をインストールしました。

パーティション作成→BetaパーティションへのmacOS 13のインストール→BetaのmacOS 13で起動→macOS 14にアップデート

という手順を経る必要がありました。

電子書籍「AppleScript最新リファレンス v2.8対応」を出すにしても、いろいろと確認すべき事項があったため(macOS 14の処理系がバージョン2.9だったらシャレになりません)、細部の確認が行えていないと怖い部分がいろいろありました。

確認したこと

macOS 14のAppleScript処理系のバージョンは2.8のままで変更はありません(予想どおり)

「システム設定」(System Settings)のAppleScriptによるコントロール機能が回復。各PaneのIDを取得してrevealコマンドで表示できるようになった。ただし、すべてのPaneについてIDが割り振られているかは未確認。どうせAppleのことなので、IDが割り振られていないPaneであるとか、指定しても表示されないPaneの存在が予想される(1つありました→表示まで時間がかかるPaneだったもよう。すべてチェックして、表示できないIDのPaneはありませんでした)

全体的に実行速度が若干macOS 13よりも向上しているように見えますが、クリーンインストールしたためなのか、Rosetta 2をインストールしていない環境であるためなのかは不明

日本語環境でText To Speechのキャラクター「O-Ren」「Hattori」が追加されているものの、sayコマンドで指定できるようにはなっていない(音声キャラクタの使用ライセンスの問題なので、バグではない。ただし説明がまったくない点はあいかわらず不親切)

aliasからPOSIX pathに変換すると結果がおかしくなるといった「macOS初期β版によくある」不具合は見られなかった

macOS 12のβ版でかなり長い間修正されなかった(Release版では直った)「スクリプトメニューが表示されない」不具合は見られなかった(直前に発生した不具合を何回も繰り返すAppleあるある)

スクリプトエディタのコンテクストメニュー・スクリプトに、絵文字つきのファイル/フォルダのコンテンツを入れると、コンテクストメニューに「項目が重複して表示される」不具合が修正された(macOS 13βでも一時期直っていた時期もあったので再発する可能性あり。まったく油断できない)

要素数の多い配列(list)の生成、ランダムシャッフル、ソートなどCocoaの機能を用いた高速処理の速度については速度低下は見られず

700箇所の位置情報と8,000箇所の位置情報(鉄道駅、バス停留所)の距離計算を行うベンチマークで、macOS 13だと1分45秒程度だったものが、macOS 14では1分35秒程度。遅くなっているわけではなさそう

指定配列要素の順列組み合わせ計算(Permutation)の計算結果も若干速くなっている。誤差程度だが、遅くなるという傾向は見られなかった

「Mail.appでAppleScriptからメール生成+送信を行うと、メール1通あたりに生成されたプロセス2個がメモリ上から消去されず、メール作成すればするほどプロセスがたまってメモリが喰いつくされ、動作速度が壊滅的に遅くなる」不具合は未検証(Mail.app自体のバージョンアップは行われていない)。

macOS 12/13と初期Release版でNSDataDetectorによるデータ認識が日本語環境だけ問題を起こしていたバグについても検証が必要(何回も不具合を出している要チェックポイント。Apple自身がリリース前にチェックすべき)

→ ひととおりテキストからの情報抽出を行わせてみたところ、問題なく動いているようです。ただし、ここ数バージョンのmacOSは、リリース版で大幅に劣化する(未知のバグがたくさん発生)ので油断はできません

連絡先(Contacts)のAppleScript用語辞書のうち、プラグイン(廃止済み)のSuites「Address Book Rollover Suite」がhiddenになった(そのままでは表示されない。とくに問題はない)

ミュージックのAppleScript用語辞書のうち、playlistの「loved」属性が「favorited」に変更された。AppleEventコードなどはそのままで予約語が変更

Safari v17のAppleScript用語辞書で、隠し命令「show credit card settings」が追加された。なお、macOS 13.x上に提供されているSafari 17betaでも同様の変更が確認されている

Shortcuts Events添付のsdefがいろいろmacOS 14で書き換えられている(バージョン番号は変わらず)。これを見るのはなかなか面白い。

スクリプトエディタ上でテンプレートから作成できる「Cocoa-AppleScript Applet」が動作しない(macOS 13から発生している現象)

Posted in Bug | Tagged 14.0savvy | Leave a comment

Post navigation

  • Older posts
  • Newer posts

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

Google Search

Popular posts

  • 開発機としてM2 Mac miniが来たのでガチレビュー
  • macOS 15, Sequoia
  • Pages本執筆中に、2つの書類モード切り替えに気がついた
  • Numbersで選択範囲のセルの前後の空白を削除
  • メキシカンハットの描画
  • Pixelmator Pro v3.6.4でAppleScriptからの操作時の挙動に違和感が
  • AppleScriptによる並列処理
  • macOS 15でも変化したText to Speech環境
  • Safariで「プロファイル」機能を使うとAppleScriptの処理に影響
  • AppleScript入門③AppleScriptを使った「自動化」とは?
  • デフォルトインストールされたフォント名を取得するAppleScript
  • 【続報】macOS 15.5で特定ファイル名パターンのfileをaliasにcastすると100%クラッシュするバグ
  • Script Debuggerの開発と販売が2025年に終了
  • macOS 15 リモートApple Eventsにバグ?
  • AppleScript入門① AppleScriptってなんだろう?
  • macOS 14で変更になったOSバージョン取得APIの返り値
  • NSObjectのクラス名を取得 v2.1
  • macOS 15:スクリプトエディタのAppleScript用語辞書を確認できない
  • 有害ではなくなっていたSpaces
  • AVSpeechSynthesizerで読み上げテスト

Tags

10.11savvy (1101) 10.12savvy (1242) 10.13savvy (1391) 10.14savvy (587) 10.15savvy (438) 11.0savvy (283) 12.0savvy (212) 13.0savvy (197) 14.0savvy (150) 15.0savvy (139) CotEditor (66) Finder (51) 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
  • 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年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