Upload
shinichiaoyagi
View
2.726
Download
0
Embed Size (px)
Citation preview
【 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 StudioVisual Studio
#devsumi#devsumiC
Xamarin のエディション xamarin.com からダウンロードしてインストール
Visual Studio 2015 には同梱(インストール時にカスタムで選択する必要あり)エディションStarter 無料 各種制限ありIndie 個人 or 従業員 5 名以下BusinessEnterprise 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 HttpClientPortable.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)
AzureiPhone
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 (土)会場未定(品川?)