MonoDevelop2.8は正直、絶望的なVerUpだった。
入れたらどうなるかというと、RAD開発からただのC#で書けるXCODEになる。
基本的には、今まで使えたIBの編集からのコード反映がなくなる。
・XCODEが4.XだとD&Dでコードを少し書いてくれるのでまだちょっぴり良い。
GUIで線をつなぐのと似ているといえばそうだが、ソースファイルの行位置ってのはいただけない。
・XCODEが3.Xの場合D&Dでコードの自動生成はできないため、この部分は全部手動で書くことになる。XCODEの人は普通にやっていると思うけど。
実際にやってみたメモ。
1.まず空のプロジェクトを立ち上げる
2.xlbをクリックしてIBを立ち上げる
ここまでは2.6でも同じだが、2.8ではXCODEも同時に立ち上がる
3.IBで画面をデザインする
2.8でデザインしたら一旦保存する。(終了はしない)
ここではボタンを1つおいておくことにする。
4.XCODEでViewController.hを編集する
@interface HogeHogeViewController : UIViewController {
UIButton *_btnClickMe;
}
のようなインターフェイスと
@property (nonatomic, retain) IBOutlet UIButton *btnClickMe;
のプロパティを書く。これでOutletになる。
Actionも記述したい場合は
- (IBAction)actionButtonClick:(id)sender;
みたいに書く。
これはプログラムでも書けるので無理することはない。
ここでXCodeを保存する。
XCode4.Xにするとこの部分はD&Dで作成できるらしい。
5.上のコードと画面の部品を紐づける
上を保存するとIBにOutletやActionが出てくるのでこれを画面の部品と紐付けする。
ここでIBを保存。
やっとXCodeやIBから解放される。
というか、XCodeをやる人なら普通にやっている内容。MonoTouchの自動生成もどきを手動でやっているだけ。
6.MonoTouchに戻るとdesign.csに
partial class HogeHogeViewControllerに
{
[Outlet]
MonoTouch.UIKit.UIButton btnClickMe { get; set; }
[Action ("actioonButtonClick:")]
partial void actionButtonClick (MonoTouch.Foundation.NSObject sender);
}
みたいなこのができていればOK。
しからば、ここだけ手で書いたら逆に反映するかと思ったらさすがに甘かった。(TT)
以降は以前のMonoTouchと同じになる。
7.Contoroller.csを開いて普通に書く
Actionは作らなくても以下でOK。
base.ViewDidLoad ();
//any additional setup after loading the view, typically from a nib.
this.btnClickMe.TouchUpInside += (sender, e) => {
this.numberOfTimesClicked++;
this.btnClickMe.SetTitle("Clicked:" + this.numberOfTimesClicked.ToString(),UIControlState.Normal);
};
}
なんのことはない、XCodeで書く場合と一緒でIBの編集を自動反映するわけでもない。
いちいちコードを書くのでは面倒でXCodeと変わらない。
2.8は結局コンセプトがRADからずれてきていて、残ったのはC#で書けることぐらいになったような気がする。
2.6だとIBでデザインして定義もして保存すると、それ関係のコードは自動生成された。VBほど簡単でないまでも、コード補完も考えると随分楽な気がした。
MonoDevelopやMonoFremeWarkはNovellとは関係ないのだが、それを前提にしている以上MonoTouchそのものも改悪(だと思う)される。
MonoTouchは価格も高いし、UpDateも1年だけの無料、しかもインストールは1台。マシンを入れ替えたらアクティベーションも英文メールしてやりなおし。
かなり条件的には厳しいものだ。
おまけに、MonoDevelopの影響で使い勝手も悪化(だと思う)してしまう。
MonoDevelopはのC#2010に対応したせいで、そうなったのかもしれないが、なんだか割り切れないVerUpに見える。コンセプトそのものがおかしくなったというか。MonoDevelopがMonoTouchを考えてなかったということだろう。MonoTouchは有料な以上、自分でなんとかすべきような...。IDEを他人のものを使ったせいというか。
古いプロジェクトは変換して読んでくれるので、そこが継承できないわけではない。(2つのファイル以外は互換があるようだ)
新しいもの(2.8)は、ただ「C#で書けるだけ」風になってしまった。
感動的だったHolloWorldも面倒この上なくなってXCODEのC#版となる。
というか手間はXCODEと変わらず、正規品なら有料の分不利なような...。
結局は2.6に戻したわけだが...
MonoDevelopは、こんな変更があるのなら、古いVerをおいておいてほしい。
MonoTouchは、有料である以上はチュートリアルを変えるのではなく、自前でなんとか対応するかせめてUpDateに2.8を入れないでほしかった。(永遠になくなったりして。)
MonoFrameWorkが一番良心的かも。