Mac swift プログラミング

Macで画面の指定した部分をテキスト認識してクリップボードとファイルに書き出すswiftプログラムをキーボードショートカットで呼び出すために苦労した話

ショートカット.appでもできるけど遅い

Macの画面をOCRしたいことが結構あります。

私の場合はPDFや画像をテキスト化することが多いです。

以前は他の方が公開してくれているシェルスクリプトを使わせてもらっていました。

しかし、やはりOSアップデートなどへの対応を考えると自分で作った方が良いということで、Macのショートカット.appで画面のOCR機能を作って、キーボードショートカットで呼び出せるようにしました。

たまに使う程度なら、これで十分です。

ただ、ショートカット.appで作ったものは、起動に時間がかかるので、連続してOCRしたいときには結構ストレスになります。

私は複数の画像から連続してOCRしたい時があるので、ちょっとまだるっこしい。

Swift版で高速起動させる

連続使用時のレスポンスの悪さを改善するために、Swiftでプロクラムを作りました。画面の指定した範囲をOCRしてクリップボードに取り込み、同時に既定のテキストファイルに追記保存します。

ファイルへの追記保存機能があるので、連続OCRが効率よく行えます。

今回のプログラムはChatGPTではうまくできずに、Geminiに作って貰いました。

常にGeminiの方が優れているというわけでは無いと思いますが、今回はGeminiの方が良いコードを素早く出してくれました。

ターミナル上では以下の様に起動します。


swift ocr_tool.swift

アクセス制限を回避するためにコンパイルしてAutomatorアプリ化してAutomatorワークフローで呼び出す

ここまでは順調でしたが、キーボードショートカットで呼び出せるようにするまでが大変でした。

私はmacOS 26(tahoe)を使ってますが、最近のmacOSはセキュリティがどんどん厳しくなっていて、自作プログラムがブロックされてしまうことが増えています。

最初は、Automatorワークフローの「シェルスクリプトを実行」に、前期のswift実行コマンドを入れました。

この方法だとAutomator上では動いても、他のアプリからサービスメニューで呼び出すとうまくいきません。

どうもアクセス権の制限で画面キャプチャーができないようです。システム設定のアクセス権設定でも変更できません。

いろいろやって、最終的にたどり着いたのが、以下の方法でした。

  1. swiftプログラムをコンパイルしてアプリケーション化
  2. swiftアプリケーションを起動するだけのAutomatorアプリを作成
  3. Automatorアプリを起動するだけのAutomatorワークフローを作成
  4. サービスメニューにAutomatorワークフローのショートカットを登録

こうすることで、とりあえず、どのアプリ上で起動しても、アクセス制限に引っかかることはなくなりました。

やっていることは、スクリプトをOSから安全に見えるパーケージに仕立て上げたような感じだと思います。

コード

コードと使い方はGithubに置いておきます。

保存パスは固定でプログラム内に記述しているので、適宜変更してください。

また、将来的には再びアクセス制限に引っかかる可能性がありますし、安全性は保証しません。ご利用は自己責任でお願いします。

https://github.com/ryjkmr/mac_ocr_to_file_and_clipboard

-Mac, swift, プログラミング