MonoDevelop で開発し続けるのは,ちょっと微妙かも

MonoDevelopとInterfaceBuilderを使いUI画面設計をしていました.

カスタムViewをInterfaceBuilderで使えないことがありました

背景

昨日はカスタムViewをInterfaceBuilderで扱う方法をCalendarViewを例にして紹介しましたが,あれはMonoDevelopとInterfaceBuilderの組み合わせでは有効に使えませんでした.

理由はXIBファイルがC#のクラスの完全名を扱えないから

理由はInterfaceBuilderがC#のクラスの完全名(ピリオドを含む)を受け付けないために,もしもライブラリとUIとで名前空間が違うと,クラス名が正しくクラスの型として認識されないためです.
例えば,UIの名前空間でXIBファイルを作りそこにCalendarViewを貼り付けると,MonoDevelopはXIBファイルの内容を反映して自動的にプロパティ宣言を含むコードを生成します.そのプロパティの型名はXIBファイルのクラス名がそのまま使われます.このためにUIとライブラリの名前空間が違うと,プロパティの型名が解決できずコンパイルに失敗します.

解決方法は,自動生成ファイルを手で書き換えくらい

解決方法として自動生成されたコードに,using ディレクティブを追加することです.しかしこれではファイルが自動生成されるたびに手動で変更せねばなりません.なんのためのXIBファイルなのかが分からなくなります.

結論は,XIBを使わずコードで書くのがおすすめ

結論として,コードを直接書くか,名前空間を揃える,のいずれかの解決方法しか思いつきませんでした.

MonoDevelopは(微妙に)使いづらい

話は変わり,MonoDevelopの使いづらさを感じます.MonoTouch 1.2から導入されたデバッガ機能はステップ実行と評価式がサポートされていてとても使いやすいのですが,MonoDevelopのUIはちょっと微妙です.

比較対象はVisualStudio

オープンソースプロジェクトの比較対照に私が使い慣れているVisual Studioを持ち出すのは,開発リソースが違いすぎますから,酷な話だとは思います.ですが常時手に触れるツールはささいなことでも気になります.

エディタとしてはどうか

キータイピングを邪魔せず適度に補佐するエディタ,これが開発ツールの最も基本かつ生命線の機能だと思います.(APIを全て覚えてインテリセンスなしで書け!とおっしゃるツワモノもいらっしゃいますが,オブジェクト指向のコーディングでのメリットは,インテリセンスに結晶していると私個人的には思います) MDはよくできているのですが,VSに比べるとレスポンスの遅さを感じます.

ダイアログが無反応だったりする

例えばダイアログのOKボタンがダイアログをちょっと動かしてから出ないと反応しない(押せない)です.またコンパイルエラーの表示で出てきたエラーリストが勝手にドッグに引っ込んでしまう,ウィンドウのリサイズをしようとしたらマウスカーソルが変な形になってリサイズできない,XIBのdesigner.csファイルを展開表示しようとしてもXIBファイルを開くばかりになるなど,微妙なところで反応が悪いあるいは思うように動かず,微妙に痒いところに手が届かないもどかしさがあります.

ライブラリのContentの扱いがなかったりする

カスタムコントロールを1つのプロジェクトにまとめて,スタートアップのプロジェクトから参照していたときにMonoDevelopのContentの扱いではまりました.参照しているプロジェクトのContentをappディレクトリにコピーしてくれないため,(外部ファイルとして ファイルへのリンクを追加してもコピーされなかったために)メインのプロジェクトに手動でコピーしなくてはなりませんでした.

アセンブラの概要表示が崩れている

参照しているアセンブラのメソッドなどの概略情報手軽で分かりやすいドキュメントでもあります.MDでは概略表示の改行が入らないようで,とても読めたものではない状態です.これらUI周りはそのうちに改善されていくとは思うのですが,今日開発したい,コードを書きたいという場合には,サポートを待つわけにも行きません.そこでエディタとしての機能はVSに求める方向を私は選択しました.

MonoDevelopでないとできないのはXIBの扱いとデバッグ

今はMonoTouchの開発環境をVisualStudio中心に立ち上げています.しかしVSではサポートできずMonoDevelopを使うほか選択肢が無いのがXIBの利用です.このXIBファイルの利用も微妙かもしれません.

XIBのリソースとしての価値?

当初はXIBで画面設計を進めることが効率よいだろうと考えていたのですが,一旦ライブラリに慣れてしまうと,インテリセンスの恩恵もありコードで直接書いたほうが断然よいです.Objective-Cの設計資産を再利用する,あるいはXIBファイルがクロスプラットホームで活用できるならば,UI設計の共通資源として大いに有効活用する道も開けるのですが,そのような道はないですし,UIKitに密着しすぎていて作れるとも思えません.

XIBのうまい使い方?

InterfaceBuilderのよい使いどころは,画面設計のドローソフトとして利用して,できた画面のスナップショットを仕様書に貼り付け,画面に置いたUIViewの座標値や属性をコードに書き込むのがよいのではないかと思います.