狠狠撸

狠狠撸Share a Scribd company logo
【18-C-5】
2016/02/18
青柳臣一 @ShinichiAoyagi
C# で iOS/Androidアプリ開発
- Visual Studio 2015 + Xamarin + MVVMCross -
ハッシュタグ: #devsumiC
#devsumi
#devsumiC
自己紹介
? 青柳臣一
? @ShinichiAoyagi
? 株式会社ディーバ(大阪市中央区)
? 代表取締役?デベロッパー
? オリジナルソフトウエア開発、受託開発
? WPF、Windows Forms、 ASP.NET Web Forms/MVC/Web API
? iOS(Objective-C)、Android(Java)、Windows Phone
? Xamarin
? その他(HTML5、JavaScript、PHP…)
2015年12月発売
秀和システム
ISBN: 978-4-7980-4495-8
#devsumi
#devsumiC
Ask the Speaker
? セッション終了後、ご質問にお応えします
ちょっとしたことでも疑問点?不明点がありましたら
ぜひお越しください
? 場所
? 2Fラウンジ (この部屋の隣です)
2Fラウンジに
JXUG (Japan Xamarin User Group)
のブースもあります!
#devsumi
#devsumiC
Xamarinってご存知?
? Xamarin(ザマリン)社の提供する商用開発環境
? iOS、Android のアプリを C# で開発できる(あとMacも)
? 開発環境
Windows Mac
Xamarin Studio Xamarin Studio
Visual Studio
#devsumi
#devsumiC
Xamarinのエディション
? xamarin.com からダウンロードしてインストール
? Visual Studio 2015 には同梱
(インストール時にカスタムで選択する必要あり)
エディション
Starter 無料 各種制限あり
Indie 個人 or 従業員5名以下
Business
Enterprise Business + 有線サポートやhotfix
#devsumi
#devsumiC
Macが必要です!!
? WindowsでiOSアプリ開発
? Xamarin Studio、Visual Studio
? ビルドや実行にはMacが必要!
? ネットワーク経由でMacにアクセスする仕組み
? Macを横に置く
? Windows on 仮想化ソフト on Mac
#devsumi
#devsumiC
Xamarinプロジェクトの構成
? 共通部とプラットフォーム依存部
? PCLは限定された.NET
App1 共通部
ポータブルクラスライブラリ(Portable Class Library)
App1.Droid Android固有部分(ビューなど)
App1.iOS iOS固有部分(ビューなど)
App1.WinPhone Windows Phone固有部分(ビューなど)
#devsumi
#devsumiC
PCLへ機能追加、プラグイン
? NuGetなどにいろいろあり
Microsoft.Net.Http HttpClient
Portable.BouncyCastle 暗号化?復号化
Zlib.Portable 圧縮?解凍
PCLStorage ストレージアクセス
Xam.Plugins.Settings アプリケーション設定
その他いろいろ
#devsumi
#devsumiC
Xamarinの特徴
? とても薄いラッパー
? OSを抽象化しているわけではない
? ほぼネイティブ
? プログラミング言語が変わっただけ
? Objective-C/Swift や Java → C#
? なので iOS や Android の知識は必要
#devsumi
#devsumiC
薄いラッパー(というかラッパーなんてない)
? 加速度センサー(iOS)
? 加速度センサー(Android)
Objective-C Xamarin(C#)
CMMotionManagerクラス CMMotionManagerクラス
startDeviceMotionUpdatesToQueue()メソッド
startDeviceMotionUpdatesUsingReferenceFrame()メソッ
ド
StartDeviceMotionUpdates()メソッド
Java Xamarin(C#)
SensorManagerクラス SensorManagerクラス
registerListener()メソッド RegisterListener()メソッド
#devsumi
#devsumiC
Xamarinでアプリ開発
? iPhoneアプリとAndroidアプリ
? (残念ながらWindows Phoneは対象外)
? サーバーにデータを蓄積
? APIサーバー
? 運用チームが使用するツール
? Webベースのシステム + Windowsアプリ
#devsumi
#devsumiC
みんなC#
SQL Database
Redis Cache
BLOB Storage
Web App (API)
Web App (Web)
Azure
iPhone
Android
PC(ブラウザ)
運用ツール
Xamarin
(C#)
Xamarin
(C#)
ASP.NET Web API
(C#)
ASP.NET MVC
(C#)
WPF
(C#)
#devsumi
#devsumiC
Xamarinを使ったわけ
? Objective-C(iOS)やJava(Android)での開発もやってる
? けどC#やVBが得意(好き)なメンバーたち
? サーバーやツール類は?
? Azure?AWS?
? ASP.NET?Java?Node.js?
? Winアプリ?
#devsumi
#devsumiC
MVVMCross
? MVVMをサポートするライブラリ
? https://github.com/MvvmCross/MvvmCross
? Xamarin専用ではない
? もちろん必須というわけでもない
? MVVM以外にも便利な機能あり
#devsumi
#devsumiC
MVVMCrossの導入
? NuGetでインストール
? MVVMCross.HotTuna.StarterPack
? ちょっと修正
? App1.Core → App1
? ToDoに書かれてることをやる
(一部間違ってるところもあるので注意)
#devsumi
#devsumiC
DataBinding.ViewModel
? ビューモデル
? MvxViewModelを継承する
? XAMLと同様INotifyPropertyChangedで変更通知する仕組み
private string hello = "Hello MvvmCross";
public string Hello
{
get { return this.hello; }
set { SetProperty(ref hello, value); }
}
public IMvxCommand ClickCommand
{
get { return new MvxCommand(() => { this.Hello = "Click!"; }); }
}
#devsumi
#devsumiC
DataBinding.iOS
? コードで書く
? using MvvmCross.Binding.BindingContext;
? インテリセンスのおかげで悪くはない
? Set.Bind(control).For(c => c.Text).To(vm => vm.Hello).WithConversion(…);
var set = this.CreateBindingSet<FirstView,
App1.ViewModels.FirstViewModel>();
set.Bind(label).To(vm => vm.Hello);
set.Bind(textField).To(vm => vm.Hello);
set.Bind(button).To(vm => vm.ClickCommand);
set.Apply();
#devsumi
#devsumiC
DataBinding.Droid
? axml に書く
<EditText
~略~
local:MvxBind="Text Hello" />
<TextView
~略~
local:MvxBind="Text Hello" />
<Button
~略~
local:MvxBind="Click ClickCommand"/>
#devsumi
#devsumiC
MVVMCross.Plugins
? コードでよく使うのにプラットフォームで違うものたち
カラー
ブラウザー起動
メール起動
ファイルアクセス
Sqlite
その他いろいろ
http://mvvmcross.com/docs のPLUGINSの項
Mvx.Resolve<IMvxWebBrowserTask>().ShowWebPage("http://yahoo.co.jp/");
#devsumi
#devsumiC
MVVMCross.Plugin.Color
? ViewModel
? MvxColor を使う
? View
? データバインディング + ValueConverter
? iOS: set.Bind(label)
.For(c => c.TextColor).To(vm => vm.LabelColor)
.WithConversion(new MvxNativeColorValueConverter());
? Android: local:MvxBind="Text Hello; TextColor NativeColor(LabelColor)“
? XAML: Color="{Binding CurrentColor, Converter={StaticResource NativeColor}}"
#devsumi
#devsumiC
Xamarin.Forms
? ビューも共通化できる
? XAMLっぽい
? それに慣れてる人には扱いやすい(かも)
? DependencyService
? 共通部からプラットフォーム依存の機能を呼ぶ
? https://developer.xamarin.com/guides/xamarin-forms/dependency-service/
? デザイナーがない!
? そろそろ?
#devsumi
#devsumiC
Xamarinを使った感想
? ViewModelとModelは共通化できた
? データ処理エンジンはPCLにして共通化
? 同じDLLがAzure、スマホ、Windowsで動いている
? C#好き的には捗る
? Objective-C/SwiftやJavaでの開発になれているんであればわざわざC#をマス
ターするってのはどうなんだろう
? Xamarin.Formsはプロトタイプ開発時に便利だった
#devsumi
#devsumiC
Xamarin社のサービス
? Xamarin Insights
? Azure Application Insightsみたいなもの(だと思う)
今はGoogleアナリティクスを使っている
(ちなみに、Azure上のWeb AppはNew Relic)
? Xamarin Test Cloud
? いろいろなデバイスでのテスト
#devsumi
#devsumiC
ご清聴ありがとうございました。
JXUGC #11 Xamarin ハンズオン大会
http://jxug.connpass.com/event/27329/
2016/03/26(土)
会場未定(品川?)

More Related Content

【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -