Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Xamarin.formsで好き勝手に野良プラットフォーム

1,645 views

Published on

JXUGC #23 Xamarin 無料化一周年記念勉強会!(2017/5/27)の登壇資料です。

Published in: Technology
  • Be the first to comment

Xamarin.formsで好き勝手に野良プラットフォーム

  1. 1. Xamarin.Formsで 好き勝手に 野良プラットフォーム JXUGC #23 Xamarin 無料化一周年記念勉強会! 2017/5/27 @ticktackmobile #JXUG
  2. 2. 自己紹介  Xamarin.Forms Preview版の 新機能解説するマン  第七駆逐隊推し  (株)フロッグポッド所属  Twitter: @ticktackmobile  GitHub: P3PPP #JXUG  最近Microsoft MVPになった。 (2017/3~)
  3. 3. 今日のテーマ  Xamarin.Forms.Core から各プラットフォームに対 する InternalsVisibleToAttribute を取り除く変更が 入ったので、第三者が勝手に対応プラットフォー ム増やせるようになるよというお話。 まだリリース版には含まれてない(2.3.5~ 予定) #JXUG
  4. 4. 影響を受ける人  Xamarin.Formsの新しいバックエンド(対応 プラットフォーム)開発したい/してる人  Xamarin.Formsをカスタマイズして使ってい る人  単にライブラリとして使っている人 #JXUG 影響大 影響なし
  5. 5. Pull request #782 (Remove InternalsVisibleTo from Core to XF.Platforms.*) 主たる変更内容 Before `[assembly: InternalsVisibleTo(“Xamarin.Forms.Platform.*")]` After `//[assembly: InternalsVisibleTo("Xamarin.Forms.Platform.*")]` これをするために344ファイル修正 #JXUG
  6. 6. Q. InternalsVisibleToAttributeが消えるとどうなる? A. 野良プラットフォームを増やせるようになる。 #JXUG
  7. 7.  従来は Xamarin.Forms.Core.dll が知っているdllしか Xamarin.Forms の対応プラットフォームになれな かった。  意思決定としても重くなりがち。 何故InternalsVisibleToが必要だったのか? #JXUG
  8. 8. Xamarin.Formsの中心部の構成(おさらい) #JXUG Xamarin.Forms.Core Xamarin.Forms.Platform.* 抽象化されたViewやinterface などを定義。 Viewに対応するRendererを定 義。OS, デバイス情など動作 プラットフォームに依存する アレコレを注入。 参照
  9. 9. internalの使われ方イメージ (実際のソースコードとは多少異なります) #JXUG Button ButtonRenderer 参照 internal void SendClicked() => Clicked?.Invoke(this,EventArgs.Empty) NativeButton.TouchUpInside += (s,e) => Element.SendClicked(); internalメソッドを経由してネイティブ コントロールのイベントを Xamarin.Formsのイベントに変換したり。
  10. 10. 344ファイルの変更の概要  internal クラス/インターフェースをpublicにしたう えでXamarin.Forms.Internals 名前空間に移動。  internal メンバをpublicにしたうえで [EditorBrowsable(EditorBrowsableState.Never)] を付 与。(使ってほしくないという意図を伝える)  参照する側のファイルに using Xamarin.Forms.Internals を追加。(既存コードの変 更は最小限に抑える) #JXUG
  11. 11. 未知に対して開かれたXamari.Forms  Device.OnPlatform() の変更(XF 2.3.4)  動作プラットフォーム定義をenumからstringに変更 することにより、アプリでサードパーティー製のプ ラットフォームを扱うとこが可能になった。  InternalsVisibleTo の排除 (今回の話)  新しいプラットフォームを追加する際に必須だった internal要素がpublicに変更されたことにより、 Xamarin.Forms本体の変更なしにサードパーティー 製のプラットフォームの追加が可能になった・ #JXUG

×