Xamarin+MvvmCrossでチーム開発やってみた

 Xamarin+MvvmCrossでチーム開発やってみた

2014/04/19(Sat) すまべん特別編「Xamarin 2.0であそぼう@関東」

619fccc61ef955ccf39bfa41df527042?s=128

Nobuhiro Ito

April 19, 2014
Tweet

Transcript

  1. 2.

    ⾃自⼰己紹介 •  伊藤  伸裕 / 伊勢  シン – @iseebi / id:iseebi

    •  フェンリル株式会社  共同開発部所属 – iOS / Android のアプリ開発してます •  コミュニティ – スマートフォン勉強会@関⻄西 – すごいHaskell読書会 in ⼤大阪 •  H本読んでます。
  2. 3.
  3. 4.
  4. 6.

    Xamarin 2.0 •  ネイティブの  iOS / Android / Mac アプリを

    C# で書ける! – Windows プラットフォームを⾜足せば、だいたいのプラッ トフォームのソースをC#で書いてしまえる。 – うまく使えば、かなりの量量のコードを使い回せる!
  5. 12.

    完全にObjective-C使いなエンジニアと… お、native API使えるとある var astr = new NSAttributedString ("Hello World",

    attrs); すごい  これ普通に動くなら完全に上位互換や MonoTouchの時代からそれ普通だった。 というか、TCP接続なしでデバッグいけてる。 IDEもめっちゃよくなってる。こればやばい。もうこれでええやん。 Xamarin△□無し これでやったら、同時開発の時に⼯工数も下がるし、 品質も上がるし、いいことずくめやでー。 いいね。 でもトラックナンバー1になりそう…
  6. 14.

    Xamarin 2.0の衝撃 •  MonoTouch から使ってた⼈人からみても結構な インパクトだった –  Xamarin Studio の⾒見見た⽬目かなり良良くなってた!

    –  iOS のデバッグが同じWi-Fiにいなくてもできるように! –  Starter でとりあえず試してもらえる! •  1つになって、わかりやすくなった! •  Visual Studio で開発できるというところは、 それほど重要じゃなかった。 –  そもそも、チーム内でWindows使ってる⼈人は僕だけ (しかもサブ機)
  7. 21.

    メンバー紹介 •  精鋭開発者をそろえました –  伊勢 : Windows系もできるiOSメインマルチプレイヤー –  A :

    ⾔言語学習得意なAndroidメインマルチプレイヤー –  B : 安定性抜群のAndroid専⾨門開発者 –  C : 数学得意なiOSメインマルチプレイヤー ※ここのマルチプレイヤーはiOS/Androidどちらも開発できる⼈人という意味 •  元々iOS/Androidに強いメンバー中⼼心。 •  C# やったことあるのは伊勢だけだけど、 他のメンバーは「たぶんできるでしょう」と前向き
  8. 24.

    まずは意識識の共有を •  「他の⾔言語バリバリ書けるので、C#もなんとなく書け そう」な⼈人が”脱線”しないように注意する •  他の⾔言語と違うところを中⼼心に調べてもらって、 適応してもらう。 –  最初にメンバーに⾔言ったこと • 

    Modern C# Programming は⼀一読してください http://www.slideshare.net/neuecc/modern-c- programming-img •  async/await、ラムダ、var、プロパティ、LINQ というキーワードは 調べて、使える/使うようにしてください。 •  MVVMという概念念、特にバインディングの仕組みは追っておいてく ださい。
  9. 28.

    MvvmCross •  クロスプラットフォームでのMVVM開発をサポート するライブラリ – Windows Desktop(WPF)、Windowsストアアプリ、 Windows Phone、Xamarin.iOS、 Xamarin.Android、MonoMac/Xamarin.Mac • 

    MVVMやそれを便便利利に使うための仕組みが全部 ⼊入りになっている – Messenger、I18N、Presenter、IoC 他 •  処理理の分離離をサポートする機構も備わる – プラグイン
  10. 29.

    Core: PCL で作成する ViewModel, Service のほか、 プラットフォーム⾮非依存な Converter などを配置する アプリ:

    通常のアプリプロジェクトで作成する。 View のほか、 プラットフォームに依存する Converter などを配置する。
  11. 31.

    MvvmCross の導⼊入 •  去年年10⽉月くらいはいろいろバッドノウハウの集まり – .csproj を開いて無理理⽮矢理理PCLにしたり – .NET 4.0 にしかならなかったので、 async

    使うために  Microsoft.Bcl.Async を⼊入れたり •  いまはNuGetで⼀一発 – http://iseebi.hatenablog.com/entry/ 2014/03/01/031216
  12. 32.

    すぐに問題が起こった •  スライドメニューってどう出せば? – github に参考になるヤツがあった •  https://github.com/fcaico/MvxSlidingPanels.Touch/ •  iOS の

     RootViewController は 基本的に  UINavigationController •  画⾯面全体に対する処理理は  MvxViewPresenter で⾏行行う。 •  MvxViewPresenter に対しての Message 機構として MvxPresentationHint で表⽰示する •  実際は要件がもっと違った(下からのすりあがり)ので、 これを参考に⾃自⼒力力記述。
  13. 33.

    リリースビルドすると動かない! •  バインディングしてても、コードの中で使ってないと、 リンカがイベントを消してしまう –  そういうときは画⾯面表⽰示時  MvxBind: のエラー出⼒力力が出てる。 –  プロジェクト作成時に

     LinkerPleaseInclude で、 使ってるメソッドを空打ちしておく。 •  最近NuGetで⼊入れたやつは、だいたいのものがデフォルトで存在。 [MonoTouch.Foundation.Preserve(AllMembers = true)]" public class LinkerPleaseInclude" {" public void Include(UIButton uiButton)" {" uiButton.TouchUpInside += (s, e) =>" uiButton.SetTitle(" uiButton.Title(UIControlState.Normal), " UIControlState.Normal);" }
  14. 34.

    プラグインが動かない! •  MvvmCross のプラグインは、各プラットフォーム 固有の機能を、Coreの共有コードから使えるよう にしてくれる。 – ⾳音声・カメラ・ネットワークなど •  iOS では動くけど、Android

    で動かなかったり、 不不⼗十分なプラグインがあった。 – iOS の実装に寄っていて、Android では不不⼗十分 – 当該プラグインを fork して対処する。
  15. 36.

    ネイティブバインディング •  起点となるViewControllerを作るメソッドを⽤用意 して、そこだけ定義⽣生成した。 – Objective Sharpie というヘッダから定義を⽣生成する ツールがある •  http://docs.xamarin.com/guides/ios/

    advanced_topics/binding_objective-c/ objective_sharpie/ – ガチのライブラリを定義⽣生成するのはかなりしんどいが、 メソッド1つのクラスだったらそんなに難しくない。
  16. 41.

    導⼊入効果総括 (2/2) •  「C#わかる⼈人がやらんとどないしようもない」所がある –  async,Task,Rx を使った⾼高度度なライブラリとか –  具体的には  AsyncOAuth

    •  最初の頃は調査とか試⾏行行錯誤で効果が出づらい –  ある程度度ノウハウたまってくるまでは我慢が必要 •  書くコードが減ったので意識識ずれはその分減ったが、 View と  ViewModel の結合のところがアキレス腱 –  ViewModel のどのプロパティが、 画⾯面上のどの項⽬目に当たるかを共有して、 意識識形成することが重要