眠いしお腹すいたし(´・ω・`)

C#関連を主に書きます。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

Xamarin.Forms開発で必要な知識

Build以降のXamarin界隈が活気がすごいです。

前はここまですごくなかったのに急にどば~~(; ・`д・´)って感じです。

Xamarin.Formsでの開発に関しての所感は以前書きましたがTwitterのTL見ていて知識面に関してちょっと書いてみようかなと思いました。

あくまでも私自身が感じた感想みたいなものですし、作るものによっても変わってくるとは思いますし、規模によって個人が必要な知識の範囲も変わるので参考程度にお願いします。

開始時の知識・経験

Xamarin.Formsでの開発を始めた時点での私は

  • Android開発の経験はあるけどものすごく詳しくはない。

  • iOS開発の経験なし。

  • WPF開発はそこそこどっぷり。バインディングスタイルのデザインパターン好き。

  • Xamarin.Formsに関する知識はとりあえず考え方とかのイメージは掴めた。

という状況で開発をスタートしました。

主に二人で開発をしていますが、もう一人の方はiOS開発の経験があるけど逆にWPFAndroidに関しては経験ない感じでした。

開発での役割としてプログラムデザインは私が全て行いました。

私自身は東京さとおくて勉強会とか出たことないレベルのプログラマです。

開発時点で必要だと思った知識

Xamarin

Xamarinというものへの理解は必要です。C#/F#で書いたプログラムがどのように各プラットフォームで実行されるのか、イメージだけでもつかんでおく必要があります。

とはいっても

この資料を読んでわかるくらいで良いと思います。

これ、とても分かりやすいです。

www.slideshare.net

Xamarin.Forms

Xamarinを理解したうえで、Xamarin.Formsがクロスプラットフォーム開発のどの範囲をカヴァーしてくれるか理解しておくと良いと思います。

感覚的にXamarin.Formsが何をしているかも知っておいた方が便利です。

これを理解していないとプログラムデザインを行うことがとても難しいです。

www.slideshare.net

バインディングスタイルでの実装

これはコードビハインドで作る事もできるので必須ではないですがXamarin.Formsでの開発のメリットを出すためには必要だと思います。

バインディングスタイルのデザインに関する知識はできれば欲しいかなと思います。

ugaya40.hateblo.jp

を追っておけば間違いないと思いますが私には難しかったりします。

www.slideshare.net

XAMLの知識は重要ではないと思っています。開発していれば覚えます。 ただしXAMLが各プロットフォームのネイティブなUIに変換されて実行される点は知っておく必要があります。WPFXAMLとは異なる点です。

PCL/Shared

プロジェクトの種類にてPCLとはどういうものか、Sharedとはどういうものか、理解しておく必要があったと思います。

あまりよくわからない状態で選択すると後で(´・ω・`)な顔になったりします。

プログラムデザイン、プロジェクト構成にも大きく影響します。

開発中に必要になって勉強した知識

C# async/await

私自身があまり理解できていなかったので勉強しました。

C# ReactiveExtentions

開発にてViewModel層にReactivePropertyを導入したのでRxを生かすために勉強しました。

各プラットフォームのネイティブ実装

次のプッシュ通知もそうですが、各プラットフォーム毎にプログラムを作らなければならない部分に関しては、そのプラットフォームでの実装を参考にします。

Objective-C Swift Javaソースコードを読むことになります。

各プラットフォーム毎の違いを抽象化してPCLで扱えるように考える作業もあります。

プッシュ通知

開発にてプッシュ通知を実装する必要があったため

  • 各プラットフォームでのプッシュ通知の特性の違い
  • 各プラットフォームでのプッシュ通知の実装
  • どのように抽象化してPCLプロジェクトで扱うか

などを、勉強したり考えたりしました。

この辺はXamarinとか関係なく、各プラットフォームでの記事を読みまくりました。

プッシュ通知関連のバックエンドに関しても全て私が作っているので送信側もそれなりに勉強しました。

ディープリンク

アプリは普通はアイコンをタップして起動するものですがWebページから起動するようなケースもあるかと思います。 そういう実装の場合、アプリがインストールされていなかったら~~な動作とか、いろいろと考える必要があります。いわゆるDeepLinkと言われるものです。 プラットフォーム毎にけっこう異なるのとiOSは8/9/9.1/9.2で全然動きが異なっていたりで苦労しています。

Xamarin.Forms

開発中にもバージョンアップが行われ新しい機能が追加されたり変化していきます。

また

なんか挙動がおかしい、Navigationをカスタマイズしたい、これどうやったら実現できるのか

等々いろいろ出てきますので、都度勉強しました。

今までで一番Githubソースコード読んだ1年でした。

NDKとObjective-Cでの共通化

CコードのNDK、Objective-Cでの実装部分があったため知識が必要でしたが、私が担当でないため結果だけしか聞いていないです。

通常はあまり必要ないかなと思います。

Xamarinからの呼び出しはP/Invokeで簡単です。

デプロイと運用

世の中に公開する前段階・公開後のバージョンアップと運用なども勉強するがありました。

この辺は役割として私が主担当ではなかったので調査結果を聞くだけでしたが開発チームとしては勉強しました。

  • Google Playへの登録
  • AppStoreへの登録
  • 各プラットフォーム毎のベータテストの公開と運用方法
  • クラッシュレポート
  • 各プラットフォームでの強制アップデート

等々ですね。

所感

Xamarin.Formsを使えば全てが共通化できるなんて幻想は存在しません。

各プラットフォーム毎の知識は必要になります。

が、調べれば何とかなる範囲の事が多いと思います。

Android/iOS開発のスペシャリストがいなければ開発なんてできない。

なんてことはありません。

インターネットには色々と各プラットフォームの解決策が載っています、

Xamarin.Forms自体の情報はそれほど多くはありませんが、プラットフォーム毎の解決策が分かれば乗り越えられます。

私自身はもうすぐ仕事での開発が終わってしまうのでXamarinに触れる機会は減ると思います。

6月以降、諸事情にて会社を休職する事になっているため、開発の真っただ中からしばらく離れます。

Xamarinで開発始めたのが去年の夏前くらいからでしたが、出来れば今年のそれくらいの時期から開発始めたかったなぁと思っています。

いま、去年の比じゃないくらいXamarinが注目されています。

モバイルのクロスプラットフォーム開発始めるならXamarinで今すぐ始めよう。

以上