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

カテゴリー: Bug

Apple、macOS 16でクリップボードへのアクセスを制限

Posted on 5月 13 by Takaaki Naganoya

AppleがmacOS 16でクリップボードへのアクセスをiOSアプリ同様に制限する(認証を求める?)らしい、という話が出てきました。

Apple、Macアプリによるクリップボードの無断アクセスを制限へ

それだけなら、「なるほど」という話になるのですが、例によって検証をまともに行わないことが予想されるために、アプリ/アプレットのアイコンへのドラッグ&ドロップや、「サービス」を提供するプログラムにGUIがない場合に影響が出てくることでしょう(認証はGUIを持つプログラムに対してのみ行えるため)。

# 「サービス」機能は各アプリでメンテナンスしていないはずなので、対応せずに全滅するかも?

これは、相当に広い範囲にわたって影響が出るはずなので、問題動作がいたるところで発生することが予想されます。

各AppleScript実行プログラムに対してセキュリティ設定を行わないと、ファイルのドラッグ&ドロップやクリップボードの操作コマンドに問題が出るはずです。

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

macOS 15.5beta5(24F74)でaliasのキャスティングバグが修正された???

Posted on 5月 7 by Takaaki Naganoya

macOS 15.5beta5(24F74)が配信されたので、報告済みのバグが修正されているかを確認しました。

日本語環境で特定パターンのファイル名のファイルパスをas aliasでキャストすると処理系まるごとクラッシュするバグ
→ 修正されたように見えます。報告したファイル名パターンで追試したものの、クラッシュは確認されません。

ただ、Appleの傾向として「一度直った箇所が、複数チーム間の連携不足(絶無?)ですぐに再発」するので、経過観察といったところでしょうか。これまでに発生した(つまらない)バグ同様、何回も繰り返して発生することが予想されます。

アクセシビリティ系の音声コマンドの一覧が呼び出せないバグは、本バージョンでは修正されていません。

Posted in Bug news | Leave a comment

macOS 15.5beta4で報告済みのバグ何も直らず

Posted on 4月 29 by Takaaki Naganoya

macOS 15.5beta4が配信されましたが、とくに報告ずみのバグは何も直っていません。15.5台では直らないというよりも、バグとして認識していないんじゃないでしょうか?

正式リリースされたようですが、アクセシビリティの音声コマンドが動作していないバグについては、修正されていません。

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

macOS 15.5betaでアクセシビリティの音声コマンドが動作せず

Posted on 4月 23 by Takaaki Naganoya

macOS 15の初期バージョンでは動作することを確認していたのですが、目下macOS 15.5beta3でアクセシビリティ系の音声コマンドの機能が呼び出せないことを確認しています。

同機能は、日本語のファイル名をつけたAppleScriptアプレットを音声で呼び出せるため、音声操作が必要な用途では役立つものとして機能をチェックしてきました。ただ、Appleのワイヤレスヘッドセットのうち、AirPodsは音声認識に使えるもののAirPods Proが音声認識に使えなかったりと、ちょっと微妙な立ち位置になっていました。

AirPods/AirPods Proが使えるSiri系の操作機能と、この音声コマンドの2系統の音声操作機能が存在しており、統合するのかそのままなのか、さっぱり方向性が見えていない中のできごと。

アクセシビリティの機能が「システム設定」に存在しているのですが、画面上から内容を確認しようとするとエラーになります。

この問題は、日本語環境でも英語環境でも発生しています。


▲システム設定の「アクセシビリティ」>「音声コントロール」を選択


▲画面下の方の「Commands…」で音声コマンドの一覧を確認しようとして、クリックすると


▲エラーが出て表示されない

Posted in Bug news | Leave a comment

【続報】macOS 15.5で特定ファイル名パターンのfileをaliasにcastすると100%クラッシュするバグ

Posted on 4月 21 by Takaaki Naganoya

特定のパターンのファイル名のパスをaliasにcastする処理で処理系まるごとクラッシュするというmacOS 15.5β版(15.5 Beta(24F5053f))のバグ。

もっと以前から存在していたのかもしれませんが、特定のファイル名だとクラッシュを引き起こす前代未聞のバグがすごすぎて、いろいろ調べてみました。

文字依存する箇所はごくわずかで、いろいろ規則性があることがわかってきました。

・15.5 Beta(24F5053f)の日本語ユーザー環境(Primary LanguageをJapaneseにした状態)で発生。英語環境に変更すると発生しない
・ファイルパスをaliasにcastすると即・クラッシュ
・アルファベットとひらがな/カタカナが混在している必要がある???
・拡張子の種別は関係なく発生
・一定の文字数以上の長さが必要
・決定的な問題を引き起こすのは、濁点/半濁点つきのひらがな/カタカナが入っていること
・当初、記号文字やスペースが入っていることが条件かと思っていたが、これらを除去しても発生
・濁点/半濁点つき文字はファイル名の特定文字数以降に登場する必要がある。冒頭に移動させてもクラッシュは発生しない
・同じ処理内容のJXAでもクラッシュが発生する
・これらのクラッシュを誘発するファイル名がフォルダ名についていてもクラッシュは発生しない

現時点でクラッシュを発生させる最低限のファイル名は、

AAXAAXXあああああああああパ1.txt

