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

投稿者: Takaaki Naganoya

新発売:誰でも気軽に開発体験 プログラム・キット

Posted on 11月 12, 2022 by Takaaki Naganoya

Piyomaru Software Booksの65冊目。「誰でも気軽に開発体験 プログラム・キット①」を発売しました。PDF 90ページとなっています。

→ 販売ページ

プログラム・キットは、プラモデルのように誰もが挫折せずに、部品を組み立てて動かせるという「体験」を提供する本です。

組み上がったプログラムキットは、カスタマイズすることで、より新たな動きをするプログラムに進化させられます。

「プログラム・キット」シリーズの第1巻である本書では、人気のテキストエディタ「CotEditor」のウインドウを画面上でぐるぐる回転させるプログラムを扱っています。macOS 12以降用。

■目次

1章 プログラム・キットとは?

プラモデルのようにプログラム開発体験

2章 環境をととのえよう!

プログラム・キット作成のために環境設定

3章 部品を確認しよう!

プログラム・キット同梱の部品を確認

4章 作業上の注意点

プログラム・キット組み立て作業における注意点

5章 部品を組み立てよう

プログラム・キットの組み立て説明

6章 プログラムの構成要素

中身がわかると、カスタマイズしやすい

7章 カスタマイズしよう

完成したプログラム・キットをいろいろなツールから起動できることをご紹介

8章 さまざまなプログラムから実行しよう

完成したプログラム・キットをmacOS上のさまざまなプログラムから実行する方法についてご紹介

Posted in Books news PRODUCTS | Leave a comment

UI Browserがgithub上でソース公開され、オープンソースに

Posted on 10月 31, 2022 by Takaaki Naganoya

ちょっと驚きの展開です。Bill Cheesemanの引退にともない、その後の展開が不安視されていたUI Browserの新たな話が上がってきました。

たしかに、Bill Cheeseman引退後のUI Browserの「あり得る」ストーリーの1つとして、(v3.x系の)Open Source化は考えないではなかったのですが、まさかBill Cheeseman本人によりすべてSwiftで書き直されたもの(v4)が、あらためてオープンソース版として公開されるとは思いませんでした。

→ UI Browser 4 on github

公開されているのは、現行のUI Browser v3.0.2よりも新しい「v4」であり、完成したものではないようです。一応、興味があったのでProjectをダウンロードしてXcodeでビルドしてみましたが、UI Browser 4を起動することはできませんでした(ビルドは通ったが、起動途中で止まる)。

PFAssistiveFrameworkなどの心臓部分もすべてSwiftで描き直されているものの、「AccessibleElement.swift」が空行を含めてわずか570行程度であったりと、その機能から推測される(巨大な)コード規模とかけ離れた内容になっていることから、「手を付けられる範囲で手をつけただけ。完成品というレベルのものではない」という印象を受けます。

ただ、作り方が「ゼロから作り直した」のではなく、「C++のプログラムを順次翻訳している最中」に見えるため、これからも順次C++からSwiftに翻訳していくのかもしれませんし、そうではないのかもしれません。

v4が動くところまで行くのに、年単位で時間がかかりそうに見えます。

このようにちゃんと引き継ぎが行われるというのは、珍しいことであり……自分だったら、ある日いきなりBlogが消えておしまいでしょう。

Posted in news | Tagged 10.15savvy 11.0savvy 12.0savvy 13.0savvy UI Browser | Leave a comment

iWork 12.2がリリースされた

Posted on 10月 26, 2022 by Takaaki Naganoya

macOS 13がリリースされた翌日に、iWork(Keynote、Pages、Numbers) v12.2がリリースされました。
本バージョンで、AppleScriptから新規iWork書類を作成して保存させられないバグは修正されていません。

Keynote v12.2:
フォントサイズ指定が整数値(integer)から実数値(real)が指定できるように変更された

Pages v12.2:
フォントサイズ指定が整数値(integer)から実数値(real)が指定できるように変更された
AppleScript用語辞書掲載サンプルScriptで、Word書類への書き出しで「.doc」の指定が削除された(.docxのみ掲載)
→ Pages 12.2+macOS 13.1betaで連続してPages書類をオープンしてPDFを書き出していたら、どうもPDF書き出しできない場合があるようで(再起動で回復)。オープン後に少しウェイトを入れてからPDF書き出しするなど、様子を見ているところです。ファイルオープン後にASで後続のコマンドを受け付けるまでにアプリケーション内/書類内の初期化が間に合っていないのでは? と疑っています。

Numbers v12.2:
フォントサイズ指定が整数値(integer)から実数値(real)が指定できるように変更された
AppleScript用語辞書掲載サンプルScriptで、Excel書類への書き出しで「.xls」の指定が削除された(.xlsxのみ掲載)

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

macOS 13, Ventura(継続更新)

Posted on 10月 25, 2022 by Takaaki Naganoya

13という数字は、キリスト教国では不吉な数字と言われており、これはイエス・キリストの13番目の弟子が師を裏切ったからだとかなんだとか。とにかく、日本で言う「黒い猫」や「北枕」、「夜に爪を切ってはいけない」、「霊柩車が通ったら親指を隠せ」並みに不吉とされております(ここ、Google翻訳で英語に訳したら意味わかんないだろーなー。日本に伝わる「不吉な迷信」のかずかずを列挙しています)。

かくいう自分も13という数字にはとても嫌な記憶があります。macOS 10.13です。Betaの最中はとてもいい感じだったのに、Release版は完膚なきまでに壊れた状態でリリースされ「macOS史上最悪の事故物件」「macOS Vista」「(クオリティが)Low Sierra」との呼び名をほしいままにしています。

さて、macOS 13、従来どおりのナンバリングでいえばmacOS 10.18が2022/10/24にリリースされたわけであります。10月中のリリースは読み通りだったので、そんなもんだろうかと思いますが、従来のmacOSのリリースと趣が異なる印象を受けています。

かつて「Mac OS X 10.5のバグを全力で修正したのが10.6だ」という、バグ修正を主眼にリリースされたMac OS X 10.6のような、そういうOSバージョンに見えます。「macOS 12.7」といった趣で、OSのアップデータの容量も5GB少々と、これまでの半分程度のサイズです(ARMバイナリだから?)。

macOS 10.13:Beta中はまぁまぁの出来だったのが、Release時に事故を起こしてバグだらけでリリースされた「事故物件」。「毒の沼」と言われる。

macOS 10.14:Beta中からバグが多くて、呆れて放置。最終リリースごろに仕方なくmacOS 10.12から乗り換えたが、その頃にはいろいろバグも取れていた。この状態でリリースしてほしい。

macOS 10.15:夏の終わりごろに「このバージョンはアップデートしちゃダメだよねー」と開発者仲間の間で話題になっていたバージョン。自分もはじめてOSのアップデート紹介をBlogで行うことを拒否。後から調べても山のようにバグが存在し、AppleScriptでもCocoaの呼び出しが大幅に遅くなるような巨大なバグが存在。macOS 10.13並みに「使ってはいけないバージョン」になった。スキップ推奨。

macOS 11:Intel Mac上ではこなれたいいOSだったものの、Apple Silicon Mac上では不具合のオンパレード。バグレポート用のmacOSと言われた。ただ、Intel Macではとくに問題なかったのでIntel MacユーザーにはいいOS。

