Xamarin逆引きTips
Xamarin.Android/Xamarin.iOSを利用するには?
C#でAndroid/iOSアプリを開発できるXamarinの実践TIPSの連載がスタート。TIPSの方向性や読者対象を示し、Xamarinの概要やインストールについて解説する。
はじめに
Xamarin(ザマリン)は、C#など.NETの技術でAndroid/iOSアプリを開発できるツールキットである。
今回からスタートするこの連載では、Xamarinを利用して、主にAndroid/iOSアプリを開発する際のTipsを多く公開していく予定だ。
Java/Objective-C/Xamarinの3つのSDKを使いこなす開発者の視点で解説
昨年(2013年)末、マイクロソフトとの提携が発表されて以来、Microsoft MVPの方々の強力な啓もう活動により、日本国内での知名度もだいぶ向上してきた感がある。米国で開催されたMicrosoft Build 2014では、XamarinのCTOであるMiguel de Icaza氏がセッションを担当したり、MicrosoftとXamarin両社共同で.NETベースのオープンソース財団「.NET Foundation」の設立を発表したりするなど、話題に事欠かない。このあたりの情報は、日本で開催される「de:code」でも得られるだろう。
このように活発な動きを見せているXamarinではあるが、マイクロソフトとのパートナーシップによる宣伝が多いため、マイクロソフト系の開発者への知名度は高いものの、Java言語あるいはObjective-C言語だけを利用するスマートフォンアプリ開発者には、まだそれほど浸透していないと思われる(実際、国内でXamarinが紹介されるのは大抵Visual Studioでの開発を前提としたものであり、その時点で「自分はターゲットではない」と思ってしまう人も少なくないと思われる)。
筆者は、もともとは.NETでのシステム開発を長く経験しており、近年はJavaやObjective-CでのAndroid/iOSアプリ開発に従事している。3つのSDKを使いこなす立場から、Xamarinを利用すると得られるメリットをお知らせしたい。
この連載の対象者
このTips集は、現在、Android/iOSアプリを、いわゆる「ネイティブ」で開発している開発者を対象としたい。
筆者は、同じプロダクトをAndroidとiOSでそれぞれ開発している開発者こそ、Xamarinのメリットを最も享受できると考えている。
Xamarin.Android/iOSは、AndroidやiOSのAPIをほとんど名称変更せずにラップしており、AndroidやiOSで覚えたAPIの知識がそのまま利用できる。その上で、C#言語や.NETの強力なサポートにより、JavaやObjective-Cよりも簡潔に書くことができ、機能によっては共通化が可能だ。
この連載で紹介するTipsは、「○○するには?」といった目的別の小さな記事の集まりであり、1つの目的に対してXamarin.Android/iOSでの利用方法を、JavaやObjective-C言語との対比を交えながら紹介していくつもりだ。
また、開発環境についてであるが、スマートフォンアプリ開発者はMacを使用している人が多いようだ(もちろんiOSアプリ開発にはそれしか選択肢がないわけだが)。かくいう筆者も、スマートフォン開発を始めるにあたり、WindowsからMacに環境を移した一人だ。そのため開発環境はMacとXamarin Studioを主に利用する。
もちろんこれらのTipsは、これを機にAndroid/iOS開発を始めたいWindows系の開発者にも有用だ。ただし、JavaやObjective-Cでもアプリ開発ができる程度の知識を身に付けることを強くお勧めする。Xamarinは、AndroidやiOSの素のSDKに「皮をかぶせた存在」であり、特にトラブルが起こったときには「その原因がXamarinかどうか?」を切り分けるために、JavaやObjective-Cで動作を確認する必要が出てくるだろう。これはクロスプラットフォーム開発ツール全般に言える宿命であろう(ちなみに筆者はこれまで切り分けにより「Xamarinが原因だった」ケースに遭遇したことはない)。
Xamarinを利用するには?
さて、前置きが長くなってしまったが、連載の初回となる本稿では、Xamarin製品の基本的な情報をまとめた後、Mac環境にXamarin Studioを導入する方法を説明していく(それ自体は驚くほど説明する量は少ないが)。
Xamarinのエディションについて
「Xamarin」は、企業名であり、同社が提供するツールキットのブランド名でもある。
まず、Xamarin製品群のエディションについて、軽く触れておきたい。
開発者が実際に利用するのは、Xamarin.Android、Xamarin.iOSなどの有償のSDK製品と、「Xamarin Studio」という統合開発環境(IDE)だ。このあたりの詳細な解説は、「連載:インサイドXamarin」を見てほしい。
Xamarin.Android、Xamarin.iOSなどの製品は、オフィシャルサイトで説明されている通り、4つのEditionがある。
各エディションについて、それぞれ簡単に説明する。
STARTERエディション
インストール直後はこのエディションになる。無料で使えるエディションであるが、作成できるアプリの容量が64KBytesまでに制限される。この制限はかなり実用には向かないもので、例えば「Json.NET」というJSONを扱うライブラリをプロジェクトに追加するだけで制限を超えてしまう。
他にもサポートが付属しないなどの制限はあるが、利用できるAPIに制限はないし、Google Play StoreやAppStoreへの掲載も可能だ。下記のトライアルモードと併せて、Xamarinを評価するには最適だ。
トライアルモード
STARTERエディションの制限を超えると、次にこの状態になる。トライアルモードでは、後述するBUSINESSエディションの機能を30日間試用できる。
ただし、この状態でビルドされたアプリケーションは、Xamarinのスプラッシュスクリーンが挿入され、ビルドから1日間経過すると起動できなくなる時間制限付きとなる。
INDIEエディション
個人開発者にとって、最も現実的なのがINDIEエディションだ。筆者も個人ではこのエディションを利用している。
STARTERエディションの容量制限が撤廃されている。Visual Studioには対応していないが、Macを常用する開発者なら、十分にアプリ開発に使用できる。
なお、サイトの比較表では表現されていないが、xbuild
による自動ビルドは行えないもようだ(個人的にはこの制限は残念だ)。
BUSINESSエディション
このエディションからVisual Studioアドインが付属する。Windowsの開発者は、このエディションからが選択肢になるだろう。
「BUSINESS」だけあって、企業内でのアプリ配信、電子メールによるサポートなど、企業向けの要素が用意されている。
ENTERPRISEエディション
全ての要素が利用できる最上位エディション。エンタープライズ向けのコンポーネント、企業向けサポート、Hotfixなどが含まれる。SAP向けのコンポーネントなど、このエディションにしか提供されないものもあるようだ。
ライセンスの考え方
Xamarinのライセンスは、製品ごと、開発者ごとに契約が必要だ。「製品ごと」というのが見落としやすいところで、iOSとAndroidの開発をしたい場合は、「Xamarin.Android」「Xamarin.iOS」のどちらも購入しなければならない。INDIEエディションなら $299 + $299 = $598(米国ドル) が最低でも必要になる(実際にはセット購入によるディスカウントがあるが)。
ライセンスを購入して1年間は、最新の製品への更新(やエディションによってはサポート)が提供される。ライセンス自体は永続であるので、1年を経過しても開発や配布は可能であるが、AndroidやiOSの進化のスピードを考えると、1年ごとの契約更新が事実上必要だろう。
アカデミックライセンス
サイトでは見つけづらいが、学生向けのライセンスもある。
BUSINESSエディション(※電子メールのサポートは提供されない)が、製品それぞれ99ドルと、かなりのディスカウントが受けられる。日本でも購入できた例があるので、学生の開発者はぜひ利用してほしい。価格の差異はあるが、日本の販売代理店(後述)でも受け付け可能とのことなので、英語でのやりとりに不安があれば、利用してもよいだろう。
オープンソース開発者へのサブスクリプション
もしあなたがオープンソースの開発に参加していて、そのプロジェクトがXamarinに対応している(もしくは対応しようとしている)ならば、その開発、テスト、保守用に使える非商用ライセンスを求めることができる。こちらのフォームから申請してみよう。
日本語情報について
日本では「エクセルソフト(XLsoft)」が主な販売代理店となっており、オフィシャルサイトの日本語化も順次進められているので参考にするとよいだろう。また、Facebookグループや、ブログなどでも見つけられる情報が増えてきたので、検索してみるとよいだろう。
Xamarinのインストール
Mac環境におけるXamarinのインストール方法はとても簡単だ。
Xamarin 2.0のダウンロードサイト(図2)より、必要事項を記入の上、[Download Xamarin for OS X]ボタンを押し、XamarinInstaller.dmg
ファイルを入手する。
あとは、この.dmgファイルをマウントし、[Install Xamarin]を選択するだけだ。
インストール実行中、Xamarinのインストーラーは、Android SDKを自動的にダウンロードするが(図3はそのインストール内容の設定画面)、すでにAndroid SDKがセットアップ済みであれば(Android開発者であればそうだろう)、それを指定でき、インストール時間を短縮できる。
その後、Xamarinで使用するAndroidエミュレーターの作成が自動で行われる(筆者は、そのエミュレーターを使ったことがないが)。その後、次のような画面になれば、インストールは成功だ。
最後に図4の[Launch Xamarin Studio]ボタンを押せば、Xamarin Studioが起動できる(図5)。アプリケーションメニューやLaunchpadからでも同様だ。
Xamarin Studio起動時の画面(図5)には、左側の[ソリューション]に最近使用したプロジェクトや、中央の[Xamarin News]にXamarin Blog(英語)の最新トピックス、右側の[Pre-Build Apps]にXamarin社が提供するサンプルアプリケーションが表示される。ちなみに、上の画像に表示されている「C# T-shirt Store」のアプリケーションを自らの手でビルド、実行し、操作すると、C# Tシャツ(など?)をもらえる。日本にも発送された実績があるとのことなので、ぜひ試してほしい。もちろんこのアプリ自体も優秀なショッピングカートアプリのサンプルだ。
Android SDKやXcodeとの互換性
Xamarinは、Android SDKやXcode(iOS SDK)を使用しており、基本的には最新の各SDKに対応する。ただし、Android SDKやiOS SDKのメジャーバージョンアップなど、大きな変更があったときには、SDKの更新を少しちゅうちょした方がよいだろう。過去に「Android SDKを更新したら、Xamarinでビルドができなくなった」ことがあった。それは、その後、数時間のうちに有志により回避策が発見され、数日のうちに正式対応されたが、今後も注意しておいた方がよいだろう。
今後の予定
以上、初回は、Xamarinの導入についてまとめた。次回以降は、目的別のTipsを紹介していく。例えば以下のような内容を予定している。
- Xamarin.Android/iOSで画面をレイアウトするには?
- Xamarin.Android/iOSで画面遷移を行うには?
- Xamarin.Android/iOSでアプリケーションの設定情報を保存するには?
- Xamarin.Android/iOSでGPS、カメラ、アドレス帳を利用するには?
- Xamarin.Android/iOSでGoogle Mapsを利用するには?
これらの他にも随時公開していくつもりだ。リクエストをいただければ応じられるかもしれないので、筆者にコンタクトしてほしい。
※以下では、本稿の前後を合わせて5回分(第1回~第5回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。
1. 【現在、表示中】≫ Xamarin.Android/Xamarin.iOSを利用するには?
C#でAndroid/iOSアプリを開発できるXamarinの実践TIPSの連載がスタート。TIPSの方向性や読者対象を示し、Xamarinの概要やインストールについて解説する。
2. Xamarin.Androidで画面をレイアウトするには?
Xamarin.Androidでの画面のレイアウトの仕組みは、ネイティブのAndroidとほぼ同じ。そのレイアウト方法をネイティブでの手順と比較しながら解説する。
3. Xamarin.iOSで画面をレイアウトするには?(Xcode利用/ビルトインiOS用UIデザイナー)
iOS用の画面レイアウトを、Xcodeで行う方法を解説。また、Xamarin StudioのビルドインUIデザイナーで行う方法も説明する。
4. Xamarin.Androidで画面遷移を行うには?
Xamarin.Androidで画面を追加する方法と、2つの画面間を遷移し、遷移先にデータを渡す方法、遷移先から返り値を得る方法を解説する。
5. iOS/Androidの画面レイアウトを共通化するには?(Xamarin.Forms)
Xamarin 3がリリースされた。その新機能として注目されるXamarin.Formsの概要と、基本的な使い方、メリット/デメリットを解説する。Xamarin.Formsを使ってiOS/Android/Windows Phone間で画面レイアウトも共通化しよう。