2014年12月2日火曜日

Xcode 6 で "Xcode Always Behind" する方法

久々に Xcode 使ってます。最新のバージョンは Xcode 6 なんですが、Xcode 5 の頃に愛用していた "Xcode Always Behind" オプションがなくなっているではありませんか。

このオプションは Xcode からコードを実行している時だけ、 Xcode が全ウインドウの最背面に回り込むってものです。名前に Always って
付いてるけど常に最背面に周り込むって訳じゃなくて、元々は Debug Workflow ってメニューの中にあったから「Debug 中は常に後ろに回り込む」ってイメージ。

それで、画面の狭い Macbook で Xcode を画面いっぱいに広げて作業しいる人は良くわかると思うんですが、Breakpoint 貼って、ボタンをポチポチ押しながらステップ実行している時に、iOS Simulator が Xcode の後ろに回りんでしまうんですよ。

これは本当にうざい。

ボタン押すたびに後ろに回り込んだ iOS Simulator を掘り起こすのが本当に面倒なんですよ。

リスムが崩れる。

でも Xcode 4 とか 5 の頃は "Xcode Always Behind" オプションを ON にすることでこれを回避してきました。

それなら iOS Simulator の "Stay in Front" オプション使えばいいじゃんって言われそうですが、違うんです。

iOS Simulator の "Stay in Front" だと、iOS Simulator が最前面に居座り続けるので、コード書こうとするときにすごい邪魔。

でも Xcode の "Xcode Always Behind" はコードを実行しているときだけ Xcode が最背面に行くので、擬似的に iOS Simulator が前面にくる。で、■ボタンで実行停止すると、Xcode が前面に戻ってきてくれるので、iOS Simulator が後ろに引っ込むという理想的な挙動をする。

でも、冒頭で書いたように Xcode 6 では、この便利なオプションが無くなってる。ググっても誰もそのことについて触れてないので、ニーズなかったのかもしれないが、

個人的には愛用していたのでツラい。コード書いてステップ実行するのがツラい。

ということで、リズム良くコーディングするために、AppleScript と Xcode の ビヘイビアを使って "Xcode Always Behind" を実現してみましたよと言うエントリー。

ここから本題。

"Xcode Always Behind" オプションと同じことをやるために、コード実行のタイミングで iOS Simulator の "Stay in Front" を ON にする。実行停止したタイミングで OFF にするということをやる。

まず適当なエディタで AppleScript を書いて保存して、chmod +x で実行権限を与える。
#!/usr/bin/osascript

tell application "System Events"
    tell process "Simulator"
        tell menu bar 1
            tell menu bar item "Window"
                tell menu "Window"
                    pick menu item "Stay in Front"
                end tell
            end tell
        end tell
    end tell
end tell

これをターミナルから実行すると iOS Simulator の Stay in Front オプションが toggle で ON/OFF する。

次にこれを Xcode の Behaviors からコード実行と実行停止のタイミングで呼び出せばいい。

Xcode > Behaviors > Edit Behaviors から Behaviors ウインドウを立ち上げ、左側の Running > Starts と Completes の Run にチェックを入れて、上のスクリプトを選択すれば OK。

ということで、mission complete です。

追記:Xcode7 にしたタイミングで iOS Simulator が Simulator に名称変更になってたのでスクリプトの "iOS Simulator" となってた所を "Simulator" に変更

追記:システム環境設定 > セキュリティとプライバシー > プライバシータブ > アクセシビリティから実行環境に許可を与える必要があるようです。(例えば Xcode から実行するなら Xcode.app にチェック、ターミナルから実行するなら ターミナル.app にチェック)

0 件のコメント :

コメントを投稿