iOSアプリ「シュートカット」の解説サイト、「ショートカットApp アクションリファレンス」を執筆中なのですが、Appleが詳細なドキュメントを公開していないため、アプリの動作や仕組みを解析しながら書く羽目になってしまいました。
※後日追記
公開しました。
→ショートカットApp アクションリファレンス
この記事の前半部の内容は、共有ショートカットのページの方でざっくり紹介しています。
そんな中、レシピをshortcutファイルとして書き出せる機能があることを知りました。
ちなみにshortcutファイルを読み込む機能は、セキュリティ上の都合で廃止されてしまったそうです。
解析の都合で、shortcutファイルの中身を確認する必要に迫られ、どうにかして中を覗けないか調べてみたところ、覗いたり書き換えたりする方法を見つけました。
Windowsでplistの中身を覗く方法
この手のファイルの中身はXMLフォーマットだったり、JSONフォーマットだったりすることが多いのでテキストエディタで開いてみましたが、残念ながらバイナリ形式でした。
ただ先頭の文字が「bplist」だったので、これを手掛かりにして調べていったところ、shortcutファイルは、macOS・iOSで使われているバイナリ形式のプロパティリスト(plist)ファイルであることがわかりました。
macOSにはplutilコマンドが存在し、これを使うとバイナリ形式のplistをテキスト形式のplistに変換することができるそうです。
そこでWindowsでplistを読み書きする方法を検索してみましたが、情報が見当たりませんでした。
しかしiTunesのWindows版は、macOS版のiTunesのソースコードと共通化しているという話を聞いたことがあります。
またiTunesやiPhoneアプリではplistが多用されていることを思い出しました。
もしかしたら…と思い、パソコンのハードディスクの中を探してみたところ、iTunesと一緒にインストールされている「Apple Application Support」の中に、plutil.exeがあるのを見つけました。
試しに、何のオプションもつけずにplutil.exeを実行してみたところヘルプが表示されました。
どうやら、macOSのplutilコマンドのWindows版のようです。
macOS版のplutilコマンドの使い方を説明しているサイトを参照して試行錯誤したところ、ちゃんとテキスト形式のplistに変換することができました。
またJSON形式や、XML形式(テキスト形式のplistファイル)に変換したり、相互変換することもできました。
なお使い方はmacOS版のplutilと同じなので、説明は割愛します。
ちなみに、shortcutファイル(バイナリ形式のplist)をXMLファイルに変換するコマンドは以下の通りです。"%COMMONPROGRAMFILES(x86)%\Apple\Apple Application Support\plutil.exe" -convert xml1 "%USERPROFILE%\Desktop\○○.shortcut" -o "%USERPROFILE%\Desktop\○○.xml"
※2023年7月17日追記
ショートカットアプリのバージョン4(iOS 14)でshortcutファイルの改竄対策が施されたため、現在は上記の方法でshortcutファイルの中を覗いたり書き換えたりすることはできなくなっています。
なお、後述のApple Application Supportを探っていた時に見つけたのですが、同じ場所にdefaults.exe(macOSのdefaultsコマンドと同じもの)もありました。
これを使えば、plistをバイナリのまま書き換えることができるのかな?
Apple Application Supportの正体
ついでにApple Application Supportフォルダの中身を、わかる範囲でざっくり調べてみました。
macOSの標準コマンドやmacOS・iOSの中核部のフレームワークと同名のdll、オープンソースのライブラリが含まれているなどの特徴から察すると、「Apple Application Support」はApple製のWindows版ソフト※が共通で使うライブラリをまとめたもののようです。
Windowsで言うところの「Visual Basicランタイム」・「Visual C++ランタイム」・「.NET Framework」と同じようなものですね。
ざっと見たところ、1/3はWebKitで使われているランタイム・ライブラリのようです。
※現在リリースされているApple製のWindowsソフトは「iTunes for Windows」の他には、「Windows移行アシスタント」やApple ProResのコーデックのような地味なものしかありませんが、過去には「QuickTime for Windows」、「Safari」、「iPhone構成ユーティリティ」、「AirMac for Windows」などのソフトがリリースされています。
これらのソフトとライブラリを共有するために、「Apple Application Support」として分けていたのではないかと思います。
- APSDaemon.exe - Apple Push通知サービス。
- defaults.exe - macOSのdefaultsコマンドと同じもの。plistを直接読み書きするときに使う。
- distnoted.exe - プロセス間通信を行うデーモン。iTunesとiPod・iPhone・iPadとの同期で使うらしい。
- plutil.exe - 前述の通り、macOSのplutilコマンドと同じもの。
- secd.exe - Apple Security Manager。macOSのsecdと同じもの。2ファクタ認証やキーチェーン(Appleデバイス共通のパスワード管理システム)の同期などで使われる。
- VersionCheckMe.exe - Apple Application Supportのバージョンチェック用。
- YSIconStamper.exe - デバイスのアイコンを変更するためのものか?
- YSLoader.exe - Apple Mobile Device Service関連か?iTunesとiPod・iPhone・iPadとの同期で使うらしい。
- ApplePushService.dll - Apple Push通知サービス関連。
- AppleVersions.dll - Apple Application Supportのバージョンチェック関連。
- APSDaemon_main.dll - Apple Push通知サービス関連。
- ASL.dll ⁻ Apple System Loging. 何らかのログを取るためのものか?
- AVFoundationCF.dll - 動画・音声を司るのフレームワーク。
- CFNetwork.dll - ネットワーク関係のフレームワーク。
- CoreADI.dll - Apple Device Informationライブラリのことか?macOSX, iOS由来のフレームワーク。
- CoreADI32.dll - CoreADI.dllの32bit版か?
- CoreAudioToolbox.dll - 音声関係のフレームワーク。
- CoreFoundation.dll - iOSの基本となるフレームワーク。
- CoreGraphics.dll - 画像描画のQuartz 2Dのフレームワークか?
- CoreLSKD.dll - DRMのFairPlayデコーダのフレームワークか?
- CoreMedia.dll - 動画・音声関係のフレームワーク。
- CoreText.dll - テキストレンダリングのフレームワーク。
- CoreVideo.dll - 映像関係のフレームワーク。
- Foundation.dll - CoreFoundation関係か?
- icudt62.dll - Unicodeや多言語対応のためのライブラリ ICUのデータ。
- JavaScriptCore.dll - JavaScriptフレームワーク。
- libcachedll - キャッシュを扱うライブラリ。
- libdispatch - Grand Central Dispatch (GDC). マルチコアCPUでプログラムの実行を最適化するためのApple製のライブラリ。
- libexslt.dll - XMLをフォーマット変換するためのライブラリ EXSLT。
- libicuin.dll - ICU関連。
- libicuuc.dll - ICU関連。
- libtidy.dll - HTMLの文法修正を行う HTML Tidyのライブラリ。
- libxml2.dll - XMLを扱うライブラリ。
- libxslt.dll - XMLをフォーマット変換するためのライブラリ XSLT。
- MediaAccessibility.dll - 動画のクローズドキャプションを扱うためのフレームワーク。
- objc.dll - Objective-Cのランタイムライブラリ。
- pthreadVC2.dll - POSIXスレッド。
- QuartzCore.dll - 画像描画フレームワーク QuartzCore。
- SQLite3.dll - 軽量データベースSQLite。
- WebKit.dll - ウェブブラウザSafariで使われているレンダリングエンジンWebKit。
- WTF.dll - Warningメッセージを解析するWTF?(Why The Failure, Auto Layout?)のことか?
- YSCrashDump.dll - クラッシュ情報の取集用?
- YSUtilities.dll - 不明
- zlib1.dll - ファイルの圧縮・展開を行うライブラリ zlib。
プロパティ→詳細→ファイルの説明 を見れば、何のファイルなのかは大体わかると思います。