macOS 12:巨大な不具合(Apple Silicon Mac上でAppleScriptが低消費電力コア上で実行されて速度低下、macOS 10.15から続くCocoa呼び出し速度低下)が修正される。Apple Silicon Macの本当の性能が発揮される。ただし、Release後のアップデート(Beta時)で巨大なバグを連発。とくに、AppleScript絡みのバグが多発したためマシンが使えなくなる時期が頻発。最後の最後(macOS 12.6.1)で帳尻を合わせたものの、深刻なトラブルが絶えなかった。個人的にはテクニカル・ハラスメント系OSと呼んでいる。

macOS 13の評価は?

で、macOS 13なんですが……いまのところ、そんなに時間を割いて本気で使い込んではいないものの(Beta段階では見た目からもうやる気を感じない作りで、色彩的にめまいを感じていました)、巨大なバグ(スクリプトメニューが表示されないとか)はBetaの段階で報告して修正されているし(Beta段階の話です)、AppleScriptの処理系もAppleScript version 2.8でとくにmacOS 12から変更はありません。

たとえば、Mail.appのバージョンもv16ととくに変わっていないですし、全体的にmacOS 12.7といって差し支えない内容だと感じます。そう考えると、いろいろバグも直っているようなので、そんなに悪くないOSに見えてきます。逆に、ここ数年のmacOSアップデートではAppleのエンジニアには呪詛の言葉しか出てこなかったことを考えれば、不具合を(いまのところ)それほど感じないというのは「すごい出来事」なのではないでしょうか(Beta段階の話です)。

「システム環境設定」が「設定」に名称変更され、画面構成が大幅に変わっている点については、Beta評価時にはアイコン色がグレーのものばかりで「何これ?」という状態でしたが、どうやらリリース版では差し変わったようでした。

とはいうものの、Frameworkまわりは変わっていそうなので、Cocoa系の機能を利用する上ではひととおりチェックが必要そうです。

本当の真価は、macOS 13に合わせてリリースされるiWork 12.2(多分)の仕上がり次第といったところでしょうか。AppleScriptから新規ファイル保存ができないという巨大なバグがv12からv12.1へと引き継がれたままで、この調子で行くと「PDFの書き出しができない」といったバグの再発が予測されます。

→ Pages v12.2.1の書類をPDF書き出しする際に問題が発生しています。PagesをAppleScriptからコントロールしてPDF書き出しさせた際に、数十程度の書類を連続してPDF書き出ししていると、何回も繰り返し実行すると途中からPDF書き出しを行わなくなります。このような症状に直面した場合にはOSの再起動かログアウトを行う必要があるようです。また、xattrの属性com.apple.quarantineの内容によってはファイルのオープンができないとか、オープンしてもPDFの書き出しを行えないといった不具合が発生しています。OS側のxattrの制御に変更を加えつつも、Apple純正アプリケーションが対処できていない可能性があります。

→ Finder上で書類を選択して、キーボードショートカット「Command-O」でオープンしようと操作して、エラーが出ることがあります。Appleのエンジニアはそろいもそろってバカなんでしょうか? Finder上で書類がオープンできないというのは、由々しき事態だと考えます。
→→ 本件、「濁点/半濁点つきのファイル名を持つファイルをFinder上でオープンできない」という現象だったようです。日本語環境でしか発生しない系のバグ。

→ macOS 13の評価は「Betaの頃のほうがマシ」というもので、Release版で一気に崩落したmacOS 10.13やβ段階で「これはダメだ」と見放されたmacOS 10.15よりもよくないものです。社内のどこかに「トンでもなく仕事が遅いチーム」がいて、その内容をマージした瞬間にOS全体の動作がおかしくなる、という状態に見えます。

外付けSSDにインストールできない件

Beta段階では外付けのUSB接続のSSDにインストールして、本体SSD(macOS 12.x)との間で切り替えて起動して様子を見ていましたが、正式リリース後にこの切り替えができなくなっていました。

外付けSSDからの起動が行えず、仕方なくMac mini内蔵SSDから起動したmacOS 12.6.1の上でアップデートを実行し、インストール先を外付けSSDに指定してインストールを実行。これは完了して起動できたのですが、今度は内蔵SSDを指定してmacOS 12.6.1(多分)を起動できない状態。

選択肢がなかったので、仕方なく内蔵SSDにもmacOS 13をインストール。とくに変更点が大量にあるわけではないので、仕方なく使っていますが、前バージョンに切り替えて起動できない(?)点については「騙された」「説明がない」ととても嫌な気分になりました。

→ このあたりの「セキュリティ強化」(技術的な嫌がらせ)についてはWWDCでもあまり具体的には話をせず、どーでもいい内容のいつになったら実用段階になるのかわからないようなお花畑のような話に終始するので、WWDCがお花畑だらけの昨今。Appleが実際にやっている嫌がらせの数々をまとめた「アンチWWDC」みたいな実務的な話を聞きたいところです。

system info
--> {AppleScript version:"2.8", AppleScript Studio version:"1.5.3", system version:"13.0", short user name:"me", long user name:"Takaaki Naganoya", user ID:504, user locale:"ja_JP@calendar=iso8601", home directory:alias "Macintosh HD:Users:me:", boot volume:"Macintosh HD:", computer name:"M1 mini", host name:"m1mini.local", IPv4 address:"192.168.0.50", primary Ethernet address:"XX:XX:XX:XX:xx:XX", CPU type:"ARM64E", CPU speed:missing value, physical memory:16384}

macOS 13変更点まとめ

・「システム環境設定」(System Preferences)が「システム設定」(System Settings)に名称および画面構成を変更。AppleScript用語辞書がついているものの、従来どおりのもので実際の機能とリンクしていない
→ 指定のPaneを表示するライブラリを書いて対応した(書籍のアップデート付録で対応予定)

・Font Bookが書き直され、AppleScript用語辞書がついていない
→ すでに、(個人的に)Font Bookを見捨ててNSFontによるフォント情報アクセスのためのAppleScriptを揃えているため、そちらに切り替え

・Music.app v1.3.2.16にAppleScriptコマンド「export」が追加された

・スクリプトエディタのアイコンにアプリケーションのアイコンをドラッグ&ドロップしてもAppleScript用語辞書が表示されない
不具合かと思っていたのですが、これまで使えてきたアプリケーションのAppleScript用語辞書確認方法が使えないようです。
スクリプトエディタのアイコンにアプリケーションのアイコンをドラッグ&ドロップする、という操作でAppleScript用語辞書が表示されなくなっています。1手間かけて、スクリプトエディタの「ライブラリ」ウインドウにアプリケーションをドラッグ&ドロップして登録しておいて、登録したアプリケーション名を一覧からダブルクリックするという方法のみ有効です。
→ macOS 14で直っています。バグとも仕様とも取れない話で、そもそもAppleがRelease Notesをまともに出さなくなったので、目の前にあるOSを見て「バグだ」としか評価のしようがありません

・Finder上で書類をダブルクリックしても、オープンされない場合がある謎仕様
どうも、アプリケーションが起動していないと書類がオープンされない場合があるなど、あきらかにセキュリティ上の何らかの改変を加えた結果、「普通に動いていてほしい」部分にまで問題が出ています。Apple社員に行きあったら「おまえら、自社製品使ってるか?」「いい加減にしろ」と言って回りたい雰囲気です。「君たちには深く失望した」というのがメールの挨拶文になりつつある感じです。

