anz blog

Xcode Source Editor Extension触ってみた

結構前に Xcode Source Editor Extension を紹介(というか教科書と言っても良いかもしれない 笑)するスライドをみて、ずっと触りたいとうっすら思っていたのだけれど、それをようやく触ったのでそこらのお話。
ちなみに見たスライドというのはこれです。

環境

  • macOS Big Sur v11.1
  • Xcode v12.3

実現したこと

選択しているテキストで DeepL を開いて翻訳させるっていうものです。
(別に作らなくてもコピペで全然いいんですけどね!何かテーマを考えてたらこれぐらいしか...笑)


via GIPHY

最もよく使うであろう(?)ビルドなんかのエラーメッセージは選択しても取れなかったので、代わりにクリップボードの中身でも開くっていうのも作ってみたりしました(笑)

実装周りの話

とはいっても、具体的な内容は先にあげたスライドが詳しいですし、後で載せる参考ページで十分と思うので、実際に作ってみてハマったことなどを。

デバッグ時にメニューが表示されない

Target を Xcode Source Editor Extension に切り替えて実行しても、立ち上がった Xcode の方でメニュー表示されないという現象が発生して困りました。
あまりちゃんとした原因はわかってないのですが(笑)

  • XcodeKit.framework を Embed & Sign 設定にすること
  • 設定 > 機能拡張 で Xcode Source Editor を有効化する

を試したら表示されるようになりました。

まぁ機能拡張の有効化の方は最初項目すらなかったのだけれど、設定の機能拡張窓を開いている状態でデバッグ実行したら表示されたので、どうしてもという場合は....おまじないみたいでアレですけれど。

デバッグ時にXcode選択するのが面倒

Xcode Source Editor Extension 開発に限った話ではにのだけれど。
何もしない状態でデバッグ実行すると、いちいちXcodeどのプロジェクトを開くのかっていうのを選択しなきゃならなくて、大した手間ではないのだけれど、毎回毎回となるとまぁめんどくさいという感じです。

そこで、そこらを予め設定しておくと楽に開発ができるようになります。

1 Xcode Source Editor Extension の Scheme 編集画面を開いて、Run時の設定で Xcode を起動するように設定。

デバッグ実行時にXcodeを起動する設定

2 続いて、開くプロジェクトを指定

デバッグ時に開くプロジェクトを指定する設定

この設定をしておくと、手間なく実行できるのでだいぶ開発が楽に進められます。

2つ目のコマンドを追加しようとしたらXcodeが死んだ

コマンドを複数登録する場合は、info.plist の XCSourceEditorCommandDefinitions にクラス名や名前なんかを追加するのだけれど、実際のクラスを追加する前に info.plist に追記しビルドしてしまったら Xcode がクラッシュします。
以降 Xcode を起動してもしばらくするとクラッシュするようになってしまいました。
info.plist を Xcode 以外のエディタで開いて追記した項目を削除してなんとか事なきを得ました。
もし、同じ失敗をしてしまったかたは参考までに(笑)


兎にも角にも、これでいつでも Xcode Extension を自作することができるようになりました!
なにか思いついたら作っていきたいとおもっている所存。

参考