であることを確認しています。

追記:
macOS 15.5β3(24F5053j)でも継続して発生中です。

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

macOS 15.5で特定ファイル名パターンのfileをaliasにcastすると100%クラッシュするバグ

Posted on 4月 19 by Takaaki Naganoya

きわめて珍しいパターンのバグに遭遇しました。自分の手元のmacOS 15.5Beta2環境(Apple Silicon Mac x 2)では再現率100%です(FB17285323)。再起動しても再現し、日本語環境で発生する一方で英語環境では発生しません。日本語環境であればJXAでも同様の現象の発生を確認しています。

「AppleScript+Xcode GUIアプリ ソースブック.key」

というファイル名のKeynote書類を、macOS 15.5β(日本語ユーザー環境)+Keynote v14.4で編集。このKeynote書類のボツスライドの移動用の「没.key」という書類をもとの書類の同階層に同じスタイルで作成するAppleScriptをスクリプトメニューから実行したところ、これがクラッシュ。

ねんのために、PagesとNumbersでも同様のテストを行なったところ、予想どおり100%クラッシュ。

これまでのmacOSでは遭遇したことのない現象だったので、原因を深掘り。

最終的に、Keynote/Pages/Numbers v14.4の書類からファイルパス(file)を取得し、そのfileをaliasにcastするとクラッシュするということが分かりました。

追記:Pixelmator Pro、CotEditorでも同様のファイル名に対して処理を行うとクラッシュすることが確認されました。

さらに追記:クラッシュを起こすパターンのファイルをchoose fileして、フルパスをstringにcastし、さらにaliasにcastするとアプリ操作に関係なくクラッシュすることが判明

さらに、ファイル名を短くしたり一部を取り出したりすることで、同様のクラッシュが発生するかどうかを調べてみたところ、

AppleScript+Xcode GUIアプリ ソースブ.key
AppleScript+Xcode GUIアプリ ソースブッ.key
AppleScript+Xcode GUIアプリ ソースブック.key
AAAAAAAA+XXXX GUIアプリ ソースブック.key
XXXXXXXX+XXXX XXXアプリ ソースブック.key
XXXXXXXX_XXXX XXXアプリ ソースブック.key
XXXXXXXX-XXXX XXXアプリ ソースブック.key
XXXXXXXX&XXXX XXXアプリ ソースブック.key
XXXXXXXX+XXXX GUIアプリ ソースブック.key
XXXXXXXX=XXXX XXXアプリ ソースブック.key

のパターンで、以下のAppleScriptを実行すると100%クラッシュが発生。スクリプトエディタでもScript Debuggerでもスクリプトメニューでも100%クラッシュ(実行プログラムのクラッシュ)します。

逆に、

AppleScript+Xcode GUIア.key
AppleScript+Xcode GUIアプ.key
AppleScript+Xcode GUIアプリ.key
AppleScript+Xcode GUIアプリ ソース.key
AppleScript+XCODE GUアプリ ソースブック.key
GUIアプリ ソースブックのコピー.key

ではクラッシュが発生しません(なんでや?)。

なんでこの組み合わせでクラッシュが発生するのか、macOS 10.12の時代に発生していた「日本語IMからのファイル名の入力時に余計なUnicode文字が入ることで、ファイル処理できなくなるバグ」の再現かと考え、このファイル名をテキストエディタにコピー&ペーストで表示させたものの、

とくに謎のゴミ文字が入力されているということはないようです。

ちなみに、「AppleScript+Xcode GUIアプリ ソースブック」は企画検討中の電子書籍です。

AppleScript名:Crash Test Script_Keynote.scpt
—
–  Created by: Takaaki Naganoya
–  Created on: 2025/04/19
—
–  Copyright © 2025 Piyomaru Software, All Rights Reserved
—

tell application "Keynote"
  tell front document
    set curFile to (file of it)
  end tell
end tell

set curFile to curFile as alias

★Click Here to Open This Script 

AppleScript名:Crash Test Script_PAGES.scpt
—
–  Created by: Takaaki Naganoya
–  Created on: 2025/04/19
—
–  Copyright © 2025 Piyomaru Software, All Rights Reserved
—

tell application "Pages"
  tell front document
    set curFile to (file of it)
  end tell
end tell

set curFile to curFile as alias

★Click Here to Open This Script 

AppleScript名:Crash Test Script_Numbers.scpt
—
–  Created by: Takaaki Naganoya
–  Created on: 2025/04/19
—
–  Copyright © 2025 Piyomaru Software, All Rights Reserved
—

tell application "Numbers"
  tell front document
    set curFile to (file of it)
  end tell
end tell

set curFile to curFile as alias

★Click Here to Open This Script 

AppleScript名:Crash Test Script_Pixelmator Pro.scpt
—
–  Created by: Takaaki Naganoya
–  Created on: 2025/04/19
—
–  Copyright © 2025 Piyomaru Software, All Rights Reserved
—

tell application "Pixelmator Pro"
  tell front document
    set curFile to (file of it)
  end tell
end tell

set curFile to curFile as alias

★Click Here to Open This Script 

AppleScript名:Crash Test Script_CotEditor.scpt
—
–  Created by: Takaaki Naganoya
–  Created on: 2025/04/19
—
–  Copyright © 2025 Piyomaru Software, All Rights Reserved
—