macOS 13不具合まとめ

・GUI Scriptingの機能を呼び出すAppleScriptをAppleScriptアプレットに書き出した場合、最初の1個目は認証され、アクセシビリティの(GUI Scriptingの)認証を取得できる。しかし、1個目のAppleScriptアプレットを削除して、2個目のアプレットを認証しても、「補助アクセスは許可されません」というダイアログが出てGUI Scriptingの実行を許可されない

・Siriの仕様がBeta版から変更になったため、Siri呼び出しAppleScriptライブラリ「AgentCallerLib」v1.2が動作しない(→ 対応のため修正しました)

・スクリプトエディタのコンテクストメニューから呼び出すアシスタントScript、これらにフォルダやファイルに絵文字を使用していると同じ項目が複数重複して表示される(macOS 13Betaで直っていたのに、Release版で再発)

・PagesのPDF書き出しに問題あり。ファイルの拡張属性(xattr)のうちcom.apple.quarantineの値によってはPDF書き出しできないという問題がある。また、繰り返しPDF書き出しを行なっていると、途中からPDF書き出しがスキップされます。

・Mail.appでAppleScriptからメッセージ作成+送信を行なっても、メモリ上から関連する子プロセスが解放されない。

Posted in news | Tagged 13.0savvy | 3 Comments

新発売:AppleScript基礎テクニック集(27)dateオブジェクト

Posted on 10月 21, 2022 by Takaaki Naganoya

Piyomaru Software Booksの64冊目。「AppleScript基礎テクニック集(27)dateオブジェクト」を発売しました。PDF 37ページとなっています。

→ 販売ページ

dateオブジェクトは、数字や文字列ではなく「オブジェクト」であるために、かなり独特な挙動を行います。多くは「仕様」なのですが、これを知らないと怪奇現象のオンパレードという話になってしまいます。

一見すると「ナニコレ?」という挙動のかずかずも、実際にその理由を確認してみると納得できることばかり。dateオブジェクトに関して、知らないと遭遇するトラブルの数々を、華麗にかわしていきましょう。

目次

■date objectとは?

dateは、日付時刻を保持するオブジェクト
date objectを手軽に取得して属性値を取得
システム環境設定の影響を受けるdateオブジェクト
システム環境設定の影響を受けるdateオブジェクト

■テキストからdateオブジェクトを作る

スクリプトエディタ上だと自動修正される
日付文字列の記述形式は「優先する言語」で変化
Data Detectorでテキストから日付情報をピックアップ
言語環境を問わずに動くdate object作成処理

■dateオブジェクトでハマるポイント

dateオブジェクトに対するパラメータ指定
1881年1月1日よりも過去の日付を扱うには注意が必要

■date objectの各種計算

dateの相対計算
指定月の日数を求める
指定日付の和暦の元号を求める
グリニッジ標準時(GMT)との時差を求める
秒以下の時間待ち計測
自然言語テキストからdate objectを抽出
dateオブジェクトを指定の日付文字形式で返す
dateオブジェクトをISO8601形式テキストに
ISO8601を考慮した週カウント
dateオブジェクトをRFC822形式文字列に変換
UTC時刻文字列をdateオブジェクトに変換
epoch timeの処理

Posted in Books news PRODUCTS | Leave a comment

新発売:AppleScript 7つの宝珠(2)〜第2の宝珠 if文〜条件分岐

Posted on 10月 19, 2022 by Takaaki Naganoya

Piyomaru Software Booksの63冊目。「AppleScript 7つの宝珠 神より授かりしプログラミングの魔法」第2の宝珠 if文〜条件分岐を発売しました。PDF 37ページとなっています。

→ 販売ページ

ものすごい変化球で作ってみた本の続刊で、他に書いていた巨大なテーマの本で挫折して中断したので、その気分転換に書いてみました。魔導書になぞらえたプログラミング入門書です。

入門書とひとことにいってもいろいろあります。決められたカリキュラムを淡々とこなしていくタイプ、根本からテーマを掘り下げるタイプ。そして本書は後者に該当し、「その技術が存在しなかった時代」というものを想像し、その技術を獲得したことにより魔法(プログラミング)はどう進化したのか、どのようなメリットがあったのかという「進化史」をなぞるような構成です。

誰もが、最初はif文の存在なんて知らなかったわけで、それを覚えて徐々に書けるものが進歩していったわけです。人間でいえば、赤ん坊の頃にハイハイして這って歩いていたのが、つかまり立ちするようになり、そして立って歩けるようになった、と。そうした過程をなぞってみたもので、割と真剣に作っているものです。

目次

■魔導書「7つの宝珠」

神(Computer)との対話を行う人の子の書
失われし魔法の7つの宝珠を求めて
変数と代入文という最初の宝珠
if文〜条件分岐という宝珠
繰り返しループ 体力を削らせない宝珠
配列変数 詠唱呪文の機能を高める宝珠
コメント文 失われた知恵の宝珠
ログ表示 簡単に変数の中身を確認する宝珠
終了 そこで呪文実行を止める宝珠

■第2の宝珠if文〜条件分岐

神の言葉から人の子の言葉への移行
例外事項の指定が効率化を生む
牛飼いを羊飼いに変える変数
魔法が自分で判断を行う条件分岐魔法
大きい、小さいといった関係性を表現
「含まれる」ことを調べられる魔法演算

■条件分岐魔法呪文入門

魔法入門〜条件分岐呪文
条件式
条件文
条件文(魔法言語AppleScriptで記述)
文字列の大小判定&並べ替え=ソート①
文字列の大小判定&並べ替え=ソート②
複数の値をまとめて判定
文字をコード(番号)で指定
ゆうしゃ(=あなた)のステータス

Posted in Books news PRODUCTS | Leave a comment

UI BrowserがLate Night Software, ltdによって継続サポートされることが発表される

Posted on 10月 18, 2022 by Takaaki Naganoya

AppleScriptからGUIアプリケーションのメニューやボタンなどにアクセスして強引に動かす、「GUI Scripting」のために、Scripter必携ツールとして愛されてきた「UI Browser」が、作者のBill Cheesemanの引退にともなって2022年10月17日をもって販売終了する、との発表が2022年4月17日に行われました。

この発表があった後に、カナダLate Night SoftwareのCEO Mark Alldrittが、Bill Cheesemanに「UI Browser」の引き継ぎについて打診していたとの話で、前向きな返答がありつつも合意に到達していなかったとのことから、具体的な方向性が見えていない状況でした。

本日、Late Night Softwareから発表があり、同社がUI Browserの配布およびサポートを行うことでBill Cheesemanとの間で合意したとのこと。現行の最新バージョンであるUI BrowserをLate Night Softwareが配布を行える体制を構築したとのこと。

UI Browserをすでに購入した人は使い続けられますし、未購入の人もUI Browser 3.0.2を試用モードで使い続けられるとのことです。

ただし、ソースコードがBill CheesemanからLate Night Softwareに受け渡されているわけではないので、内容の改変は行えない状況です。

