SlideShare a Scribd company logo
2015.01.31 MVP Community Camp 札幌会場
Objective-CやJavaとの比較によるXamarinの理解・プラットフォーム固有の機能は如何にコーディ
ングされるのか・・・
この辺で、Xamarin導入による 効果と限界
をしっかり把握してみよう
自己紹介
 識別子 SIN/札幌ワークス
 Twitter @furuya02
 仕事 某社でシステムサポート
 スタッフ CLR/H
 ブログ SIN@SAPPOROWORKSの覚書
 Microsoft MVP for Visual C# (2013/1~)
 フリーソフト BlackJumboDog
Xamarin人気
紅白歌合戦でNHKがアプリ配信
2年連続でフェンリル株式会社製
http://www.fenrir-inc.com/jp/business/app/casestudy_app/nhk_kouhaku.html
はてぶ・Qiitaの投稿件数
国内での人気を検索してみた
2013
@amay077氏
Xamarin Advent Calendar 2013 作成:奥山 裕紳 氏(@amay077)
http://qiita.com/advent-calendar/2013/xamarin
2014
数日で埋まりました
Xamarin Advent Calendar 2014 作成:奥山 裕紳 氏(@amay077)
http://qiita.com/advent-calendar/2014/xamarin
Xamarinとは
Xamarinとは
Create native
Xamarinとは
UI+固有機能は、C#ラッパーで各PFごと記述
Xamarinとは
更新の頻度は異常に早い
Xamarin で Android L Developer Preview と Android Wear をサポート
http://www.xlsoft.com/jp/products/xamarin/android-l-developer-preview.html
Xamarin は iOS 8 に完全対応
http://www.xlsoft.com/jp/products/xamarin/xamarin-ios-8.html
Xamarin.iOS Unified API の 64-bit 対応
http://www.xlsoft.com/jp/products/xamarin/
xamarin-ios-unified-api-with-64-bit-support.html
WatchKit対応(Preview)
http://developer.xamarin.com/guides/ios/watch/installation/
P/Invoke
.NETにおけるネイティブコードを呼び出すしくみ
Win32
.NET
DllImport… System.IO…
XamarinもP/Invoke
P/Invoke の仕組みで iOS/Android の API を C# に公開(AndroidはJNI)
Android API
Java Xamarin.Android
iOS API
Objecttive-C Xamarin.iOS
注:個人的理解
実行
Androidでは、MonoVM、iOSでは、直前コンパイルでARM命令に変換される
Dalvik VM
Javaバイトコード MSIL
Java
Mono VM
Android
Xamarin.Android
iOS
Objectiv-C Xamarin.iOS
EXE,DLL
Monoランタイム
(ARM命令に変換)
ARM命令
注:個人的理解
薄いラッパー
Android編
ボタンの生成を例に比較してみる
Button btn = new Button(this); // ボタンの生成
btn.setText("OK"); // キャプション
btn.setLayoutParams(new LayoutParams(100,80)); // サイズ
layout.addView(btn); // レイアウトへの追加
Java
Android編
ボタンの生成
Button btn = new Button(this);
Button btn = new Button(this);
Java
C#
Android編
キャプション
btn.setText("OK");
btn.Text = "OK";
Java
C#
Android編
サイズ
btn.setLayoutParams(
new LayoutParams(100,80));
btn.LayoutParameters =
new LayoutParams(100,80);
Java
C#
Android編
レイアウトへの追加
layout.addView(btn);
layout.AddView(btn);
Java
C#
Android編
もはや同じと言っても過言ではない
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編
ボタンの生成を例に比較してみる
UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem]; // ボタンの生成
[btn setTitle:@“OK” forState:UIControlStateNormal]; // キャプション
[btn setFrame:CGRectMake(110,210,100,40)]; // サイズ・位置
[self.view addSubview:btn]; // ビューへの追加
Objectiv-C
iOS編
ボタン生成
UIButton *btn =[UIButton
buttonWithType:UIButtonTypeSystem];
UIButton btn =
UIButton.FromType(UIButtonType.System);
Objectiv-C
C#
iOS編
キャプション
[btn setTitle:@“OK”
forState:UIControlStateNormal];
btn.SetTitle("OK",UIControlState.Normal);
Objectiv-C
C#
iOS編
サイズ・位置
[btn setFrame:CGRectMake(110,210,100,40)];
btn.Frame = new CGRect(110,210,100,40);
Objectiv-C
C#
iOS編
ビューへの追加
[self.view addSubview:btn];
View.AddSubview(btn);
Objectiv-C
C#
iOS編
まー同じ?(似てる)といっても問題ない
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
・UINavigationController/UIViewController
・pushViewController スタック管理
・popViewController 画面遷移
Android
・Activity単位
・Intentに発行
・Intent経由でパラメータ渡し
アーキテクチャ
画面遷移
アーキテクチャ
iOSライフサイクル
・localView 画面読み込み
・viewDidLoad ビュー読み込み完了
・viewWillAppear 画面描画前
・viewDidAppear 画面描画後
・viewWillDisappear 閉じる前
・viewDidDisappear 閉じ終わった
アーキテクチャ
Androidライフサイクル
・onCreate 画面作成(初めて)
・onStart 画面表示直前
・onResume ユーザとの対話開始
・onPause 別画面への移行時
・onStop ユーザから見えなくなった
・onRestart 停止後の再開
・onDestroy 画面破棄
Androidの構成
Android Studio で「Blank Activity」を新規作成
①
②
③
Xamarin.Androidの構成
Visual Studioで「Blank App(Android)」を新規作成
①
②
③
①AndroidManifest.xml
最初に起動するActivityの指定、Xamarinでは定義なし
Java
C#
②MainActivity
SetContentView()でレイアウトを指定している
Java
C#
③レイアウト
拡張子は、AndroidStudioではXML、Xamarinではaxml(中身は同じ)
Java
C#
iOSの構成
Xcode で「Single View Application」を新規作成
①
②
③
④
⑤
iOSの構成(Swift)
Xcode で「Single View Application」を新規作成
①②
③
④
⑤
①
②
③
④
⑤
Xamarin.iOSの構成
Visual Studioで「Single View(iPhone)」を新規作成
①Main
UIApplicationMainによる初期化(メインクラス:AppDelegate)
Objecttiv-C
C#
②AppDelegate
アプリケーションの起動や終了や中断などの処理
Objecttiv-C
C#
③Info.plist
ルートビューの指定など
Objecttiv-C
C#
④Storyboard
コントロールの配置など(ビューコントローラのクラス名指定)
Objecttiv-C
C#
⑤ViewController
ビューの表示と管理を担当するオブジェクト
Objecttiv-C
C#
C#メリット
Visual Studioが使える
IDEの学習コストがゼロ(Buisnessライセンスが必要)
.NET BCL
プラットフォーム固有+C#Core
ファイル操作 System.IO
ネットワーク操作 System.NET
データ操作 System.Linq
XML操作 System.XML
非同期操作 System.Threading
varで書ける
バリアントじゃないよ
NagaiName<String,String> n = new NagaiName<String,String>();
var n = new NagaiName<String,String>();
リスナー系がイベントになっている
別途リスナークラスを用意する必要はない
//Java リスナークラスを作成してonClickをオーバーライドする
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 処理
}
});
button.Click += 処理
ラムダ式
規模の小さい処理を最小スコープで記述できる
runOnUiThread(new Runnable() {
@Override
public void run() {
//UI処理
}
}
RunOnUiThread(() => UI処理 );
Linq
好きな人は、無いと辛い
var ans1 = ar.Count();
var and2 = ar.Sum(n => n*2);
var ans3 = ar.Where(n => n != 5).Sum();
Parallel
やっぱり簡単に書けるのが嬉しい
X
foreach (var item in collection) {
Thread.Sleep(1000);
}
Tasks.Parallel.ForEach(collection, item => {
Thread.Sleep(1000);
}
);
async await
簡単に書けるのが、ただただ嬉しい
button.Click += async (s, a) => {
var res = await HeavyAsync(); //時間のかかる処理
button.Text = res.ToString();// UIスレッドで実行される
};
Xamarin.Forms
Xamarin.Formsとは
UI部分の共通ライブラリ
Xamarin.Formsとは
独自ライブラリ(コード+XAML+データバインディング)
<?xml … ?>
<ContentPage … >
<Label Text="{Binding …}"
…
BindingContext="{…}“/>
</ContentPage>
Xamarin.Forms
単一コードで、Android、Windows Phone、iOSで動作できる
var map = new Map( ...)
var pin = new Pin {
Position = position,
Label = "custom pin",
・・・
};
map.Pins.Add(pin);
Content=new StackLayout {
Children = { map }
};
独自のライブラリ
最初から学習する必要がある
ContentPage
NavigationPage
TabbedPage
独自のライブラリ
最初から学習する必要がある
StackLayout
AbsoluteLayout
Grid
独自のライブラリ
最初から学習する必要がある
UIのレンダリングはネイティブで行われる
コントロールによっては見た目が違う
TimePicker
UIのレンダリングはネイティブで行われる
コントロールによっては見た目が違う
Switch
Xamarin.Forms
共通的なコントロールを使用する限りは、それなりに書ける
ListView Image
Label
Xamarin.Forms
一部のコントロールを拡張することで、それなりに書ける
TextView
Button
BoxView
Xamarin.Forms
固有のUIにこだわらないのであれば、すすんで1つに統一(超コストダウン)
Image
Label
Xamarin.Forms
固有のUIにこだわらないのであれば、すすんで1つに統一(超コストダウン)
Image
Label
Xamarin.Forms
固有UIが一部なら、あまり違和なく共存できる
ToolBar
BoxView
Xamarin.Formsの拡張
独自コントロール
BalloonView = Image + BoxView + Label
XAMLで作成してclr-namespaceでインクルードして利用可能(コードビハイドあり)
カスタムレンダラー
コントロールの実装を各PF側で記述する
DependencyService
インターフェースによる委譲
//インターフェース定義
public interface ICMail {
bool Send(string to, string message);
}
//機能の利用
DependencyService.Get<ICMail>().Send("to","message");
//機能の実装
[assembly: Xamarin.Forms.Dependency (typeof(CMail))]
class CMail : ICMail {
public bool Send(string to, string message) {
}
PCL
各PF
Xamarin.Formsの拡張
各PFで記述可能なものすべてがFormsでも利用可能
//インターフェース定義
public interface ICMail {
bool Send(string to, string message);
}
//機能の利用
DependencyService.Get<ICMail>().Send("to","message");
//機能の実装
[assembly: Xamarin.Forms.Dependency (typeof(CMail))]
class CMail : ICMail {
public bool Send(string to, string message) {
}
独自コントロール
カスタムレンダラー
DependencyService
料金
月・年単位
https://store.xamarin.com/
各PFごとにライセンスが必要
INDIE・BUSINESSの違い
Support in-house , headless builds , System.Data.SqlClient
Indie
個人開発者、5名以内の会社・サポートなし(フォーラムのみ)
アプリサイズの制限なし
Xamarin Studio では、ほぼ制限ない開発
Business
法人向けライセンス
Visual Studio での開発
ビジネス向け機能
Email サポート
Xamarin 日本語情報「Xamarin のエディションについて」
http://ytabuchi.hatenablog.com/entry/2015/01/28/170126
MSDN subscribers
https://xamarin.com/msdn
can save 20% on the Business or Enterprise editions
エクセルソフト株式会社
国内代理店
Xamarin製品は、英語製
日本語によるテクニカルサポート
アカデミック プログラム
INDIE無償
http://www.xlsoft.com/jp/products/xamarin/student.html?r=ythb
大学、専門学校、高校などの
教育機関に在籍する学生を対象に
Xamarin INDIE 版を無償提供
Build INSIDER Xamarin逆引きTips
http://www.buildinsider.net/mobile/xamarintips
Xamarin情報
唯一の日本語解説書
「C#によるiOS、Android、Windowsアプリケーション開発入門」
増田 智明 (著), 大西 彰 (著)
Build INSIDER インサイドXamarin
http://www.buildinsider.net/mobile/insidexamarin
Xamarin 日本語情報 田淵義人 氏(@ytabuchi)
http://ytabuchi.hatenablog.com/
Xamarin情報
Qiita キーワード「Xamarin」
http://qiita.com/search?utf8=%E2%9C%93
&sort=rel&q=Xamarin&sort=rel
Xamarin情報
SIN@SAPPOROWORKSの覚書
http://furuya02.hatenablog.com/entry/20140523/1400966058
参考にさせて頂いた資料
インサイドXamarin 榎本 温 氏(@atsushieno)
http://www.buildinsider.net/mobile/insidexamarin
Xamarin逆引きTips 奥山 裕紳 氏(@amay077)
http://www.buildinsider.net/mobile/xamarintips
Xamarin.Formsの概要と カスタムコントロール 増田智明 氏(@moonmile)
http://www.slideshare.net/moonmile/xamarinforms-41882310
Xamarin Advent Calendar 2014 作成:奥山 裕紳 氏(@amay077)
http://qiita.com/advent-calendar/2014/xamarin
iOS,Android,WindowsPhoneを開発者目線で比較
http://www.afp-records.com/android/ios_android_windowsphone_03.html
ご清聴ありがとうございました
札幌ワークス
http://www.sapporoworks.ne.jp/spw

More Related Content

PDF
AWS 비용, 어떻게 사용하고 계신가요? - 비용 최적화를 위한 AWS의 다양한 툴 알아보기 – 허경원, AWS 클라우드 파이낸셜 매니저:...
PDF
Serverless computing with AWS Lambda
PDF
[AWSマイスターシリーズ] AWS Elastic Beanstalk
PDF
20191112 AWS Black Belt Online Seminar AWS Media Services で始めるライブ動画配信
PDF
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
PDF
Security on AWS :: 이경수 솔루션즈아키텍트
PDF
AWS 클라우드 네트워크 서비스 알아보기::서지혜::AWS Summit Seoul 2018
PDF
멀티 클라우드 시대의 정보보호 관리체계
AWS 비용, 어떻게 사용하고 계신가요? - 비용 최적화를 위한 AWS의 다양한 툴 알아보기 – 허경원, AWS 클라우드 파이낸셜 매니저:...
Serverless computing with AWS Lambda
[AWSマイスターシリーズ] AWS Elastic Beanstalk
20191112 AWS Black Belt Online Seminar AWS Media Services で始めるライブ動画配信
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Security on AWS :: 이경수 솔루션즈아키텍트
AWS 클라우드 네트워크 서비스 알아보기::서지혜::AWS Summit Seoul 2018
멀티 클라우드 시대의 정보보호 관리체계

What's hot (8)

PDF
202106 AWS Black Belt Online Seminar 小売現場のデータを素早くビジネス に活用するAWSデータ基盤
PDF
클라우드 네이티브로 가는길 - AWS 컨테이너 서비스 파헤치기 - 최진영 AWS 테크니컬 트레이너 / 배주혁 소프트웨어 엔지니어, 삼성전자...
PDF
AWS Black Belt Techシリーズ Amazon Kinesis
PDF
AWS Lake Formation을 통한 손쉬운 데이터 레이크 구성 및 관리 - 윤석찬 :: AWS Unboxing 온라인 세미나
PPTX
週末趣味のAWS Transit Gatewayでの経路制御
PDF
AWS Black Belt Online Seminar 2017 Amazon ElastiCache
PDF
Making Cloud Native CI_CD Services.pdf
PDF
OASIS - Data Analysis Platform for Multi-tenant Hadoop Cluster
202106 AWS Black Belt Online Seminar 小売現場のデータを素早くビジネス に活用するAWSデータ基盤
클라우드 네이티브로 가는길 - AWS 컨테이너 서비스 파헤치기 - 최진영 AWS 테크니컬 트레이너 / 배주혁 소프트웨어 엔지니어, 삼성전자...
AWS Black Belt Techシリーズ Amazon Kinesis
AWS Lake Formation을 통한 손쉬운 데이터 레이크 구성 및 관리 - 윤석찬 :: AWS Unboxing 온라인 세미나
週末趣味のAWS Transit Gatewayでの経路制御
AWS Black Belt Online Seminar 2017 Amazon ElastiCache
Making Cloud Native CI_CD Services.pdf
OASIS - Data Analysis Platform for Multi-tenant Hadoop Cluster
Ad

Similar to この辺でXamarin導入による 効果と限界をしっかり把握してみよう MVP Community Camp 2015 (20)

PDF
Xamarin 概要 @ 2014/10/18 わんくま同盟 東京勉強会 #92
PDF
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
PDF
Xamarin 20141212 モバイルカフェスペシャル 「C#で作るiOS/Androidのクロスプラットフォームスマホアプリ開発」
PDF
Introduction to Xamarin - JXUG 20171209
PPTX
Developers.io.札幌 xamarinってどうよ
PDF
Xamarin概要+最新情報
PDF
Xamarinをこれから始める皆様へ
PDF
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
PDF
Xamarin によるクロスプラットフォームモバイルアプリ開発(2014.06)
PDF
Xamarin 概要 2014年08月版
PPTX
Xamarin基礎講座 Xamarinハンズオン(2016.09 浜松) #JXUG #jaghama
PDF
Xamarin.Forms のこれまでとこれから
PDF
XamarinStudio勉強会 2014/09/08
PDF
Xamarin 基礎講座 2016年7月版
PDF
20171202 Xamarinの歩き方
PPTX
第1回 Japan Xamarin User Group Conference - Xamarin 概要
PDF
Xamarin によるクロスプラットフォームモバイルアプリ開発
PDF
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
PDF
Xamarin.iOS
PDF
Xamarin 概要 2017/01/15
Xamarin 概要 @ 2014/10/18 わんくま同盟 東京勉強会 #92
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
Xamarin 20141212 モバイルカフェスペシャル 「C#で作るiOS/Androidのクロスプラットフォームスマホアプリ開発」
Introduction to Xamarin - JXUG 20171209
Developers.io.札幌 xamarinってどうよ
Xamarin概要+最新情報
Xamarinをこれから始める皆様へ
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
Xamarin によるクロスプラットフォームモバイルアプリ開発(2014.06)
Xamarin 概要 2014年08月版
Xamarin基礎講座 Xamarinハンズオン(2016.09 浜松) #JXUG #jaghama
Xamarin.Forms のこれまでとこれから
XamarinStudio勉強会 2014/09/08
Xamarin 基礎講座 2016年7月版
20171202 Xamarinの歩き方
第1回 Japan Xamarin User Group Conference - Xamarin 概要
Xamarin によるクロスプラットフォームモバイルアプリ開発
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
Xamarin.iOS
Xamarin 概要 2017/01/15
Ad

More from Shinichi Hirauchi (20)

PPTX
最近、ショッピングセンターとかの駐車場で見かける「自動でナンバープレートを認識して決算するやつ」←これ、作ってみました
PPTX
Developer IO 2024 Odyssey SAMを応用したコンピュータビジョンの話
PPTX
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
PPTX
Amazon Forecast 機械学習でビジネスの予測と成果を簡単かつ正確に予測する
PPTX
Amazon connect について 〜各種AWSのサービスとの連携〜
PPTX
Alexa SDK Alexa Salon
PDF
Developers.io 2017 iPhoneによるAlexa/Lex/Pollyを利用した 音声対応クライアントの作成方法
PPTX
20分でできる!Xamarin.Forms入門
PPTX
ソフト屋が挑戦した電子工作 〜力ずくの10か月〜
PPTX
Developers.IO 2016 F-1 セッション資料
PDF
シルバーウィークにfacebookアプリを作成した
PDF
Xamarin.formsで作成する翻訳機能付きtwitterクライアント
PPTX
簡易電話交換機の作成~廃品利用による低予算プロジェクト~
PDF
BoxViewの美味しい食べ方
PDF
C#で作成するfacebookアプリ mvp community camp
PDF
Facebookスパムデータベース~あなたのお友達に、スパムアカウントが紛れ込んでませんか
PDF
簡易電話交換機の作成~廃品利用による低予算プロジェクト
PDF
Black jumbodogの新機能(webapi)~自動テストにおけるsmtpモックとして
PDF
初めてのFacebookアプリの開発
PDF
Facebookの偽アカウント
最近、ショッピングセンターとかの駐車場で見かける「自動でナンバープレートを認識して決算するやつ」←これ、作ってみました
Developer IO 2024 Odyssey SAMを応用したコンピュータビジョンの話
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
Amazon Forecast 機械学習でビジネスの予測と成果を簡単かつ正確に予測する
Amazon connect について 〜各種AWSのサービスとの連携〜
Alexa SDK Alexa Salon
Developers.io 2017 iPhoneによるAlexa/Lex/Pollyを利用した 音声対応クライアントの作成方法
20分でできる!Xamarin.Forms入門
ソフト屋が挑戦した電子工作 〜力ずくの10か月〜
Developers.IO 2016 F-1 セッション資料
シルバーウィークにfacebookアプリを作成した
Xamarin.formsで作成する翻訳機能付きtwitterクライアント
簡易電話交換機の作成~廃品利用による低予算プロジェクト~
BoxViewの美味しい食べ方
C#で作成するfacebookアプリ mvp community camp
Facebookスパムデータベース~あなたのお友達に、スパムアカウントが紛れ込んでませんか
簡易電話交換機の作成~廃品利用による低予算プロジェクト
Black jumbodogの新機能(webapi)~自動テストにおけるsmtpモックとして
初めてのFacebookアプリの開発
Facebookの偽アカウント

この辺でXamarin導入による 効果と限界をしっかり把握してみよう MVP Community Camp 2015