tell application "CotEditor"
  tell front document
    set curFile to (file of it)
  end tell
end tell

set curFile to curFile as alias

★Click Here to Open This Script 

AppleScript名:only choose file.scpt
set aFol to (choose file) as string
set anAlias to aFol as alias

★Click Here to Open This Script 

Posted in Bug | Tagged 15.0savvy Keynote | Leave a comment

AppleScript Dropletのバグっぽい動作が「復活」(macOS 15.5β)

Posted on 4月 11 by Takaaki Naganoya

ファイルのドラッグ&ドロップを受け付ける「ドロップレット」の異常動作がmacOS 10.12からずっと続いてきました。AppleScriptドロップレットに対して(Finderから)ファイルをドラッグ&ドロップすると、欠落するものが出てくるという現象です。

昨年、macOS 15.2betaか15.1あたりでこのバグが解消されたように見えました。

(確認中)AppleScript Dropletのバグっぽい動作が解消?

「見えました」というのは、一応現象としては観測できつつも、その動作を意図して実現していないんじゃないか、という懸念があったためです。つまり、Appleの現場なりマネージャー級で意思決定が行われた成果ではなさそうだ、と判定。

この動作がmacOS 15.5βで以前と同様の動作に戻っている(バグ的な動作)ことを観測しています。

on open droppedFiles
set fileCount to count of droppedFiles
display dialog “ドロップされたファイルの数: ” & fileCount buttons {“OK”} default button 1
end open

一応、ドラッグ&ドロップされたファイル/フォルダの受付で取りこぼしが出ないように対策は(Scripter側で工夫して)できているのですが、上記のように一般に知られている単純な受信コードでは対処できません。

ChatGPTをはじめとするLLMでは、上記のような単純なコードを出力することを確認しています。そして、Apple側がOSに不具合を発生させた場合にはLLMが出力するコードでは対処できません。

そして、macOSのヘルプメニューから表示できる「AppleScriptヘルプ」に書かれているドロップレットのコードがまともに動かないというのでは、話になりません。

Posted in Bug Droplet news | Tagged 15.0savvy | Leave a comment

ステータスメニューからアプリ本体を最前面に(改2)

Posted on 12月 24, 2024 by Takaaki Naganoya

GUIアプリのステータスメニュー上に置いたアイコン>メニューからアプリ本体のウィンドウをアクティブにできないという問題が発生していました。

macOS 13、14、15とずーーっとこの動作なので、全世界的に困らされている状況があって……久しぶりにXcodeでGUIアプリをAppleScriptで作って、この問題に例外なく自分も悩まされていました。macOS 15.2上ではこれで動いていたのですが、

-> ステータスメニューからアプリ本体を最前面に(改)

edama2さんから情報を教えていただき、ここで用いていた「activateIgnoringOtherApps」がmacOS 15.2でDeprecated扱いになったとのこと。

ただ、Appleのdocumentで紹介されていたNSApplicationのactivate()メソッドを使っても、この場合にはまともに動作しませんでした。代替手段を紹介しておきながら、それがまともに動かないというのはいかがなものでしょう。

昨今のWWDCでは、さっぱり地に足のついた情報が紹介されておらず、見るだけ時間の無駄といった印象を持っています。あてにならない大本営発表ばかりではなく、まともな情報を期待したいところですが、それは難しいところなのでしょうか。

一応、AppleScriptのactivateコマンドが動作するようになったので(macOS 14ではactivateでも最前面に持っていけませんでした)、そのように修正を行いました。

–> Download process Control test Project

AppleScript名:AppDelegate.applescript
—
— AppDelegate.applescript
— process Control test
—
— Created by Takaaki Naganoya2 on 2024/11/01.
—
—

script AppDelegate
  property parent : class "NSObject"
  
  
— IBOutlets
  
property theWindow : missing value
  
  
property NSMenu : a reference to current application’s NSMenu
  
property NSMenuItem : a reference to current application’s NSMenuItem
  
property NSStatusBar : a reference to current application’s NSStatusBar
  
property NSVariableStatusItemLength : a reference to current application’s NSVariableStatusItemLength
  
  
  
on applicationWillFinishLaunching:aNotification
    my initializeMenu:(aNotification)
  end applicationWillFinishLaunching:
  
  
  
on applicationShouldTerminate:sender
    return current application’s NSTerminateNow
  end applicationShouldTerminate:
  
  
  
on clicked:aSender
    my activateMe:(me)
    
set aTag to (tag of aSender) as integer –Important!!
    
set aTitle to (title of aSender) as string
    
    
if aTag is in {41, 42, 43, 44, 45, 46} then
      –my activateMe:aSender
      
current application’s NSApplication’s |activate|
    else if aTag = 100 then
      display dialog "Clicked"
    end if
    
    
if aTitle = "Quit" then quit
  end clicked:
  
  
  
on activateMe:aSender
    –macOS 13から15.0あたりまでactivateができなかった(多分バグ)
    
–current application’s NSApplication’s |activate|
    
tell current application to activate
    
–theWindow’s makeKeyAndOrderFront:(me)
    
theWindow’s orderFrontRegardless()
  end activateMe:
  
  
  
–Status Menu Structure
  