あくまで憶測になりますが、Webの販売システムとプログラムが緊密にリンクしており、そのあたりを分離して受け渡すだけでも作業が発生してしまうという状況なのでしょう。一応、ソースコードはXcodeのプロジェクトで管理されている雰囲気ですが、C++使いまくりのプログラムで相当に癖が強そうです。

Posted in news | Tagged UI Browser | Leave a comment

Keynoteでオープン中の書類をすべてデスクトップにPDF書き出しして最初のページをJPEG画像化

Posted on 10月 15, 2022 by Takaaki Naganoya

Keynoteでオープン中の書類すべてをPDF書き出しして、各PDFの最初のページをJPEG画像に書き出すAppleScriptです。書き出し先はデスクトップフォルダです。Keynote v12.1+macOS 12.6.1で動作確認しています。

それぞれ、PDF書き出しするScriptと、PDFをJPEGに変換するAppleScriptは個別に書いて使っていたのですが、処理数が増えるといちいち複数のScriptをかわるがわる実行するのも面倒に。

そこで、PDF書き出し→JPEG変換を行うものを作ってみました。作ったみたといっても、部品はすでに存在していたので繋ぎ合わせただけです。

AppleScript名:すべてデスクトップ上にPDF出力し、最初のページをJPEG出力.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2022/10/14
—
–  Copyright © 2022 Piyomaru Software, All Rights Reserved
—

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

property NSString : a reference to current application’s NSString
property NSFileManager : a reference to current application’s NSFileManager
property NSOrderedSame : a reference to current application’s NSOrderedSame

set outPathList to {}

tell application "Keynote"
  set allDocs to every document
  
if allDocs = {} then return
  
  
repeat with i in allDocs
    set j to contents of i
    
set dRes to exportKeynoteDocToPDF(j) of me
    
set pdfPath to (POSIX path of dRes)
    
set pdfPath to chkExistPOSIXpathAndIncrementChildNumberFull(pdfPath) of me
    
set jRes to (my jpegFromPath:(pdfPath) compressFactor:1.0)
    
set the end of outPathList to jRes
  end repeat
end tell

return outPathList

–Keynote書類からPDF書き出し
on exportKeynoteDocToPDF(targKeynoteDoc)
  
  
tell application "Keynote"
    set dCount to count every document
    
if dCount = 0 then
      –オープン中のKeynote書類がない場合はリターン
      
return false
    end if
    
    
set aPath to file of targKeynoteDoc
  end tell
  
  
set tmpPath to (path to desktop) as string
  
set curPath to (NSString’s stringWithString:(POSIX path of aPath))’s lastPathComponent()’s stringByDeletingPathExtension()’s stringByAppendingString:".pdf"
  
set outPath to (tmpPath & curPath)
  
set outPath to chkExistPOSIXpathAndIncrementChildNumberFull(outPath) of me
  
–do shell script "touch " & quoted form of POSIX path of outPath –Error 6を回避するための記述
  
  
tell application "Keynote"
    –set anOpt to {class:export options, export style:IndividualSlides, all stages:false, skipped slides:true, PDF image quality:Good}
    
–set anOpt to {class:export options, export style:IndividualSlides, all stages:false, skipped slides:true, PDF image quality:Better}
    
set anOpt to {class:export options, export style:IndividualSlides, all stages:false, skipped slides:true, PDF image quality:Best}
    
export targKeynoteDoc to POSIX file outPath as PDF with properties anOpt
  end tell
  
  
return ((POSIX file outPath) as alias)
end exportKeynoteDocToPDF

on jpegFromPath:imagePath compressFactor:compFactor — 0.0 = max compression, 1.0 = none
  — build destination path
  
set pathNSString to current application’s NSString’s stringWithString:imagePath
  
set destPath to pathNSString’s stringByDeletingPathExtension()’s stringByAppendingPathExtension:"jpg"
  
  
— load the file as an NSImage
  
set theImage to current application’s NSImage’s alloc()’s initWithContentsOfFile:imagePath
  
if theImage = missing value then return false
  
  
set theData to theImage’s TIFFRepresentation()
  
set newRep to current application’s NSBitmapImageRep’s imageRepWithData:theData
  
set theData to (newRep’s representationUsingType:(current application’s NSJPEGFileType) |properties|:{NSImageCompressionFactor:compFactor, NSImageProgressive:false})
  
  
set theResult to (theData’s writeToFile:destPath atomically:true) as boolean
  
return destPath as string
end jpegFromPath:compressFactor:

–POSIX path stringを与えると、ファイル名の重複を検出して、ファイル名の名称回避を行って、ファイル名のみを返す
on chkExistPOSIXpathAndIncrementChildNumberFull(a)
  set aa to POSIX path of a
  
set aStr to NSString’s stringWithString:aa
  
set bStr to aStr’s lastPathComponent()
  
  
set cStr to (bStr’s pathExtension()) as string
  
set dStr to (bStr’s stringByDeletingPathExtension()) as string
  
set eStr to (aStr’s stringByDeletingLastPathComponent()) as string
  
  
set aManager to NSFileManager’s defaultManager()
  
set aRes to (aManager’s fileExistsAtPath:aStr) as boolean
  
if aRes = false then return aa
  
  
set hitF to false
  
repeat with i from 1 to 65535
    
    
set tmpPath to (eStr & "/" & dStr & "_" & (i as string) & "." & cStr)
    
set tmpStr to (NSString’s stringWithString:tmpPath)
    
set aRes to (aManager’s fileExistsAtPath:tmpStr) as boolean
    
set bRes to ((tmpStr’s caseInsensitiveCompare:eStr) is not equal to (NSOrderedSame)) as boolean
    
    
if {aRes, bRes} = {false, true} then
      set hitF to true
      
exit repeat
    end if
    
  end repeat
  
  
if hitF = false then return false
  
  
–ファイルパス(フルパス)を返す
  
return (tmpStr as string)
end chkExistPOSIXpathAndIncrementChildNumberFull

★Click Here to Open This Script 

Posted in Image PDF | Tagged 12.0savvy Keynote | Leave a comment

macOS 12.6.1、組み込みAppleScript実行環境の「script objectで分離したハンドラが呼べない」問題が解消?

Posted on 10月 12, 2022 by Takaaki Naganoya

macOS 12.6.1がアップデートして12.6.1になるというわけのわからないバージョン番号の採番ルールが展開されている今日このごろ。

macOS 12の初期において、Shortcuts.appやCotEditor内部のAppleScript実行環境において、script objectで論理分割した中にあるハンドラを呼べない という問題が確認されました。ただし、macOS 12.6.1で気づいたということであって、もう少し前のバージョンでこの変更が加わっていた可能性もあります。

ハンドラ呼び出しの範囲がscript objectを超えられないというわけで、CotEditor PowerPackの作成時に大幅にScriptを書き換える必要があって手間がかかった記憶があります。

AppleScript基礎テクニック集25巻にて「CotEditorのメニューScriptとShortcuts.appでは対策が必要」と書こうとして、念のために実際にmacOS 12.6.1の上でCotEditor v4.3.6で確認したところ、動きました。Shortcuts.appでも同様にscript object内部のハンドラを外部から呼び出せるようになっていました。

# 慌てて、書籍の方を書き換えました

