Xamarinでクロスプラットフォーム用のプロジェクトを作ってみる
…思いっきりかぶりました。
しかも前日と
ネタもないし、仕方ないのでこのまま行きます。
(書き出し時点で公開前日19時…)
環境とか
iOS対応させるのに結局Macは必要になります。
そこで、以下の環境を使います。
- Mac
- Xcode
- VirtualBox
- Windows10
- VisualStudio 2015 Community
- Xamarin iOS/Android
Mac上でVirtualBox使ってWindowsを動かし、その上でVisualStudioを動かします。
AndroidとiOSとUWPと
上記を対応してしまえばたいがいの環境で動くアプリが作れてしまいます。
(この際Macはごめんなさい)
まずはUWPのプロジェクトを作り、ざっくりと動くところまで作っていきます。
さて、サンプルでどんなものを作ろうか、と思いましたが、とりあえず
VisualStudio Onlineにログインするアプリを、APIを使って書いてみようと思います。
(マジで作るならAPI使わずにライブラリ使いましょう)
VisualStudio Online関連のリンク
VisualStudio Online関連のAPIはここにまとまっていて、もうこれだけでお腹いっぱいいっぱいです。
しかし、これはOnlineのAPIです。
クライアント用のライブラリはここにあって、このライブラリを使うとオンラインもスタンドアロンでインストールするTFSでも両方使えるようなので、こちらを使う方が全然いいでしょう。
Solutionを作る
VisualStudioから空のSolutionを作ります。
この中にすべてのプロジェクトを収めていきます。
名前はアプリ名で。
UWPのプロジェクトを作る
プロジェクトを作る前に、Solutionのディレクトリ内にプロジェクト用のディレクトリを作っておきます。
Solutionを右クリックしてメニューを出し、エクスプローラーでフォルダを開きます。
このフォルダの中にプログラム名_uwpというディレクトリを作り、その作ったディレクトリの中にプロジェクトを作ります。
iOSやAndroidも
同じようにiOSやAndroidのプロジェクトもSolutionディレクトリ内にディレクトリを作ってその中にプロジェクトを作ります。
こうすることで、プロジェクトファイル(.csproj)を同じ名前にでき、出来上がるアプリ名を同じものにすることができます。
共通で使うもの
各プラットフォーム共通のデータ構造や処理はまとめた方が二度手間になりません。
そのため、PCLや共有プロジェクトにして使い回すようにしましょう。
自分のやり方としては、
中身 | 形式 | 備考 |
---|---|---|
MVVMの中のMとVM | 共有ライブラリ | |
MVVMの中のV | 共有ライブラリ | Xamarin.Forms |
言語リソース | PCL | .reswファイル |
と分けます。
MVM + Vにする理由は、Xamarin.Formsが使えないプラットフォームがあるかもしれないからです。
例えば、ほら。Macとか。
共有ライブラリにする理由は、System.Net.Httpとかを使いたくなるからです。
特に、Mを取得するのに HttpClient
を使いたくなりますし。
そうなると、PCLではちょっと、となるんですよね。
また、これは単に少し前のバージョンのXamarin.Formsで起きてたことなのですが、共有プロジェクトにするとXAMLがうまく使えませんでした。
その経緯もあり、VはXAMLを使わないXamarin.Formsで書きます。
(あくまでも自分のやり方です)
バージョン管理
ここはXamarinとは関係ないのですが、自分が使うバージョン管理システムは、
- 公開する場合はGitHub
- 非公開の場合はVisualStudio Online
に置きます。
結局どちらもGitでバージョン管理をするのですが。
VisualStudio Onlineはプロジェクト数が事実上無限になってたり、自動ビルドもあったり、自動ビルドもXamarinに対応してたりでかなり依存しています。
VisualStudioからも使いやすいですし。
…あ、少し前に名前変わってVisualStudio Team Serviceになったんでしたっけ。
最後に
いろんなところで書かれていることですが、C#で書くことで非常に少ない手数でプログラムを書くことができます。
また、C#6になって ?.
とか $"〜{id}〜"
とか {get;set;} = new xxx
とか書けたりするので、ますます手数を減らせるようになっていて幸せになってます。
Xamarin、もっとみんなで使いましょう。
(少し高いのがなぁ…)
あ、サンプルはまたGitHubにでも登録します。
(書き終わり時点で22時50分…なんとか…)