on initializeMenu:aSender
    set aList to {"Piyomaru", "Software", "", "Function", {"1", "2", "3", "4", "5"}, "", "Quit"}
    
    
set aStatusItem to current application’s NSStatusBar’s systemStatusBar()’s statusItemWithLength:(current application’s NSVariableStatusItemLength)
    
    
aStatusItem’s setTitle:" TEST "
    
aStatusItem’s setHighlightMode:true
    
aStatusItem’s setMenu:(createMenu(aList) of me)
  end initializeMenu:
  
  
  
  
on createMenu(aList)
    set aMenu to current application’s NSMenu’s alloc()’s init()
    
set aCount to 10
    
    
set prevMenuItem to ""
    
    
repeat with i in aList
      set j to contents of i
      
set aClass to (class of j) as string
      
      
if j is equal to "" then
        set aMenuItem to (current application’s NSMenuItem’s separatorItem())
        (
aMenu’s addItem:aMenuItem)
      else
        if (aClass = "text") or (aClass = "string") then
          
          
if j = "Quit" then
            set aMenuItem to (current application’s NSMenuItem’s alloc()’s initWithTitle:j action:"clicked:" keyEquivalent:"")
          else
            set aMenuItem to (current application’s NSMenuItem’s alloc()’s initWithTitle:j action:"clicked:" keyEquivalent:"")
          end if
          
          (
aMenuItem’s setTag:aCount)
          (
aMenuItem’s setTarget:me)
          (
aMenu’s addItem:aMenuItem)
          
          
set aCount to aCount + 10
          
copy aMenuItem to prevMenuItem
          
          
        else if aClass = "list" then
          –Generate Submenu
          
set subMenu to current application’s NSMenu’s new()
          (
aMenuItem’s setSubmenu:subMenu)
          
          
set subCounter to 1
          
          
repeat with ii in j
            set jj to contents of ii
            
            
set subMenuItem1 to (current application’s NSMenuItem’s alloc()’s initWithTitle:jj action:"clicked:" keyEquivalent:"")
            (
subMenuItem1’s setTarget:me)
            (
subMenuItem1’s setTag:(aCount + subCounter))
            (
subMenu’s addItem:subMenuItem1)
            
            
set subCounter to subCounter + 1
          end repeat
          
        end if
        
      end if
      
    end repeat
    
    
return aMenu
  end createMenu
  
end script

★Click Here to Open This Script 

Posted in AppleScript Application on Xcode Bug | Leave a comment

Skim v1.7.6でopen locationコマンドを実装するも動作せず

Posted on 12月 12, 2024 by Takaaki Naganoya

オープンソースのPDFリーダー「Skim」のバージョン1.7.6において「open location」コマンドが実装されましたが、実際に試してみると動きません。確認は最新版の1.7.7で行いました。

これまでにも追加したコマンドを次のバージョンで廃止して、翌々バージョンで復活させたりと、いろいろその歴史をひもとくと「おっとっと」な動きが見られるので、そういうものなんでしょう。

本Blog上に存在するPDFのURLを指定。open locationでダウンロード+表示を試みるものの、表示されずにエラーになる。

→ Skimが「http://」をサポートしていないとのこと。https://からのダウンロードおよび表示は確認しました。

AppleScript名:Skim v17.6で追加されたopen locationのテスト.scpt
set aURL to "http://piyocast.com/as/wp-content/uploads/2018/09/GUNDAM-UI.pdf"

tell application "Skim"
  set erRes to (open location aURL with error reporting)
end tell

★Click Here to Open This Script 

Posted in Bug | Tagged 13.0savvy 14.0savvy 15.0savvy Skim | Leave a comment

Cocoa-AppleScript AppletがRosettaオンで動いた!

Posted on 11月 29, 2024 by Takaaki Naganoya

macOS 13.6以降、スクリプトエディタに備わっているテンプレート「Cocoa-AppleScript Applet」から作成したアプレットが動作しなくなっていました。macOS 15.2Betaでもこの状況は変わりません。


▲スクリプトエディタ>ファイル>テンプレートから新規作成>Cocoa-AppleScript Applet.app を選択


▲Cocoa-AppleScript Appletのテンプレートで新規作成したところ


▲Cocoa-AppleScript Appletを作成して実行すると、このような警告ダイアログが表示される

通常のアプレットやScript Debuggerで作成したEnhanced Appletなどもあるため、致命傷ではないのですが……Scripter側でCocoaの利用経験がたまってきたために、「アプリケーション」という実行環境のさまざまなイベントを利用したいという声が出てきて、ようやくCocoa-AppleScript Appletが再評価されつつあった矢先の出来事でした。

# Cocoa-AppleScript Appletを使っているScripterなんて、edama2氏しか知りません

Appleにもバグレポートしているのですが、一向に直りません。そんな中、MacScripter.netにてred_menace氏が報告したところによると、「Rosettaをオンにして動かすと、動く」とのこと。なんの冗談だろうと疑いながら……

ためしに、Cocoa-AppleScript AppletをRosettaをオンにしてx64コードで動かすと、本当に動きました。これは驚きです。

ARM64Eバイナリが存在していないのかチェックしてみたら、