各プログラム側で何かそんなマイナーな問題への対策を行ったような雰囲気はなかったので、OS側の実行モジュール(osascript?)で対策を行ったような雰囲気があります。ただ、Appleがリリースノートを一切出さないので、確認のしようがありません(ものすごく不信感しかないので、リリースノートは出してほしいなー。まさか、詳細なリリースノートを出さないことで、クラッカーへの情報流出を防止できている、とか現状を肯定的に捉えているのだろうか)。

Posted in Bug | Tagged 12.0savvy CotEditor Shortcuts Shortcuts Events | Leave a comment

新発売:AppleScript基礎テクニック集(26)処理停止

Posted on 10月 12, 2022 by Takaaki Naganoya

Piyomaru Software Booksの62冊目。基礎テクニック集26巻目の「処理停止」を発売しました。本文32ページとなっています。

→ 販売ページ

AppleScriptによる自動処理中に、途中で止めたいという状況は生まれることでしょう。

そのときになって、はじめて人は気付くのです。「どうやって止めたらいいんだろう?」と。

AppleScriptの処理を止める、途中で中断する……という一見シンプルな要望は、そのScriptがどの実行環境によって実行されているのか? という話がわかっていないと叶えられません。

AppleScriptが実行中に、止めるための操作方法、確実に止めるための仕組みづくりなどを解説します。

■AppleScript処理系ごとの標準的な停止方法

AppleScriptを途中で止めるために
AppleScriptの主要実行環境
スクリプトエディタの実行停止操作
Script Debuggerの実行停止
Automatorの実行停止
Shortcutsの実行停止
Visual Studio Codeの実行停止
スクリプトメニューの実行停止
CotEditorのスクリプトメニュー実行停止
TerminalのAppleScript実行停止
アクティビティモニタ上で実行プロセスを強制停止
Command-Option-Escで強制停止

■積極的に止めるためにループ中で停止チェック

標準的な方法では、停止できることの方が珍しい
対処方法:メインループ中に「何か」を監視して停止

■いつでも確実に停止できるようAppleScript実行環境ごと終了

いつでもすぐに確実に停める!
サンプルScript
サンプルスクリプトの書き出し方
サンプルスクリプトの実行画面

Posted in Books news PRODUCTS | Leave a comment

新発売:AppleScript基礎テクニック集(25)Script分割と統合

Posted on 10月 12, 2022 by Takaaki Naganoya

Piyomaru Software Booksの61冊目。基礎テクニック集25巻目の「Script分割と統合」を発売しました。本文32ページとなっています。7月ぐらいから書いていたので、割とこのシリーズの電子書籍では試行錯誤の期間が必要だったものです。ほぼ同時に3冊出ていますが、長期間書いて、途中で行き詰まって放り投げて、後から着手したら割とすぐに仕上がった….という感じでしょうか。

→ 販売ページ

何気ないAppleScriptを書いているだけでは直面しない問題なのですが、書いているスクリプトが「巨大」になると、いろいろ問題が出てきます。

それを避けるためには、Scriptを小分けにすること=分割することが必要です。さらによいことに、小分けにしたScriptは再利用が簡単になります。

そうして、さまざまな大きさのScriptを書いていると、途中である程度の機能の塊を取り出して動作検証する必要が出てきます。いわゆる「分解修理」(オーバーホール)という作業です。

部品単体で動作検証するのではなく、ハンドルとかエンジンとかトランスミッションといった、ある程度の機能の塊になっているものを、塊のまま取り出して、単独で動作確認できるようにしておく必要があります。

かように、Scriptの分割や結合は、割とAppleScriptの開発に欠かせない作業ノウハウなのです。

目次

■AppleScriptの分割単位と分割方法

AppleScriptの分割
AppleScriptの分割手段
Ⓐハンドラ、サブルーチン
ⒷScript Object❶
ⒷScript Object❷
ⒸAppleScriptライブラリ(物理分割)
ⒹScriptファイル分割(物理分割)

■AppleScriptの論理/物理分割の目的

AppleScriptは分割しないとリスクが高まる
目的①生産効率の向上
目的②記述/動作時の安定性の向上
目的③問題発生時に分解して動作検証しやすく
目的④異なるバージョンのアプリをサポート
分割したスクリプトは再利用性が高まる

■オーバーホール(分解修理)を前提とした、単体検証可能なAppleScriptのモジュール構成例

分解修理はよく発生します
ファイルを取り出して単独チェック
実戦レベルのScriptを例に、分解修理への備えを紹介
参考資料:書籍のデータ構造
1つの書類を処理(PDF出力→連結)するライブラリ

Posted in Books news PRODUCTS | Leave a comment

新発売:AppleScript実践的テクニック集(1)GUI Scripting

Posted on 10月 10, 2022 by Takaaki Naganoya

Piyomaru Software Booksの60冊目。GUIアプリケーションを強引に動かす「GUI Scripting」について動作原理から気をつけるべき点、実戦レベルのScriptで注意している点やサンプルなどをまとめた「AppleScript実践的テクニック集(1)GUI Scripting」を発売しました。本文283ページとなっています。

→ 販売ページ

「AppleScript実践的テクニック集」とは、従来の「基礎テクニック集」の枠組みでは収まりきらないテーマを扱う新シリーズです。基礎テクニック集は32ページ前後のコンパクトな構成にするために、いろいろ省略した部分もありましたが、この枠組みに入り切らないテーマを別枠でご紹介することにしたものです。

ページ数の上限をとくに設けず、徹底的に情報を入れる設計です。それでいて、「基礎テクニック集」ゆずりの図や表を多用した構成はそのままです。

使い所さえ間違えなければ強力な武器になるGUI Scriptingについて、動作原理からノウハウ、注意すべきポイントや実戦レベルのScriptで気をつけていること、さまざまな「ありがちな処理」のサンプルなどを紹介する1冊です。

■GUI Scripting (UI Element Scripting)とは?

AS用語辞書にすべての機能は掲載されていません①
AS用語辞書にすべての機能は掲載されていません②
AppleScript非対応機能を呼ぶGUI Scripting
GUI Scriptingとは?
GUI ScriptingはSystem Eventsごしに操作
操作対象のアプリケーション①
操作対象のアプリケーション②

■AppleScript非対応機能を操作する

KeynoteでASから利用できない機能を呼ぶ
GUIアプリケーションの挙動確認が欠かせません
メニュー項目操作の実例
実行結果のリストアップ①
実行結果のリストアップ②

■GUI Scriptingの実行を許可する

デフォルト状態だとGUI Scriptingは無効
AppleScript実行アプリケーションを登録
設定するとGUI Scriptingが有効に
スクリプトメニューも登録必須
資料:macOS上のAppleScript実行環境①
資料:macOS上のAppleScript実行環境②

■GUI部品への参照を求める方法

メニュー項目:メニューを頂点としたツリー
ウィンドウ上のオブジェクト:ウィンドウが基準
簡単なGUI部品の求め方

■GUI Scriptingでやりたい特徴的な操作

GUI Scriptingの有効チェック
属性値の取得(properties)
属性値の取得(AX-attributes)
GUI部品のクリック
指定座標のクリック
参考資料:GUI Scriptingの座標系
ポップアップメニューの項目選択
キー入力操作
項目選択
コンテクストメニューの表示
スクロール操作
ファイル保存/書き出し
自分で発生させたモーダルなダイアログのクリック
ドラッグ&ドロップ操作
日本語IMの文字入力モード取得/設定

