MvvmCrossのプラグインを作ってプラットフォーム依存コードを再利用する

Xamarin Advent Calendar 2014の4日目です。

MvvmCrossガチ勢としては書かざるを得ないと思っていたけど忙しくてかけていなかったMvvmCrossのプラグインの作り方をこの機会を借りて紹介したいと思います。

そもそもMvvmCrossプラグインとは

MvvmCrossプラグインは、MvvmCrossで作っているプロジェクトにカメラやバイブレーションといったプラットフォーム依存コードを再利用できる形で提供します。プラグインを組み込むと、IoCコンテナプラグインが提供しているクラスが登録されます。

公式でも多くのパッケージが公開されており、NuGetでMvvmCross Pluginで検索すると大量に出てきます。NuGetで公開されているものはプラグインを追加するとすぐに使い始めることができます。

また、プラグインは簡単に作ることができるので、自分たちでもよく使う機能はプラグイン化しておくことで再利用することができます。

プラグインの作り方

今回は簡易的なTextToSpeechの機能を作るという想定のもと、プラグインを作成してみようと思います。

続きを読む

MvvmCross で Xamarin.Android の Fragment を使う方法と問題点について

Android 3.0 では、画面に表示される項目として、Activity の下に Fragment という要素を使うようになり、タブレット対応やタブの使用などでは必須レベルで使用するようになっています。

MvvmCross には、この機能に対して Fragging モジュールと、FullFragging モジュールという 2 種類の Fragment サポートがあります。 Fragging モジュールは Android 2.x でも使えるようにバックポートされた Support Library の Fragment を使用するもの、FullFragging モジュールは Android 3.0 以降に搭載される標準の Fragment を使用するものとなっています。

Fragging/FullFragging モジュールでは MvxFragment という View クラスが提供されますが、このクラスに関する使用方法がドキュメント上にありません。また、アプリが停止状態になる際の処理等が現状サポートされておらず、そのままの状態で使用するとメモリが少ない機種等で問題になってきます。

この記事では、MvxFragment クラスの使い方と、MvxFragment クラス上で停止機能が使えるように拡張する方法を紹介します。

続きを読む

Xamarin.iOS のネイティブバインディングを活用して既存の Objective-C 資産を流用する

Xamarin.iOS では、ネイティブバインディングを使用して Objective-C で書かれたライブラリを利用することができます。

つまり、既存のObjective-Cで書かれたアプリをXamarinに移行する際、特定の機能はネイティブライブラリにすることでObjective-Cのまま利用することができます。

ここでは、Objective-Cで書かれたアプリをUIViewControllerごとネイティブライブラリにし、Xamarin.iOSにネイティブバインディングで持ってくる方法をご紹介します。

続きを読む

Xamarin.Android で Java Integration ライブラリを作る

Xamarin では、広告・分析やUIなどの機能を提供するネイティブSDK(Java/NDK)も使用することができます。.NET用のライブラリだけでなく、ネイティブのライブラリが選択肢に入ることで、より多くの可能性を引き出すことができます。

ネイティブのライブラリを使用するには、バインディングライブラリというものを作ってラップする必要があります。この記事では Xamarin.AndroidJavaバインディングライブラリを作る方法をご紹介します。

続きを読む

Xamarin.iOS でバインディングライブラリを作る

Xamarin では、広告・分析やUIなどの機能を提供するネイティブSDKも使用することができます。.NET用のライブラリだけでなく、ネイティブのライブラリが選択肢に入ることで、より多くの可能性を引き出すことができます。

ネイティブのライブラリを使用するには、バインディングライブラリというものを作ってラップする必要があります。この記事では Xamarin.iOS のネイティブバインディングライブラリを作る方法をご紹介します。

続きを読む

MvxImageViewの iOS / Android 間挙動差異について (追記:修正されました)

追記:本体で修正されています。(文末参照)

MvvmCross の iOS および Android 版には、画像のURLをバインディングするだけで表示してくれる便利クラスである MvxImageView が存在しています。ところが、iOS 版で UITableViewCell に MvxImageView を入れてバインディングしていると、スクロール中に他の行の画像が表示されることがかなりの頻度でありました。

そこで、検証コードを書いて、iOSAndroid で挙動を比較してみました。

続きを読む

Kyoto.なんか でお話ししました #kyotoasterisk

わいわい感があってたのしそうだったので、Kyoto.なんかに行ってきました。

すごく幅広いおもしろ発表が11連発で楽しかったです。僕も、Xamarin+MvvmCross について、サンプルアプリを中心においてお話ししました。

続きを読む