• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Xamarin によるクロスプラットフォームモバイルアプリ開発
 

Xamarin によるクロスプラットフォームモバイルアプリ開発

on

  • 5,167 views

うずらインキュベータ - http://atnd.org/events/47898 で発表した資料です。

うずらインキュベータ - http://atnd.org/events/47898 で発表した資料です。

Statistics

Views

Total Views
5,167
Views on SlideShare
2,566
Embed Views
2,601

Actions

Likes
10
Downloads
15
Comments
0

11 Embeds 2,601

http://ytabuchi.hatenablog.com 2426
https://cybozulive.com 66
http://blog.hatena.ne.jp 42
http://amay077.github.io 38
https://twitter.com 19
http://s.deeeki.com 5
http://webcache.googleusercontent.com 1
http://translate.googleusercontent.com 1
https://www.chatwork.com 1
http://www.inoreader.com 1
http://blog.amay077.net 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Xamarin によるクロスプラットフォームモバイルアプリ開発 Xamarin によるクロスプラットフォームモバイルアプリ開発 Presentation Transcript

    • Xamarin による クロスプラットフォーム モバイルアプリ開発 2014.2.26 うずらインキュベータ #1 in Toyohashi, Aichi
    • 自己紹介 • Twitter: @amay077 • 位置情報エンジニア、
 モバイルアプリエンジニア、 etc • MapQuest.co.jp 
 → Cosmoroot,Inc(Nagoya) 2 Now Hot topics 地図, 位置情報, オープンデータ, C#, Android, iOS, Xamarin
    • クラウドサービスプロバイダ •        (ロジネビュラ) • •       (ジクウ) • • 千年先まで費用ゼロのクラウド型倉庫管理システム おもにココ担当 リアルタイムデータ収集プラットフォーム Nepula(ネプラ) • 基幹業務システム向けPaaS 3
    • ref http://blog.airs.co.jp/2010/12/06/hamackathon-20101204.html HexRinger developed at ハマッカソン #2 4
    • 続きは… 位置情報系Androidアプリケーションの開発 - Togetterまとめ しゃべPOI developed for OpenStreetMappers 5
    • ref シビックハックの広まりと地方エンジニアの躍進 ‒ MA9総括 ¦ finder 富士フォト with ふじのくにオープンデータ MashupAward9, アーバンデータチャレンジ東京2013 6
    • 本題 7
    • Xamarin とはなんぞや? • 「ざまりん」と読みます • .NET Framework のオープンソース実装である 「Mono」を作ってる人たちが作った企業の名前 • 及び、同社が提供するSDKやツールなどをひっ くるめた総称 8
    • ひとことで言えば .NET(C#)で、Android/iOS/Mac/ Window アプリを開発できるSDK 9
    • もうちょっと詳しく1 • Xamarin.iOS(旧MonoTouch)
 Xamarin.Android(旧MonoDroid)
 Xamarin.Mac(MonoMac) • 各プラットフォーム(PF)のMono実装
 +各PFのAPIの 薄い ラッパー • いずれもOSSではなく、有償のプロダクト (MonoMacはOSS、ただしGPL/LGPL) 10
    • もうちょっと詳しく2 • Xamarin Studio(旧MonoDevelop) • • • Win/Mac/Linux で動作するOSSな統合開発環境(IDE) モバイル開発以外でも使われる(ってか、そっちが主) Visual Studio アドイン • iOS/Android開発を実現するためのアドイン • Xamarin BUSINESSエディション以上が必要 11
    • 価格体系 ref https://store.xamarin.com/ 「/年/PF/開発者」である事に注意!(更新せずに使い続けてもOK) 学割あります(BUSINESS版が $99!!) 12
    • 使われてるの? 530,000 developers in worldwide ref http://xamarin.com/apps 13
    • 日本でも ref フェンリル株式会社 ¦ スマートフォンアプリ開発 実績 NHK 紅白 14
    • Microsoftと提携! ref http://xamarin.com/msdn • Portable Class Library が Xamarin.iOS, Xamarin.Android にも対応 • MSDNサブスクライバー向け特別価格
 Xamarin.iOS,Android BUSINESS版が30%OFF 15
    • Win+Visual Studio で作る? • iOS 開発の為に Mac が必要 • • iOS開発でUIデザイナ(Interface Builder)が使えない • • リモート接続してビルド&デバッグ Xamarin.Android には UIデザイナあります インストールや日本語入力が不安定との も ↓ Mac + Xamarin Studio での開発が 現在のベストプラクティス(個人の見解です) 16
    • Xamarin とは(もう一度) 各PFのMono実装
 +
 各PFのAPIの 薄い ラッパー 17
    • Xamarin.Android の実行モデル Android(標準) Xamarin.Android アプリケーション(Java) アプリケーション(C#) アプリケーションフレー ムワーク(Java) アプリケーションフレー JavaSE6 ムワーク(.NET) .NET4.5 BCL VM(Dalvik) Monoランタイム コアライブラリ群 コアライブラリ群 Linux カーネル Linux カーネル どちらも中間言語を ランタイムがJITコンパイルして実行 18
    • Xamarin.iOS の実行モデル iOS(標準) Xamarin.iOS アプリケーション(C#) CocoaTouch(.NET) アプリケーション(Objective-C) .NET4.5 BCL CocoaTouch CocoaTouch コアライブラリ群 コアライブラリ群 LLVMコンパイラ Mono AOTコンパイラ ARMマシン語 ARMマシン語 ARM ARM 実機 実機 19
    • 利点と欠点 • Xamarin.Android • • • ◎:Microsoftと仲が良い
 <GoogleはOracleと仲悪い(まだJava6)> △:Monoランタイムをアプリに含めるためサイズが 増加 Xamarin.iOS • ◎:ガベージコレクション、静的型付け • △:事前コンパイル(AOT)の為、使えない機能(動的 コード生成等)がある 20
    • 「薄いラッパ」である事の利点 • PFのバージョンアップに追従しやすい • 厚いラッパ(=共通API)では、複数PFで整合性を 取らないといけないので時間がかかる • PF固有の開発経験が活かせる • 潰しが利く(=PF固有の開発に戻りやすい) • 使い方が変わってしまう厚いラッパでは、戻る のは難しい 21
    • DEMO Xamarin.Android と iOS で HelloWorld 22
    • クロスプラット フォームで開発するには 23
    • どこが共通化できるの?1 共通化できるところ
 (基本ライブラリ相当機能) 共通化できないところ
 (PF固有の機能) • 基本データ型、計算処理 • 画面 • 通信処理 • センサー系(GPS、加速度等) • ストリームI/O • カメラやアドレス帳 • 非同期処理 • アプリ間連携 24
    • どこが共通化できるの?2 PCL(Portable Class Library) アプリ(C#) アプリケーションフレー ムワーク(.NET) ここは共通化できる .NET4.5 BCL .NET4.5 BCL Monoランタイム アプリ(C#) _ CocoaTouch (.NET) CocoaTouch Androidコアライブラリ群 iOSコアライブラリ群 Xamarin.Android Xamarin.iOS 25
    • そして PCL へ • PF間で共有できる「ポータブ ル」なクラスライブラリ • 実際には、対応PFセット毎にプ ロファイルが定義されている • Xamarin.Android/iOS も対応 WPF/Win8/Android/iOS に1ソース (というか1バイナリ)で対応できる 26
    • DEMO PCL をつくって Xamarin.Android と iOS から使ってみる 27
    • 既存資産の活用1 • Xamarin.Android Java Binding • • • Java ライブラリ(.jar)を利用可 .NET API は .jar から自動生成+カスタマイズ Xamarin.iOS Obj-C Binding • Obj-C の Static Library(.a)を利用可 • .NET API を自分で定義する必要あり • 補助ツール - Objective Sharpie • Java Binding より結構大変 28
    • 既存資産の活用2 • 既存の.NET資産もある程度 使える(PCLでなくても) • .NET Mobility Scanner で どの程度利用できるか調べ る事ができる • http:// scan.xamarin.com/ 29
    • 既存資産の活用3 • Xamarin Components • • Xamarinで利用できるライブラリのマーケット Nuget • • • .NET 向けのパッケージマネージャ 画面に依存しないライブラリなら使えるかも CodePlex, Githubなど • ライブラリが対応してなかったらコードを入手して Xamarin用にビルドという手も 30
    • 他のクロスプラット フォーム開発ツールとの比較 Titanium / PhoneGap / Adobe AIR / Delphi XE 31
    • Xamarin(おさらい) 言語 実行形式 共通化可能 C#(.NET) Android:JIT iOS:AOT 基本ライブラリ相当機能 (計算処理、通信処理、非同期処理など) 共通化不可能 PF固有の機能(UI, センサーなど) PF固有機能 呼び出し PF毎のAPIを呼び出し可能 32
    • Titanium Mobile 言語 JavaScript 実行形式 インタプリタ 共通化可能 共通化不可能 PF固有機能 呼び出し コアロジック、GPS など
 共通APIが用意されている機能、 Label, EditBoxなど簡素なUI PF固有のUIパーツ(CoverFlowView等) コアロジックでもPF依存が多いとの Module を作成 33
    • PhoneGap/Sencha Touch 言語 HTML5+CSS+JavaScript 実行形式 WebView上で動作するWebアプリ 共通化可能 Webアプリなので一見は共通。 共通APIが用意される一般的な機能 共通化不可能 ブラウザ依存は少なくない 共通APIが無い機能 PF固有機能 呼び出し Plugin を作成 34
    • Adobe AIR for モバイル 言語 実行形式 共通化可能 共通化不可能 PF固有機能 呼び出し ActionScript Android:JIT iOS:AOT UI含め API が用意されていれば可能。 ただしUIは独自レンダリング 基本的には無いが、 その分機能が最小公倍数である Native Extensions を作成 35
    • Delphi XE 言語 実行形式 共通化可能 共通化不可能 PF固有機能 呼び出し Delphi Android:JIT(JNI) iOS:AOT UI含め API が用意されていれば可能。
 UIは独自レンダリングだが Pixel Perfect でPFのスタイルを忠実に再現。 PF毎のAPIもあり、 それを使った場合は共通化不可能 PF毎のAPIを呼び出し可能 36
    • Others • Qt Mobile • • RoboVM • • C++ で書けるなら最強じゃね?(書けるなら) Java → LLVM → Obj-C Unity, Corona • ゲーム向けっぽい 37
    • しかし Xamarin 最大の利点は 38
    • C# 39
    • C# is Cool!!! [Objective-C]! 01 [button1 addTarget:self action:@selector(onClick:)! 02 forControlEvents:UIControlEventTouchDown];! …! 5 Lines 03 -(void)onClick:(UIButton*)button{! 04 NSLog(@“Hello”);! 05 }! ! [Java]! 01 button1.setOnClickListener(new OnClickListener() {! 02 @Override! 03 public void onClick(View view) {! 04 05 6 Lines Log.d(TAG, “Hello”);! }! 06 });! ! [C#]! 01 button1.Click += (s, e) => Debug.WriteLine(“Hello”); ref https://xamarin.com/csharp 40 1 Line
    • LINQ 01.0∼9 の数値を! 02.偶数だけにして! 03.大きい順に並び替えて! 04.10倍にして! 05.出力する! ! [C#]! 01 new int[]{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }! 02 .Where(x => x % 2 == 0)! 03 .OrderByDescending(x => x)! 04 .Select(x => x * 10)! 05 .ToList().ForEach(x => Debug.WriteLine(x));! ! [Output]! > 80 60 40 20 0 41
    • async/await ワーカースレッドで時間のかかる処理をして、終わったらメインスレッドで結果を表示 [Java]! 01 int doHeavyWork() {! 02 return /* working... */;! 03 }! ! [C#]! 01 Task<int> DoHeavyWork() {! 02 return Task.Run<int>(() => {! 03 return /* working... */;! 04 });! 05 }! 04 private void onClick(View v) {! 05 new AsyncTask<Void, Void, Integer>() { ! ! 06 @Override! 06 async void onClick(object s, EventArgs e) {! 07 protected Integer doInBackground(Void... params) result = await DoHeavyWork();! 07 var {! 08 return doHeavyWork();! 08 label1.Text = "count = " + result;! 09 }! 09 }! ! 10 protected void onPostExecute(Integer result) {! 11 label1.Text = "count = " + result;! 12 };! 13 }.execute((Void)null);! 14 } 42
    • まとめ 43
    • まとめ • Mac + Xamarin Studio + Xamarin.Android + Xamarin.iOS で クロスPF 開発 • Win は、VS + Xamarin Addin で • PCL でコアロジックをクロスPFでバイナリ共有 • C# >>>>>>> Java, Objective-C 44
    • Links • Xamarin Developer Center - http://docs.xamarin.com/ • Xamarin日本語情報(XLSoft) - http://www.xlsoft.com/jp/products/xamarin/ • Qiita - http://qiita.com/tags/xamarin • はてなグループ - http://hatenablog.com/g/12921228815715432734 • Facebookグループ - https://www.facebook.com/groups/ 778386365523431/ • インサイドXamarin(Build Insider) - http://www.buildinsider.net/mobile/ insidexamarin • StackOverflow - http://stackoverflow.com/questions/tagged/monodroid +or+monotouch+or+xamarin?sort=active 45
    • Xamarin Advent Calendar 2013 ref http://qiita.com/advent-calendar/2013/xamarin 46
    • What's Next? • Xamarin Test Cloud • Xamarin Studio iOS UI designer • X-Platform MVVM Frameworks • MvvmCross / QuickCross / ReactiveUI / etc • Using Locations and Maps • Xamarin Evolve 2014 (Oct 6-10) 47
    • ありがとうございました