■マウスカーソルの強制移動&強制クリック

マウスカーソルを移動させる必要性
マウスカーソルの強制移動とクリック

■実戦レベルのAppleScriptにおけるGUI Scripting解説

指定フォルダ以下のPagesなどをPDF出力して連結
実際のメインScript部分
generatePDFLibの当該箇所
本プログラムが環境の影響を受けた点
参考資料:デスクトップの表示/非表示切り替え

■Accessibility Inspectorの使い方

Xcodeに入っているGUI部品探索ツール
Accessibility Inspectorの画面構成①
Accessibility Inspectorの画面構成②
プロセス一覧から対象を選択してInspection
指定プロセスのGUI部品の追跡中の画面表示
GUI部品の追跡ポーズ中の画面表示

■OSやアプリケーションのアップデートに備える

OSアップデートごとにGUI構成は変わる
GUI Scripting処理部分だけをサブルーチンに分離
GUI Scripting処理部分をライブラリに分離
OSアップデートの影響を受けにくい構造に

■GUI Scriptingの信頼性は?

GUI Scriptingの信頼性は?
一般的な信頼性の計測方法
経験に基づく傾向と対策
GUI Scriptingで直面した問題とその解決策
指定した処理の終了前に次の処理が行われる
同じ名前のプロセスが存在していると名称衝突①
同じ名前のプロセスが存在していると名称衝突②

■GUI Scriptingサンプル集

指定のアプリケーションの全メニュータイトルを取得
選択中のテキストを取得
選択中のテキストを書き換え
Safariの最前面のウィンドウへの参照を得る
GUI部品への参照から所属するアプリケーション名を取得
Dockに登録されているアイコンの情報を取得
Keynoteで選択中のテキストを縦書きに
CotEditorで最前面のウィンドウを縦書きに

■GUI Scripting資料集

click【クリック】コマンド
key code【キーコード】コマンド
keystroke【キーストローク】コマンド
perform【パフォーム】コマンド
select【セレクト】コマンド
application【アプリケーション】クラス
action【アクション】クラス
application process【アプリケーションプロセス】クラス
attribute【アトリビュート】クラス
browser【ブラウザ】クラス
busy indicator【ビジーインディケータ】クラス
button【ボタン】クラス
checkbox【チェックボックス】クラス
color well【カラーウェル】クラス
column【カラム】クラス
combo box【コンボボックス】クラス
desk accessory process【デスクアクセサリプロセス】クラス
drawer【ドロワー】クラス
group【グループ】クラス
grow area【グローエリア】クラス
image【イメージ】クラス
incrementor【インクリメンタ】クラス
list【リスト】クラス
menu【メニュー】クラス
menu bar【メニューバー】クラス
menu bar item【メニューバーアイテム】クラス
menu button 【メニューボタン】クラス
menu item 【メニューアイテム】クラス
outline 【アウトライン】クラス
pop over 【ポップオーバー】クラス
pop up button 【ポップアップボタン】クラス
process 【プロセス】クラス
progress indicator 【プログレスインジケータ】クラス
radio button 【ラジオボタン】クラス
radio group【ラジオグループ】クラス
relevance indicator【レレベンスインジケータ】クラス
row【ロー】クラス
scroll area【スクロールエリア】クラス
scroll bar 【スクロールバー】クラス
sheet 【シート】クラス
slider【スライダ】クラス
splitter【スプリッタ】クラス
splitter group【スプリッタグループ】クラス
static text【スタティックテキスト】クラス
tab group【タブグループ】クラス
table【テーブル】クラス
text area【テキストエリア】クラス
text field【テキストフィールド】クラス
toolbar【ツールバー】クラス
UI element【ユーアイエレメント】クラス
value indicator【バリューインディケータ】クラス
window【ウインドウ】クラス

■AppleScript資料集

macOSバージョンとAppleScriptの動向
macOSとAppleScriptの要素技術史
各macOSごとのAppleScript解説
macOS内AppleScript補助ツールの歴史
System EventsのAppleScript用語辞書変更点
AppleScript 各ランタイム環境情報
AppleScript予約語一覧
AppleScriptのエラーコード
あとがき
奥付

Posted in Books GUI Scripting news PRODUCTS | Tagged 12.0savvy CotEditor Keynote System Events TextEdit | Leave a comment

Keynote書類のdefault title item部分に入った改行コードを除去する

Posted on 10月 9, 2022 by Takaaki Naganoya

Keynote v12.1書類の現在のスライドにあるdefault title itemに入っている改行コード(?)を除去するAppleScriptです。

結論から言うと、これが改行コード(LFとかCRとか)ではなく、Unicode特殊文字の「LINE SEPARATOR」(U+2028)であることが、データをhexdumpしてわかりました(AppleScript書いてるだけなのに、hexdumpのお世話になることの多いこと、多いこと)。なので、文字コードをUTF-16(AppleScript側の文字コード)で指定して置換を行なっています。

# AppleScriptのネイティブ文字コードはUTF-16BEです

Keynote書類の各Slideに存在しているdefault title itemから文字列(object text)を取得し、改行コードを除去する処理を行います。

AppleScript名:default title item部分に入った改行コードを除去する.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2022/10/09
—
–  Copyright © 2022 Piyomaru Software, All Rights Reserved
—

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

tell application "Keynote"
  tell front document
    tell current slide
      set jj to object text of default title item
      
      
–https://www.fileformat.info/info/unicode/char/2028/index.htm
      
–Unicode Character ’LINE SEPARATOR’ (U+2028)
      
–UTF-16 (decimal)  8,232
      
set kk to repCharByID(jj, 8232, "") of me
      
log kk
      
    end tell
  end tell
end tell

–文字置換
on repCharByID(origText as string, targCharID as number, repChar as string)
  set targChar to string id targCharID
  
set curDelim to AppleScript’s text item delimiters
  
set AppleScript’s text item delimiters to targChar
  
set tmpList to text items of origText
  
set AppleScript’s text item delimiters to repChar
  
set retText to tmpList as string
  
set AppleScript’s text item delimiters to curDelim
  
return retText
end repCharByID

★Click Here to Open This Script 

Posted in Text | Tagged 12.0savvy Keynote | Leave a comment

新発売:iWork Scripting Book with AppleScript

Posted on 9月 30, 2022 by Takaaki Naganoya

Piyomaru Software Booksの59冊目。Keynote、Pages、Numbersの3つのアプリケーションのScriptingについて、共通する部分に着目して3つとも解説するScripting本、「iWork Scripting Book with AppleScript」を発売しました。本文239ページ、資料編198ページの合計437ページの大ボリウムです。

→ 販売ページ

目次

