でもだからといって、アプリ作りでしかメシ食ってけない人が iPhone は作れませぇん!とかいう訳にもいかんので、極力イライラメーターを上げずに Mac と Xcode の相手をするための無駄な努力からまとめていく事にしましょう。
今までも何度か悪あがいてましたが、それの2016年版という感じですね。まあ結局、足掻いたところで大抵どうにもならないんですけどね。Macならね。
リモートだけじゃダメでした 1:Interface Builder 編
まあ基本方針として、慣れてる Windows のほうが調べ物とか細かい作業をしやすいし、机にキーボードとかを2セット置いたりイチイチ切り替えたりもしたくないので、できれば Mac の操作は全て Windows 側からリモートでやりたい訳ですよ。で、それ自体は以前からやってて、今までも簡単な実験や、Unity の iOS 版のビルドとかする分には不自由なかったのですが、今回ちゃんと iPhone らしいアプリを作ろうと思ったとたん、予想を上回るデコスケ だという事が発覚しました。
勝手知ったる自社OSで作ってるくせに、どんな組み方をしたらこうなるのか意味が分かりませんが、Xcode の UI 作成ツール、Interface Builder を使おうとすると、なんでかリモート経由では一部の操作ができません。具体的には、
- storyboard 上に置いた ViewController をドラッグで移動できません
- さらに ViewController 上に配置する 各種UIパーツまでも Xcode8 から移動できなくなりました。Xcode7 では動かせてたのにまさかの悪化w。
- iOS 開発の入門とかで、何も知らない人がまず最初にやらされる 「各種UIパーツからソースコードへ Ctrl を押しながら線をひっぱる」 って操作ができません。まあこれは右クリックメニューでほぼ代替できるのだけど、ビギナーを挫折させるには十分な仕打ち
あとね、これはリモート関係ないんだけど、Interface Builder を初めて使うと、まず画面を自由にスクロールできない事にイラっと来るんですが、マウスホイールでしかスクロールできないんすよねコレ。で、横スクロール機能がないマウスはどうするかというと、Shift+ホイール だそうで。ハァ。そすか。 せめて Photoshop とかみたく 「○○キー押しながらドラッグ」 くらい用意してて欲しいんだけど、もしかしてタッチパッドなら2本指でスクロールできたりするんすかね?。Mac使いなら全員持ってると思ってんだろうなぁ奴ら。もうこんな事でイライラすんのヤだし、諦めて買うかと調べてみたら、 いくら殿様商売でも 7800円 くらいやろと思ってたら甘かったよ。
まあ結局このあと、自分なりのアプリの組み方を試行錯誤した結果(別記事の予定)、たぶん storyboard は1つの画面のレイアウトにしか使わないという結論に達したので、そんなら画面スクロールする必要もほぼないし、もうホイールでいいやという事になりました。
リモートだけじゃダメでした 2:キーボード編
さあ、リモートでの問題点はまだ続きますよ!リモート接続しようとして、まずは使い勝手のいい Chrome リモートデスクトップから試す訳ですが、なんでか問答無用で US キーボード扱いになって記号がマトモに打てないんで、まあプログラミングは無理すな。応答速度は素晴らしいんだけどね。もったいない。
で、キーボードの問題については、以前悪あがいた時に見つけた素晴らしいvncクライアント のおかげでほぼ解決するのですが、今度は画面の反応が悪すぎて使い物にならないので、結果、リモートで操作はするけど Mac に繋いだモニターを見る という変態的な使い方になりました。リモートの意味ほぼねぇ!
あとですね、もひとつ問題があって、オイラは Ctrl キー(Mac だと Command キー)はキーボードの左下隅にないと暴れそうになる人 なので、Mac を使う時はまず最初に Command を左下に入れ替えるんですが、リモートだとこの入れ替えが効かないんですよね。
おかげでカット&ペーストとかするたび暴れゲージが溜まっていくので、結局、腰を据えてコードを書く時はキーボードを切り替えざるを得ないという。もはやリモートですらねぇ!
ちなみに、以前ちょっとだけ iOS アプリを作ってた時は、Mac 上のプロジェクトを丸ごとファイル共有して、コードは全て Windows のエディタで書く という悪魔的な事をしてましたが、当時は OpenGL の全画面アプリで API もほとんど触らなかったので問題なかったけど、ちゃんと API を使い始めたら入力補完がないとキツイですね。
Apple の API は無駄に文章的すぎて覚えにくいんですよ。-ing とか -ed とか to とか for とかどうでもいいっての。そして Swift3 お前だよお前!。メソッド名を今風に一新してみましたじゃねえよバカ死ね!。ネットでサンプルコード見つけてもメソッド名がいちいち変わっててホント腹立つ。
という事で、残念ながら、UI をデザインするにも、コードを書くにも、リモートだけでは無理 という事が分かりましたので、結局上の図のように、基本的にはリモートで使いつつ、UIやコードを作りこむ時はキーボードを切り替える、という感じに落ち着きました。
つーても、今後もう少し Swift と API に慣れたら、入力補完に頼らずコードは Windews 側で書くようにしたいですけどね。そもそも Xcode の入力補完は全然気が利かんくて腹立つし。
俺のビヘイビア 2016
Xcode は1つのウインドウで全ての作業をさせたがるし、そのくせカスタマイズはほぼできんしで、初期設定のままだと画面が不要な情報だらけになって非合理極まりないのですが、状況ごとに表示すべきウインドウを取捨選択する 「ビヘイビア」 の設定するとかなりマシになります。その辺については 以前の悪あがきの時にだいぶ改善させた のですが、当時は Xcode のエディタを使う気が一切なくて、あまりに極端な設定だったので、今回はちゃんとエディタも使う前提で再考してみました。主な要求としては、
- コーディングするための画面とデバッグするための画面(=タブ)を完全に分けて、それぞれの作業に必要ない情報は隠す。
- ビルドエラー一覧 (Issue navigator) が横に狭いと肝心な部分が読めなくてイラっと来るので、エラー一覧を読みやすくする。
- メイン以外のエディタウインドウにログとかデバッガとか割り込んでこないようにする。アレどこにでも沸いてくるのホント邪魔。おまけに消すのめんどいし。
- Build : Fails (ビルドエラー発生時)
-
- Show tab named Error in active window
- Show navigator Issue navigator
- Hide debugger
- Hide utilities
- Running : Starts (デバッグ開始時)
-
- Show tab named Debug in active window
- Show navigator Debug navigator
- Show debugger with Console View
- Hide utilities
- Running : Pauses (デバッガブレーク時)
-
- Show tab named Debug in active window
- Show navigator Debug navigator
- Show debugger with Variables & Console View
- Running : Generates output (ログ出力時)
-
- Show tab named Debug in active window
- Show debugger with Console View
- Running : Completes (デバッガ停止時)
-
- Show tab named Edit in active window
- Show navigator Project navigator
- Hide debugger