me@m1mini ~ % file /Users/me/Desktop/名称未設定Cocoa-AppleScript\ Applet.app/Contents/MacOS/CocoaApplet
/Users/me/Desktop/名称未設定Cocoa-AppleScript Applet.app/Contents/MacOS/CocoaApplet: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64e:Mach-O 64-bit executable arm64e]
/Users/me/Desktop/名称未設定Cocoa-AppleScript Applet.app/Contents/MacOS/CocoaApplet (for architecture x86_64): Mach-O 64-bit executable x86_64
/Users/me/Desktop/名称未設定Cocoa-AppleScript Applet.app/Contents/MacOS/CocoaApplet (for architecture arm64e): Mach-O 64-bit executable arm64e

そういうわけではないようです。このことから、Appleの現場ではApple Siliconで動作チェックを行なっていないか、チェック自体を行なっていないか、文字が読めないようです。

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

写真.appのバージョン番号、修正される

Posted on 11月 21, 2024 by Takaaki Naganoya

macOS 15.2betaにおいて「写真.app」のバージョン番号が「10.0」ではなく「1.0」になっていた件、本日配信されたmacOS 15.2beta(24C5089c)において「10.0」に修正されていました。


▲修正前


▲修正後

Posted in Bug | Tagged 15.0savvy Photos | Leave a comment

スクリプトエディタでFinderやスクリプトエディタ自身のAppleScript用語辞書をブラウズできない問題、解決か?

Posted on 11月 12, 2024 by Takaaki Naganoya

macOS 15.2 Beta(24C5079e)において、以前本BlogでレポートしていたスクリプトエディタでFinderやスクリプトエディタ自身のAppleScript用語辞書をオープンできない問題が解消されていることを確認しました。

ただし、本問題は再発する可能性が高いものと見ています。電子書籍「AppleScript最新リファレンス v2.8対応」のmacOS 15向けの改修を行なっていますが、

「macOS 15でFinderのAppleScript用語辞書を閲覧できない件」についての対処方法の追加記事が無駄になったことは、喜ばしいことなのでしょうか。きっと、再現して必要になるのでは? と思っているものです。

スクリプトエディタのコンテクストメニューに、絵文字を使ったファイル名のAppleScriptやフォルダが複数回表示されるバグの場合にも、Betaで修正を知らされてもRelease版では直っていなかったため、複数プロジェクト間で矛盾した設定や処理が行われていること自体が解消されてこなかったのでしょう。

Appleの会社組織が極度に縦割り化されているため、チーム間の連携とかチーム間にまたがる問題がいっこうに解決されないといった問題が発生しており、Aチームで修正を行っても他のBチームやCチームでは以前どおりの処理を行なってAチームの修正が無駄になるといった話を散々目撃してきました。

Posted in Bug | Tagged 15.0savvy Script Editor | Leave a comment

Apple、macOS標準搭載アプリ「写真」のバージョン表記を間違える

Posted on 11月 12, 2024 by Takaaki Naganoya

macOS 15.2betaにおいて、macOS標準搭載アプリ「写真」(Photos.app)の表示用バージョン番号が誤って「1.0」と記載されています。macOS 15 Betaの段階では「10.0」と記載されていたので、Release後にバージョン番号がおかしくなったのでしょう。

実際にAppleScriptからバージョンを求めても、”1.0″が返ってきます。

AppleScript名:macOS 15.2betaでPhotosのバージョンを間違っている検証
tell application "Photos"
  version
  
–> "1.0"
end tell

system version of (system info)
–> "15.2"

★Click Here to Open This Script 

なお、これまでの写真.appのバージョン履歴は以下のようになっています。

macOS上のアプリのバージョン記述ミスについては、これまでにも何度か発生しており、有名なところではmacOS 13上の「連絡先」(Contacts)がバージョン2539といった謎表記になっていることが知られています(おそらくこれはビルドNo.で、バージョン記述するのを忘れたままになっていたのでしょう)。

自社アプリがApp Storeの審査を通れないのでは? それ以前に、バージョン管理してるんでしょうか????

Posted in Bug | Tagged 15.0savvy Photos | Leave a comment

ステータスメニューからアプリ本体を最前面に(改)

Posted on 11月 6, 2024 by Takaaki Naganoya

GUIアプリを作ったときに、ステータスメニュー上に置いたアイコン>メニューからアプリ本体のウィンドウをアクティブにできないという問題が発生しています。

macOS 13、14、15とずーーっとこの動作なので、全世界的に困らされている状況があって……久しぶりにXcodeでGUIアプリをAppleScriptで作って、この問題に例外なく自分も悩まされていました。

その解決を行ったAppleScriptプロジェクトです。macOS 13.7.1上でXcode 15.2で試しています。

# 本記事投稿後にプログラムの見直しを行い、掲載リストおよびXcodeプロジェクトの差し替えを行いました。

–> Download Xcode Projet

GUIアプリ内から生成したステータスバー上のステータスアイテム。ステータスアイテムからメニュー表示。表示されたメニューから項目選択でメインウィンドウを最前面に表示する。

tell current application to activate

では何も起こりません(macOS 12まではこれで大丈夫だった)。

そういう操作を行なってもメインウィンドウが最前面に表示されず、メインウィンドウを強制的にアクティブにするようなコードを入れても、「UIがないプロセスから他のプロセスをアクティブにできない」といったワーニングが表示されるだけで、何も起こりません。