スクリプトエディタを起動しよう
スクリプトエディタを起動しよう!
スクリプトエディタのヘルプ
色設定を変えてみよう!
スクリプトを入力してみよう
スクリプトを保存しよう
スクリプトを実行しよう(1/3)
スクリプトを実行しよう(2/3)
スクリプトを実行しよう(3/3)
セキュリティとプライバシー
セキュリティとプライバシー>プライバシー
iWork appsを起動しよう
Keynote/Pages/Numbersを指定
Keynote/Pages/Numbersを起動
Keynote/Pages/Numbersを終了
Mail.appのAppleScript用語辞書の調べ方
メニュー項目や画面強制操作の調べ方
各iWork appsの詳細仕様について
iWork appsの情報を取得しよう
アプリケーションの名前を取得
アプリケーションの情報を一括取得
アプリケーションのプロパティ項目と内容
新規書類の作成
新規書類の作成
テーマ/テンプレート名の取得
テーマ/テンプレートを指定しつつ新規書類作成①
テーマ/テンプレートを指定しつつ新規書類作成②
参考資料:テーマ/テンプレート名
Keynote:SD/HD、他のサイズの書類の指定
新規スライド/ページ/シートの作成
各iWork appsにおける新規ページの作成
Keynote:レイアウト名の取得とスライド追加
Pages:ページ追加
Numbers:シート追加
書類情報の取得
書類からの各種情報取得
書類名(name)はFinder設定と連動
書類のパスワード保護状態を取得
書類保存
書類を保存(保存ずみ書類に上書き保存)
書類を新規保存①
書類を新規保存(A.)
書類を新規保存(B.)
書類を新規保存(C.)
コラム「iWork appsが使用するパス表現」
書類へのパスワード
設定と解除
iWork書類へのパスワード設定
パスワード設定されたiWork書類のオープン
書類へのパスワード設定と解除
通常書類とパスワード保護された書類の比較

■中級

書類上の座標系
書類上の座標系
Pages書類の座標系
現在表示中のページ
書類上の現在表示中のページ番号を取得
選択中のアイテムの取得
selectionで取得できる選択中のオブジェクト
Numbersで取得できる表オブジェクト情報
デフォルトタイトル
アイテムへの文字設定(Keynote)
デフォルトタイトルアイテムのオブジェクト
デフォルトタイトルアイテムのテキストを取得
デフォルトタイトルアイテムにテキストを設定
Pagesの本文作成
書類タイプ別のPages本文の作り方
Pagesの文章の本文(body text)の操作
Pagesの文章の本文(body text)の色指定
Pagesの文章の本文(body text)のフォント指定
Pagesの文章の本文(body text)の単語にアクセス
Pagesの文章のページにアクセス(追加)
Pagesの文章のページにアクセス(削除①)
Pagesの文章のページにアクセス(削除②)
Pagesの文章のセクションにアクセス
Pagesの文章のセクションにアクセス
選択中の表からのデータ取得/設定
選択範囲(selection range)へのアクセス
選択範囲のセルの取得
選択範囲のセルのデータの取得
指定セルのデータの取得①
指定セルのデータの取得②
指定範囲のセルのデータの取得
カラム名の数値からの変換
指定範囲のセルのデータを2次元配列で取得①
指定範囲のセルのデータを2次元配列で取得②
指定範囲のセルのデータを2次元配列で取得③
指定セルにデータを設定①
指定セルにデータを設定②
指定範囲のセルへの配列データの設定
表にクリップボード経由で大量の2次元配列データを設定
テキストボックスの作成
テキストボックスのオブジェクト
テキストボックスの作成
表の作成
表の作成
表の作成+データ設定
表のソート、
セルの結合と分離
表の昇順(A→Z)ソート
表の降順(Z→A)ソート
表セルの結合
結合セルの解除
画像(image)の挿入
指定画像の挿入
Keynote:イメージスライドの作成
shape, lineの作成
shape/lineの分類
shapeの識別
shapeの作成
放射状にラインを引く(Keynote)
放射状にラインを引く(Pages)
放射状にラインを引く(Numbers)
audio clip, movieの作成
音声トラックのaudio clipの作成
ムービー(movie)の作成
プレースホルダへのデータさしこみ(Pages)
プレースホルダとは?
Pagesのテキストプレースホルダの作成①
Pagesのテキストプレースホルダの作成②
Pagesのテキストプレースホルダを利用
Pagesのメディアプレースホルダの作成
Keynoteのテキストプレースホルダ
グループへのアクセス
Keynote:グループ内のオブジェクトにアクセス
Pages:グループ内のオブジェクトにアクセス
Numbers:グループ内のオブジェクトにアクセス
Keynote:グループ内のオブジェクトの親にアクセス
シート処理(Numbers)
Numbers:シートの新規追加
Numbers:シートの削除、表示切り替え
Numbers:シートの名称変更
Numbers:現在表示中のシートのIDを返す
Numbers:シートの名称による検索
スライドの追加と順次ループ(Keynote)
Keynote:スライドの追加
Keynote:スライドの順次ループアクセス
Keynote:スライドの順次追加
スライド間の表示切り替えエフェクト指定(Keynote)
Keynote:スライド切り替え効果一覧
Keynote:スライド切り替えを設定
発表者ノート(Keynote)を記入
Keynote:発表者ノートとは?
Keynote:発表者ノートの操作
表への計算式の代入
iWork appsで共通して利用できる関数
表のセルに計算式を代入
表のセルの計算結果(値)を取得
表のセルの計算式を取得
グラフ作成(Keynote)
Keynoteで扱えるグラフの一覧
Keynote:2D横/縦棒グラフ
Keynote:3D横/縦棒グラフ
Keynote:2D/3D面グラフ
Keynote:2D/3D円グラフ
Keynote:2D散布図グラフ
Keynote:2D積み重ね縦/横棒グラフ
Keynote:3D積み重ね縦/横棒グラフ
Keynote:2D/3D階層グラフ
Keynote:2D/3D折れ線グラフ
データの書き出し(エクスポート)
各iWork appsが書き出し可能なフォーマット
書き出し用ファイルパスの組み立て
PDF書き出し
Microsoft Office書類として書き出し
Keynote:HTML書き出し
Keynote:QuickTimeムービー書き出し
Keynote:イメージ書き出し
Keynote:Keynote 09形式書き出し
Pages:EPUB形式書き出し
Pages:テキスト書き出し
Pages:Pages 09形式書き出し
Pages:リッチテキストフォーマットで書き出し
Numbers:Numbers 09形式で書き出し
Numbers:CSV形式で書き出し
印刷
iWork appsから印刷出力
AppleScriptによるプリントアウト
Keynote:印刷オプションの指定
Pages:印刷オプションの指定
Numbers:印刷オプションの指定

■上級

書式付きテキストへのアクセス
Keynoteでobject textの書式属性設定
Pagesでobject textの書式属性設定
Numbersでobject textの書式属性設定
Keynoteでobject textの文字色、フォント置換
Pagesでobject textの文字色、フォント置換
Numbersでobject textの文字色、フォント置換
書式付きテキストの幅に応じたtext item自体のリサイズ
Text itemの枠の幅を文字内容でリサイズ①
Text itemの枠の幅を文字内容でリサイズ②
Text itemの枠の幅を文字内容でリサイズ①
Text itemの枠の幅を文字内容でリサイズ②
Text itemの枠の幅を文字内容でリサイズ①
Text itemの枠の幅を文字内容でリサイズ②
text item内のテキストの使用言語の自動推定
Keynote:書類中のtext itemの使用言語を推定①
Keynote:書類中のtext itemの使用言語を推定②
Pages:書類中のtext itemの使用言語を推定①
Pages:書類中のtext itemの使用言語を推定②
Numbers:書類中のtext itemの使用言語を推定①
Numbers:書類中のtext itemの使用言語を推定②
指定行列ヘッダによる表セルへのアクセス
Keynote:指定行列ヘッダによる表セルへのアクセス
Keynote:指定行列ヘッダによる表セルへのアクセス
Pages:指定行列ヘッダによる表セルへのアクセス
Pages:指定行列ヘッダによる表セルへのアクセス
Numbers:指定行列ヘッダによる表セルへのアクセス
Numbers:指定行列ヘッダによる表セルへのアクセス
汎用オブジェクト(iWork item)によるアクセス
汎用クラスiWork itemで取得できるオブジェクト
Keynote:iWork itemでアクセス
Pages:iWork itemでアクセス
Numbers:iWork itemでアクセス
オブジェクトの重なり検出(Keynote)
Keynote:テキストとshapeの重なり検出①
Keynote:テキストとshapeの重なり検出②
書類内部データへのアクセス
iWork app書類の構造
通常書類とパスワード保護された書類の比較
Keynote固有のプレゼン系操作について
Keynote:プレゼン再生コントロール
Keynote書類のプレゼン関連情報
Keynote:プレゼン再生関連の属性値
Keynote:transitionサンプル書類作成&再生

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

