ところでXamarinってどうよ・・・
Developers.IO 2016 札幌
2016年7月10日
#cmdevio2016
C#でiOS/Androidのネイティブアプリが作成可能なXamarin
は、今年、4月から無料で利用が可能になりました。
Xamarinは、非常に強力ではあるが、難しさもある。また、
簡単に実現できることもあれば、限界もあります。
本セッションでは、このあたりをできるだけ分かりやすく
解説したいと考えております。
自己紹介
© Classmethod, Inc
クラスメソッド(株)
アプリケーションエンジニ
ア
平内真一
・識別子 SIN/札幌ワークス
・Twitter @furuya02
・フリーソフト BlackJumboDog
・スタッフ CLR/H
・Microsoft MVP (2013/1~)
アジェンダ
© Classmethod, Inc
・Xamarinとは
・Xamarinネイティブ
・Xamarin.Fomrs
・アプリ紹介
・っでどうよ・・・
© Classmethod, Inc
Xamarinとは
Xamarinとは
C#好きですか・・・
© Classmethod, Inc
* C#でiOS/Android/Macアプリを作
成できるクロスプラットフォーム開
発ツール
* フルネイティブのアプリ(.ipa/.apk)
が作成できる
* 2つの開発手法
Xamarinネイティブ
Xamarin.Fomrs
2つの開発手法
従来は、各プラットフォームごと
© Classmethod, Inc
Xamarinネイティブ
プラットフォーム固有部分(主にUI)のみ、各プラット
フォームごと
© Classmethod, Inc
Xamarin.Forms
UIも共通化、未対応部分のみ、各プラットフォームごと
© Classmethod, Inc
© Classmethod, Inc
Xamarinネイティブ
Android編
ボタンの生成を例に比較してみる
© Classmethod, Inc
// ボタンの生成
Button btn = new Button(this);
// キャプション
btn.setText(“OK”);
// サイズ
btn.setLayoutParams(new LayoutParams(100,80));
// レイアウトへの追加
layout.addView(btn);
Java
Android編
ボタンの生成
© Classmethod, Inc
Button btn = new Button(this);
Button btn = new Button(this);
Java
C#
Android編
キャプション
© Classmethod, Inc
btn.setText(“OK”);
btn.Text = "OK”;
Java
C#
Android編
サイズ
© Classmethod, Inc
btn.setLayoutParams(
new LayoutParams(100,80));
btn.LayoutParameters =
new LayoutParams(100,80);
Java
C#
Android編
レイアウトへの追加
© Classmethod, Inc
layout.addView(btn);
layout.AddView(btn);
Java
C#
Android編
ボタンの生成を例に比較してみる
© Classmethod, Inc
Button btn = new Button(this);
btn.setText(“OK”);
btn.setLayoutParams(new LayoutParams(100,80));
layout.addView(btn);
Button btn = new Button(this);
btn.Text = "OK”;
btn.LayoutParameters =
new LayoutParams(100,80);
layout.AddView(btn);
Java
C#
iOS編
ボタンの生成を例に比較してみる
© Classmethod, Inc
// ボタンの生成
UIButton *btn
= [UIButton buttonWithType:UIButtonTypeSystem];
// キャプション
[btn setTitle:@“OK” forState:UIControlStateNormal];
// サイズ・位置
[btn setFrame:CGRectMake(110,210,100,40)];
// ビューへの追加
[self.view addSubview:btn];
Objectiv-C
iOS編
ボタンの生成
© Classmethod, Inc
// ボタンの生成
UIButton *btn
= [UIButton buttonWithType:UIButtonTypeSystem];
UIButton btn =
UIButton.FromType(UIButtonType.System);
Objectiv-C
C#
iOS編
キャプション
© Classmethod, Inc
[btn setTitle:@“OK” forState:UIControlStateNormal];
btn.SetTitle("OK",UIControlState.Normal);
Objectiv-C
C#
iOS編
サイズ位置
© Classmethod, Inc
[btn setFrame:CGRectMake(110,210,100,40)];
btn.Frame = new CGRect(110,210,100,40);
Objectiv-C
C#
iOS編
ビューへの追加
© Classmethod, Inc
[self.view addSubview:btn];
View.AddSubview(btn);
Objectiv-C
C#
iOS編
ボタンの生成を例に比較してみる
© Classmethod, Inc
UIButton *btn
= [UIButton buttonWithType:UIButtonTypeSystem];
[btn setTitle:@“OK” forState:UIControlStateNormal];
[btn setFrame:CGRectMake(110,210,100,40)];
[self.view addSubview:btn];
UIButton btn =
UIButton.FromType(UIButtonType.System);
btn.SetTitle("OK",UIControlState.Normal);
btn.Frame = new CGRect(110,210,100,40);
View.AddSubview(btn);
Objectiv-C
C#
ライフサイクル
iOS
© Classmethod, Inc
・localView 画面読み込み
・viewDidLoad ビュー読み込み完了
・viewWillAppear 画面描画前
・viewDidAppear 画面描画後
・viewWillDisappear 閉じる前
・viewDidDisappear 閉じ終わった
ライフサイクル
Android
© Classmethod, Inc
・onCreate 画面作成(初めて)
・onStart 画面表示直前
・onResume ユーザとの対話開始
・onPause 別画面への移行時
・onStop ユーザから見えなくなった
・onRestart 停止後の再開
・onDestroy 画面破棄
Android構成
XXX
© Classmethod, Inc
①
②
③
Xamarin.Android構成
© Classmethod, Inc
①
②
③
iOS構成
© Classmethod, Inc
①
②
③
④
⑤
Xamain.iOS構成
© Classmethod, Inc
①
②
③
④⑤
メリット
結局「C#で書ける」って事だけ?
© Classmethod, Inc
・VisualStudioが使える
・varが使える
・イベントで書ける
・async/await
・ラムダ
・Linq
・Parallel
・モデルの共通化
© Classmethod, Inc
Xamarin.Forms
独自フレームワーク
各プラットフォームのコントロールにマッピング
© Classmethod, IncAndroid.Widget.ButtonUIButton System.Windows. Button
Xamarin.Formsの構成
ページ・レイアウト・コントロール・セル
© Classmethod, Inc
Page
Control
Control
Cell
Cell
Cell
Cell
Layout
Application
Page
ApplicationのメインとなるMainPageプロパティ
© Classmethod, Inc
Application
Page
MainPage
ContentPage
基本的なビュー
© Classmethod, Inc
MasterDetailPage
選択メニューと詳細ページ
© Classmethod, Inc
NavigationPage
ナビゲーション
© Classmethod, Inc
TabbedPage
タブ切り替え
© Classmethod, Inc
CarouselPage
ページめくり
© Classmethod, Inc
Layout
コントロールの配置サポート
© Classmethod, Inc
Page
Control
Control
Control
Layout
Stacklayout
スタック iOSでは、9以降
© Classmethod, Inc
Absolutelayout
座標指定 重ね書き
© Classmethod, Inc
GridLayout
グリッド ちょっと珍しい
© Classmethod, Inc
RelativeLayout
相対的な位置指定
© Classmethod, Inc
Frame/ContentView/ScrollView
ビューに装飾・機能追加
© Classmethod, Inc
CONTROL
各種の部品
© Classmethod, Inc
Control
Control Control
Control
Control
Control
ActivityIndicator
ローディング中
© Classmethod, Inc
BoxView
世界最弱のコントロール
© Classmethod, Inc
Button
各プラットフォームのデザインを代表する
© Classmethod, Inc
DatePicker
日付選択
© Classmethod, Inc
Editor
複数行の入力
© Classmethod, Inc
Entry
一行入力
© Classmethod, Inc
Image
画像表示
© Classmethod, Inc
Label
これは、さすがに殆ど差異がない
© Classmethod, Inc
Picker
ドロップボックス的な
© Classmethod, Inc
SearchBar
検索入力
© Classmethod, Inc
Slider
アナログ的な入力
© Classmethod, Inc
Steper
デジタル的な入力
© Classmethod, Inc
TimerPicker
時間選択
© Classmethod, Inc
WebView
ブラウザ
© Classmethod, Inc
ListView
リスト(iOSのDynamicセルによるTableView)
© Classmethod, Inc
TableView
オプション設定(iOSのStaticセルによるTableVlew)
© Classmethod, Inc
Switch
ON/OFF
© Classmethod, Inc
CELL
ListView及びTableViewを使用する場合必要になる
© Classmethod, Inc
Cell
ListView
Cell
Cell
Cell
TextCell
タイトルと詳細情報の2行
© Classmethod, Inc
ImageCell
画像とタイトルと詳細
© Classmethod, Inc
EntryCell
1行入力
© Classmethod, Inc
SwitchCell
スイッチ
© Classmethod, Inc
ViewCell
全部自前で構築する
© Classmethod, Inc
© Classmethod, Inc
アプリ紹介(どんなもんよ)
縄神さま
Xamarin.iOS + SpliteKit
© Classmethod, Inc
Xamarin.Forms Facebookアプリ
機種依存コード、ほぼゼロ
© Classmethod, Inc
Xamarin.Form お絵描き
世界最弱のBoxViewをレンダラーで拡張
© Classmethod, Inc
ARコンポーネント
拡張現実アプリ
© Classmethod, Inc
© Classmethod, Inc
っでどうよ・・・
まず最初に・・・
© Classmethod, Inc
Xamarinを使用すれば、C#でAndroid
やiOSが書けるが、
C#erが、いきなりモバイルアプリを
書けるとは、誰も言ってない
あなたには、バギーを乗りこなす
自信があるか?
© Classmethod, Inc
あなたには、バギーを乗りこなす
自信があるか?
© Classmethod, Inc
Xamarinは、従来のMicrosoft製品と
は訳が違う
© Classmethod, Inc
Xamarinの入門書は、皆無に等しい
© Classmethod, Inc
Xamarin.Formsとの付き合い方
© Classmethod, Inc
向いてる方の評価
© Classmethod, Inc
乗りこなしてしまった方の評価
完璧な評価軸
© Classmethod, Inc
XXX
XXXXXXXXXXXXXXX
© Classmethod, Inc
ご清聴ありがとうございました
Developers.IO 2016 札幌
2016年7月10日
#cmdevio2016
ところで、Xamarinってどうよ・・・
と言う漠線とした疑問への答えが、本セッションの中で少
しでも見つかれば幸いです。
本日は、ありがとうございました。

Developers.io.札幌 xamarinってどうよ