メチャクチャ困ります。

そこで、edama2さんに相談していろいろ試してみたところ、強制的にGUIアプリを最前面に持っていけました。

こちらの議論を参考にしています。


on activateMe:aSender
  theWindow's makeKeyAndOrderFront:(me)
  theWindow's orderFrontRegardless()
end activateMe:

当初、ウィンドウの生成を動的に行なっていましたが、その部分を削除しても動作することを確認できたため、削除しています。

なお、macOS 15.2+Xcode 16.1でビルドして実行してみたら、「tell current application to activate」だけでウィンドウを最前面に持っていけています。ここで紹介している処理は、macOS 13、14で同様の処理ができるように必要になってしまうようです。

macOS 13/14(+15.0〜15.1?)のバグと言って差し支えないでしょう。

AppleScript名:AppDelegate.applescript
—
— AppDelegate.applescript
— process Control test
—
— Created by Takaaki Naganoya2 on 2024/11/01.
—
—

script AppDelegate
  property parent : class "NSObject"
  
  
— IBOutlets
  
property theWindow : missing value
  
  
property NSMenu : a reference to current application’s NSMenu
  
property NSMenuItem : a reference to current application’s NSMenuItem
  
property NSStatusBar : a reference to current application’s NSStatusBar
  
property NSVariableStatusItemLength : a reference to current application’s NSVariableStatusItemLength
  
  
  
on applicationWillFinishLaunching:aNotification
    my initMenu:me
  end applicationWillFinishLaunching:
  
  
  
on applicationShouldTerminate:sender
    return current application’s NSTerminateNow
  end applicationShouldTerminate:
  
  
  
on clicked:aSender
    my activateMe:(me)
    
set aTag to (tag of aSender) as integer –Important!!
    
set aTitle to (title of aSender) as string
    
    
if aTag is in {41, 42, 43, 44, 45, 46} then
      my activateMe:aSender
    else if aTag = 100 then
      display dialog "Clicked"
    end if
    
    
if aTitle = "Quit" then quit
  end clicked:
  
  
  
on activateMe:aSender
    current application’s NSApp’s activateIgnoringOtherApps:(true)
    
theWindow’s makeKeyAndOrderFront:(me)
    
theWindow’s orderFrontRegardless()
  end activateMe:
  
  
  
–Status Menu Structure
  
on initMenu:aSender
    set aList to {"Piyomaru", "Software", "", "Function", {"1", "2", "3", "4", "5"}, "", "Quit"}
    
    
set aStatusItem to current application’s NSStatusBar’s systemStatusBar()’s statusItemWithLength:(current application’s NSVariableStatusItemLength)
    
    
aStatusItem’s setTitle:" TEST "
    
aStatusItem’s setHighlightMode:true
    
aStatusItem’s setMenu:(createMenu(aList) of me)
  end initMenu:
  
  
  
  
on createMenu(aList)
    set aMenu to current application’s NSMenu’s alloc()’s init()
    
set aCount to 10
    
    
set prevMenuItem to ""
    
    
repeat with i in aList
      set j to contents of i
      
set aClass to (class of j) as string
      
      
if j is equal to "" then
        set aMenuItem to (current application’s NSMenuItem’s separatorItem())
        (
aMenu’s addItem:aMenuItem)
      else
        if (aClass = "text") or (aClass = "string") then
          
          
if j = "Quit" then
            set aMenuItem to (current application’s NSMenuItem’s alloc()’s initWithTitle:j action:"clicked:" keyEquivalent:"")
          else
            set aMenuItem to (current application’s NSMenuItem’s alloc()’s initWithTitle:j action:"clicked:" keyEquivalent:"")
          end if
          
          (
aMenuItem’s setTag:aCount)
          (
aMenuItem’s setTarget:me)
          (
aMenu’s addItem:aMenuItem)
          
          
set aCount to aCount + 10
          
copy aMenuItem to prevMenuItem
          
          
        else if aClass = "list" then
          –Generate Submenu
          
set subMenu to current application’s NSMenu’s new()
          (
aMenuItem’s setSubmenu:subMenu)
          
          
set subCounter to 1
          
          
repeat with ii in j
            set jj to contents of ii
            
            
set subMenuItem1 to (current application’s NSMenuItem’s alloc()’s initWithTitle:jj action:"clicked:" keyEquivalent:"")
            (
subMenuItem1’s setTarget:me)
            (
subMenuItem1’s setTag:(aCount + subCounter))
            (
subMenu’s addItem:subMenuItem1)
            
            
set subCounter to subCounter + 1
          end repeat
          
        end if
        
      end if
      
    end repeat
    
    
return aMenu
  end createMenu
  
end script

★Click Here to Open This Script 

Posted in AppleScript Application on Xcode Bug GUI | Leave a comment

macOS 15:スクリプトエディタのAppleScript用語辞書を確認できない

Posted on 10月 25, 2024 by Takaaki Naganoya

macOS 15になって、起動中のアプリ自身が自分のバンドル内のリソースにファイルアクセスできなくなったためか(仮説)、スクリプトエディタで自身のAppleScript用語辞書を確認できていません(macOS 15.1)。

