Xamarinを採用した理由のまとめです。
許可を取っていないためアプリの概要に関しては詳しく書けません。
はじめからXamarinが選択肢のメインだった為、あまり参考になりません。
アプリは
一部機能でリアルタイムの高額の取引がある。
リアルタイムの音声再生機能がある。
普通のクラサバ機能もある。
プッシュ通知機能がある。
事が特徴です。
製造技術に求めていた点としては
1. UIをAndroidとiOSで共通に作成可能
2. UIをいざとなったら別々にも作成可能
2. ソケット通信が細かく制御できる。(TCP/UDP)
3. バイナリ操作が書きやすいくパフォーマンスが良い。
4. ストリーミング音声再生を実装できる。
5. いざとなったらゴリゴリ書ける。ネイティブのライブラリを簡単に呼べる。
6. WebAPIの呼び出しが楽に書ける。
でした。
元々別製品にてMono For Androidを採用していた事と、このアプリには既にPC版が存在していてWPF(C#)で作成されているのでXamarinしか選択肢にないとは思っていたのですが、ライセンス費用がなかなかに高かったため、そのほかのプラットフォームも検討していました。
ソケット通信とかを書く必要がないのであればMonacaとかが良いかなぁと思っていました。
技術選択時の候補としては
Qt C++Builder Haxe Cocos2d Unityなどを検討してました。
最終的にQtかXamarinかで検討を行っていました。
技術調査の中盤まではXamarin.FormsはリリースされてなくMvvmCrossが出ていた時期だったのですがXamarin.Formsが出てきて実装してみてほぼ確定しました。
私自身、データバインドでのプログラミングスタイルにはある程度の慣れがあったので(WPF,konockout.js)できる限りXamarin.Formsを採用したいと考えていたのですが、Xamarin.Forms採用に関して不安だった点として、お客様の要望を受けた時に対応しきれるかという点がありました。
これに関してはXamarin.Formsにて実装を学習していく中で何とかなるだろうとの判断になりました。
困った時にはエクセルソフトサポートにお世話になっています。
製造を補完するライブラリとしては
Prism.MvvmとReactivePropertyを採用しています。
複数のプロパティを監視してデータを更新する処理などでReactivePropertyがすごく活躍してます。
だいぶコードが短縮されて簡潔になりました。
今後のバインドスタイルでの開発ではスタンダードになるのではと思います。
Xamarinがマイクロソフトに買収されて、この先VisualStudio製品に組み込まれていくと思いますが
個人開発者が手を出しやすい範囲でのライセンス形態となってくれればなぁとか思います。
お仕事では使えるのですが、個人開発となると難しいです(´・ω・`)