指定のアプリケーションの実行アーキテクチャを変更するAppleScriptです。
–> Download setArchLib.scptd
VIDEO
Apple Silicon Mac上でアプリケーションをRosetta 2によってIntel 64バイナリのARMエミュレーション動作を行うかどうかは、Finder上の「Rosettaを利用して開く」のチェックボックスによって制御されています。
これを、外側(FinderのGUI)から操作するか、内側(何らかのOS内のサービスやメタデータ)から操作するかによって、その「やりかた」は大きく異なります。
自分は、できることなら極力GUI Scriptingを使いたくない派なので、「そういえばASからこのあたりの設定をいじくった記憶がない」と思いつつ、「内側から操作する方法はないものか」と考えていました。
さっそくGithub上でいろいろ調査してみたところ、LaunchServiceのプライベートAPIに「_LSSetArchitecturePreferenceForApplicationURL」というものがあって、これを呼ぶことで処理を実現できそうだということが判明。
処理内容は、アゴが外れそうなほど簡単なので、AppleScript(AppleScriptObjC)でも普通に書けそうな勢いでしたが、アンダースコアで始まるAPIはAppleScriptにBridgeしにくく、もともとのプロジェクトのもの(UNIXのコマンドラインから呼び出す「SetArchPrefForURL」プロジェクト )をビルドしたバイナリをScriptバンドル内に入れて、呼び出すようにしてみました。
Cocoa Frameworkのプロジェクトを作成して、AppleScriptから普通にPOSIX pathとCPUアーキテクチャを渡せば結果をbooleanで返してくるようなスタイルに書き換えようとして、途中で頓挫してしまいました。そんなに気合いを入れる内容でもないので、こんなものでいいんでしょう。
AppleScript名:setArchLib.scptd
— – Created by: Takaaki Naganoya – Created on: 2023/05/03 — – Copyright © 2023 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions
set appPath to choose file of type { "com.apple.application-bundle" } –set archStr to "x86_64" set archStr to "arm64"
set archRes to setArchForApp ( appPath , archStr as string ) of me
on setArchForApp ( appPath , archStr as string ) if archStr is not in { "x86_64" , "arm64" } then error "Invalid architecture" set exePath to POSIX path of ( path to resource "SetArchPrefForURL" ) set sRes to do shell script ( quoted form of exePath ) & " " & ( quoted form of POSIX path of appPath ) & " " & archStr return ( sRes = "" ) as boolean end setArchForApp
★Click Here to Open This Script