用語辞書を読まずにAppleScriptを書くことはできないので、従来のmacOS 13や14から比べると「困った改変」です。

一応、Script Debuggerを用いてスクリプトエディタのAppleScript用語辞書をブラウズすることは可能であるため、不可能になったわけではないのですが、スクリプトエディタで用語辞書をオープンできないと、辞書内容をファイル保存して、変更点の差分を検出できなくて(私が)困っています。

スクリプトエディタのAppleScript用語辞書は、バンドル内にsdefの形式で格納されなくなったため(.scriptsuites書類?)バンドルの中身を開けてコピーというFinderのような解決策をとることができません。

Posted in Bug sdef | Tagged 15.0savvy Script Editor | 2 Comments

macOS 15のショートカット(Shortcuts.app)のAppleScriptを実行アクションにバグ

Posted on 10月 24, 2024 by Takaaki Naganoya

ショートカット(Shortcuts.app)のmacOS 15に搭載バージョンでは、「AppleScriptを実行」アクションを配置すると、アクションのテキスト編集エリアに何も表示されないことを確認しました。


▲macOS 13搭載バージョン


▲macOS 14搭載バージョン


▲macOS 15搭載バージョン テキスト編集エリアにデフォルトのScriptが入力されない

Posted in Bug | Tagged 15.0savvy Shortcuts | Leave a comment

PostScript名で指定したフォントのウェイトを上げるループ処理のテスト

Posted on 10月 19, 2024 by Takaaki Naganoya

NSFontManagerを用いて、指定フォントのウェイト(太さ)を上げたり下げたりする処理ができますが、実際にやってみると「見えなかったもの」が見えてきます。

macOSには「ヒラギノ角ゴシック」のW0(PostScript名:HiraginoSans-W0)からW9(PostScript名:HiraginoSans-W9)まで異なるウェイトのフォントがインストールされています。そこで、W0から順次W9までウェイトを上げる処理を行なってみると、「ヒラギノ角ゴシックW2」にウェイトが割り振られていないことがわかります。

バグなのか、意図的なものなのか……多分バグだと思うのですが……。

AppleScript名:PostScript名で指定のフォントのウェイトを上げるループ.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2024/10/19
—
–  Copyright © 2024 Piyomaru Software, All Rights Reserved
—

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

property NSFont : a reference to current application’s NSFont
property NSFontManager : a reference to current application’s NSFontManager

set aName to "HiraginoSans-W0"
set aFont to current application’s NSFont’s fontWithName:aName |size|:9.0
–> (NSCTFont) "HiraginoSans-W0 9.00 pt. P [] (0x12870af00) fobj=0x11b1e90d0, spc=1.98"

set fontM to current application’s NSFontManager’s sharedFontManager()
set fRes to fontM’s weightOfFont:(aFont)
–> 2

repeat 12 times
  set fRes to fontM’s weightOfFont:(aFont)
  
log (fRes as number)
  
  
set aFontName to aFont’s fontName()
  
log aFontName
  
  
(*2*)
  
(*(NSString) "HiraginoSans-W0"*)
  
  
(*3*)
  
(*(NSString) "HiraginoSans-W1"*)
  
  
— <– W2は?????
  
  
(*4*)
  
(*(NSString) "HiraginoSans-W3"*)
  
  
(*5*)
  
(*(NSString) "HiraginoSans-W4"*)
  
  
(*6*)
  
(*(NSString) "HiraginoSans-W5"*)
  
  
(*8*)
  
(*(NSString) "HiraginoSans-W6"*)
  
  
(*9*)
  
(*(NSString) "HiraginoSans-W7"*)
  
  
(*10*)
  
(*(NSString) "HiraginoSans-W8"*)
  
  
(*12*)
  
(*(NSString) "HiraginoSans-W9"*)
  
set aFont to fontM’s convertWeight:true ofFont:aFont
end repeat

★Click Here to Open This Script 

ヒラギノ角ゴシックW2のウェイトを取得したら3が返ってきました。ウェイトがW2とW3で重なっているんですね。

AppleScript名:PostScript名で指定のフォントのウェイトを取得.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2024/10/19
—
–  Copyright © 2024 Piyomaru Software, All Rights Reserved
—

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

property NSFont : a reference to current application’s NSFont
property NSFontManager : a reference to current application’s NSFontManager

set aName to "HiraginoSans-W2"
set aFont to current application’s NSFont’s fontWithName:aName |size|:9.0
–> (NSCTFont) "HiraginoSans-W0 9.00 pt. P [] (0x12870af00) fobj=0x11b1e90d0, spc=1.98"

set fontM to current application’s NSFontManager’s sharedFontManager()

set fRes to fontM’s weightOfFont:(aFont)
–> 3

★Click Here to Open This Script 

Posted in Bug Font | Tagged 15.0savvy NSFont NSFontManager | Leave a comment

macOS 15:スクリプトエディタでFinderのAppleScript用語辞書が閲覧できない

Posted on 10月 18, 2024 by Takaaki Naganoya

Betaのときには起こっていなかった現象で、macOS 15.1で確認されています。

スクリプトエディタでFinderのAppleScript用語辞書を閲覧できません。

Finderは/System/Library/CoreServicesフォルダに入っており、このフォルダへのアクセスが「より厳しく」なったのでしょう。