AppleScriptの数値変数で指数表示にならない最大値、最小値

Posted on 9月 26, 2022 by Takaaki Naganoya

いろいろ、本に書くさいに「数値9桁」みたいに書くことが多いですが、本当にギリギリまで指数表示にならない数値というのは、調べたことはありませんでした。

そこで、スクリプトエディタ上で指数表示にならないギリギリの数値を確認してみたところ、

±536,870,911

でした。日本語数値表現でいえば、5億3,687万911です。これは、macOS 12.6+M1 Mac mini上のスクリプトエディタで確認した数値です。

AppleScript名:指数表示にならない最大値と最小値.scpt
set a to 536870911
set b to -536870911
return {a, b}

★Click Here to Open This Script 

Posted in Number | Leave a comment

ファイル選択でiCloud Driveをデフォルトフォルダに指定

Posted on 9月 24, 2022 by Takaaki Naganoya

ファイル選択時にiCloud Driveをデフォルトのフォルダに指定するAppleScriptです。

macOS 10.9あたりでスクリプトエディタがiCloud DriveにAppleScriptを保存したり、iCloud Drive上のAppleScriptをオープンしたりできるようになりました。iCloud Drive上にAppleScriptライブラリを置いて参照することもできたはずですが、ちょっと情報が出てきません。

AppleScript名:ファイル選択でiCloud Driveをデフォルトフォルダに指定.scpt
set filePath to (path to library folder from user domain as text) & "Mobile Documents:"
set fRes to choose file default location (filePath as alias)

★Click Here to Open This Script 

Posted in dialog File path iCloud | Tagged 12.0savvy | Leave a comment

バカスタム App選手権 入賞!

Posted on 9月 18, 2022 by Takaaki Naganoya

FM-1グランプリ運営委員会(iC株式会社、合同会社イボルブ、株式会社未来Switch)が今年(2022年)に開催した、FileMaker Proの「笑えるソリューション」のコンテスト「バカスタムApp選手権」において、Piyomaru Softwareが応募した「FM-Clock」が入選を果たしました。

# あくまで入賞であって、優勝とか準優勝とかいうどえらいものではありません

「笑える作品」という、割ととらえどころのないテーマではありましたが、36ページにもわたる企画・仕様書を作成し、綿密な設計をおこなったうえで応募したことが入選につながったのではないでしょうか。協力してくれたすべての人々に感謝を!

Posted in news | Tagged FileMaker Pro | Leave a comment

Safari v16がリリースされる

Posted on 9月 14, 2022 by Takaaki Naganoya

Safari v16がリリースされました。AppleScript用語辞書的には、v15.6.1からとくに変更はありません。

ただし、v15.0.4から比べると、AppleScript用語辞書のサイズが半分に。よくよく調べてみると、v15.6.1のあたりでStandard Suitesの定義をxincludeで外部から参照するように変更されていました。

また、v15.6.1からはSafariのAppleScript用語辞書はきちんと清書されて改行が削除されない状態で入れられるようになったようです。

AppleScript用語辞書の改行削除は、Adobe InDesignやIllustratorあたりで見かけた小技で、改行コードを削除した分、当時のCPUで苦労していた辞書のParse処理負荷を軽減することを目的としていたようです。

ただ、その内容をどうやってメンテナンスしているのかは疑問で、もともとの改行が入ったAppleScript用語辞書が維持されていなければ、どう編集してよいかわからないことでしょう。

なので、今後も用語辞書を維持・変更していくうえでは、改行コードつきのAppleScript用語辞書のままであることは重要です。

とはいえ、Safari v16はAppleScript的には何も新しい機能はありません。

Posted in sdef | Tagged 12.0savvy Safari | Leave a comment

macOS 13 Beta 7 Font Book.appのAppleScript用語辞書が削除される

Posted on 9月 11, 2022 by Takaaki Naganoya

macOS 13の標準添付アプリケーションのAppleScript用語辞書をチェックする段階になって、Font Book.appのAppleScript用語辞書が削除されていることが判明しました。

Font Book.appは割と実用性が高く、気合いの入ったAppleScript用語辞書を搭載していましたが、どうもアプリケーション自体をすべてCatalystで書き換えたようで、その際にAppleScript用語辞書が削除されたようです。人によってはとても困るかもしれません(こういうことばっかりやるので、Catalyst製アプリケーションに負の感情を抱いてしまう)。

また、予想通り「システム環境設定」から「システム設定」に名前が変わったSystem Setting.appについては、一応System Preferences.app時代のAppleScript用語辞書がついているものの、paneの情報を取得したりidを指定してpaneを表示させたり、anchorの情報取得/表示は行えていません。

通例でいえば、macOS 13上ではこれらの機能は実装されず、macOS 14上で実装されるパターンですが、いつまでそんないい加減なことをやっているのでしょうか(Mac App Storeに出すときに、自社製アプリケーションも審査を通してリジェクトされるべき)。一応、レポートして文句は言っておきましたが、複数のチームにまたがる作業になるので、改修要望が通るかどうかはひたすらに不明です。

その他変更点は、Music.appにexportコマンドが追加され、Shortcuts.appのIconのApple Events Codeが変更になっている程度でしょうか。

Posted in beta news | Leave a comment

macOS 13 beta 7 スクリプトメニューの復活

Posted on 9月 10, 2022 by Takaaki Naganoya

macOS 13 Beta 7が出てきました。いまのところ、そんなに本気で使い込んでいるわけではありませんが、ド派手なバグには遭遇していません(気づいていないだけかも?)。

# 最近のmacOSのリリースは、Beta段階では大人しくしておいて、リリース後に大規模な改修を入れて完全体になるのが最終アップデートの頃なので…もう、2年おきのアップデートにしないと無理なのでは?

Beta 6まで起動すらしなかったスクリプトメニューがbeta 7で復活しています。起動させると、アイコン右側に何か余計な文字が出ているような気もしなくもありませんが、それでも復旧したことは喜ばしいことです。

あとは、全般的に…これまでアプリケーションのPreferencesは「環境設定」というメニュー項目になっていましたが、Venturaからは「設定」に変わるようです。ローカライズのテーブルが変更になったということなんでしょうが、気をつけたい箇所です。

Posted in beta news | 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