ただ、実際にFinderがAppleScript対応しなくなったわけでもなければ、FinderのSDEFが除去されたわけでもありません。

実際にFinderの(パッケージ内容をコンテクストメニューから表示させたうえで)SDEFをコピーして、コピーしたものをスクリプトエディタで閲覧するとよいでしょう。

Posted in Bug | Tagged 15.0savvy Finder Script Editor | Leave a comment

macOS 15 リモートApple Eventsにバグ?

Posted on 10月 17, 2024 by Takaaki Naganoya

macOS 13.7.1が動作中のMac mini M1から、LAN経由でmacOS 15.1が動いているM2 MacBook AirのFinderにRemote Apple Eventsで操作を行なってみたら、M2 Air(macOS 15.1)側のFinderがクラッシュするという症状に直面しています。

同じ操作をM2 Air側からM1 Mac miniに対して実行すると、問題なく結果が返ってきます。

バグ?


▲M1 Mac mini上で書いたAppleScript。コンパイル(構文確認)を行おうとすると、ユーザー認証までは進むものの、直後にmacOS 15環境側のFinderがクラッシュする


▲M2 MacBook Air上で書いたAppleScript。ほぼコピペ。問題なく動く

Posted in Bug Remote Control | Tagged 15.0savvy | Leave a comment

有害ではなくなっていたSpaces

Posted on 9月 30, 2024 by Takaaki Naganoya

Spacesは、macOS標準搭載の仮想デスクトップ機能であり、最大16個の仮想デスクトップを作れるようになっているほか、F3キーを押すと縮小表示を行うようになっているなど、ハード/ソフトともによく統合された機能です。

ただし、AppleScriptユーザー側からすると

「他の仮想デスクトップにアプリのウィンドウを置くとAppleScriptからアクセスできないカス機能」
「開発チームが他の機能のことを考慮していないクズ機能」

といった感想になります。

このため、さまざまな書籍で「AppleScriptとの互換性のない機能」のひとつとしてリストアップされ、AppleScript系の開発/運用現場では「安全のためにSpacesを使わないように」と注意するのが真っ先に行う恒例行事になっていました。

内蔵HDD/SSDの暗号化機能なみに、登場時にAppleScriptとの互換性検証が不十分なものについては「信用できない」として、以来、安全のために暗号化機能は極力使わないようにしてきました。

# HDDの暗号化機能が登場したときに、暗号化したHDDにAppleScriptからアクセスできないというバカみたいな不具合が発生。その後も、有効にするとeGPUが使えなくなるなど、この機能を作っている担当者だかチームのことが信じられません。

そして話はSpacesに戻ります。執筆中の電子書籍「Pages+AppleScriptで本をつくろう!」の注意点でSpacesについて言及し、確認のために「やっぱり今でも動かないのか?」と、試してみたら……他の仮想デスクトップ上に配置したPagesの書類の情報を取得できます。

「…………。」

何度試してみても、他の仮想デスクトップに配置したPages書類の情報を取得できます。

macOS 13.7.1と、macOS 10.13.7で試してみたところ、両方で動作しました。

このぐらいの範囲のmacOSで動くのであれば、さまざまな本でSpacesに関する「危険なので使用を推奨しない」という評価は取り下げる必要があることでしょう。

ただ、Pagesについては表示中のページから+6ページぐらいを超えるとオブジェクトのposition属性を取得できないといった不具合があり、これはmacOS 15で再テストしても発生が確認されています。

Posted in Bug news | Tagged 10.13savvy 15.0savvy Spaces | Leave a comment

Post navigation

  • Older posts

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

Google Search

Popular posts

  • 開発機としてM2 Mac miniが来たのでガチレビュー
  • macOS 15, Sequoia
  • 指定のWordファイルをPDFに書き出す
  • Pages本執筆中に、2つの書類モード切り替えに気がついた
  • Numbersで選択範囲のセルの前後の空白を削除
  • メキシカンハットの描画
  • Pixelmator Pro v3.6.4でAppleScriptからの操作時の挙動に違和感が
  • AdobeがInDesign v19.4からPOSIX pathを採用
  • AppleScriptによる並列処理
  • Safariで「プロファイル」機能を使うとAppleScriptの処理に影響
  • Cocoa Scripting Course 続刊計画
  • macOS 14.xでScript Menuの実行速度が大幅に下がるバグ
  • AppleScript入門③AppleScriptを使った「自動化」とは?
  • Keynote/Pagesで選択中の表カラムの幅を均等割
  • macOS 15でも変化したText to Speech環境
  • デフォルトインストールされたフォント名を取得するAppleScript
  • macOS 15 リモートApple Eventsにバグ?
  • AppleScript入門① AppleScriptってなんだろう?
  • macOS 14で変更になったOSバージョン取得APIの返り値
  • Keynoteで2階層のスライドのタイトルをまとめてテキスト化

Tags

10.11savvy (1101) 10.12savvy (1242) 10.13savvy (1391) 10.14savvy (587) 10.15savvy (438) 11.0savvy (283) 12.0savvy (212) 13.0savvy (194) 14.0savvy (147) 15.0savvy (132) CotEditor (66) Finder (51) iTunes (19) Keynote (117) 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) 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
  • 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年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