xamarin バッドノウハウ大全
TRANSCRIPT
Xamarin バッドノウハウ大全
2016/9/10 わんくま横浜
田淵義人@エクセルソフト
Twitter: @ytabuchi
facebook: ytabuchi.xlsoft
ちょまど
Twitter: @chomado
facebook: chomado
自己紹介
Xamarin コミュニティエバンジェリスト
2016年4月 Microsoft MVP Visual Studio and Development Technologies 受賞
Build Insider, マイナビニュース
.NET開発テクノロジ入門2016年版(Xamarinの章)
Japan Xamarin User Group 主催
Twitter: @ytabuchi
facebook: ytabuchi.xlsoft
Blog: Xamarin 日本語情報
3
自己紹介( *゚▽゚* っ)З
https://chomado.com
http://aka.ms/chomado/
4
ゴール
Xamarin のバッドノウハウを知ったうえでも Xamarin って楽しそう!という気持ちになってもらう
( *゚▽゚* っ)З
Xamarin 概要
Xamarin
7
C# 6.0
8
using System.Collections.Generic;using System.IO;using System.Linq;using System.Net.Http;using Newtonsoft.Json;
button.Click += async (sender, e) =>{
using (var client = new HttpClient()){using (var reader = new StreamReader(await client.GetStreamAsync("xxx"))){
var json = await reader.ReadToEndAsync();var jsonModel = JsonConvert.DeserializeObject<List<Data>>(json).Where(x => x.Url.Contains("xamarin")).Select(x => x.Title).ToList();
}}
};
2つの開発手法
9
Shared C# App Logic
(PCL)
Shared XAML/C# UI Code
(Xamarin.Forms)
iOS
C# UI
Shared C# App Logic
(PCL)
Android
C# UI
Windows
C# UI
Xamarin.FormsXamarin Nativeロジックのみ共通化
UIはネイティブで個別に作りこむ
Xamarin ネイティブ
10
iOS
C# UI
Shared C# App Logic
(PCL)
Android
C# UI
Windows
C# UI
Xamarin Nativeロジックのみ共通化
UIはネイティブで個別に作りこむ
Xamarin.Android (Visual Studio)
11
Xamarin.iOS (Xamarin Studio)
12
Xamarin ネイティブ
13
最大公約数
14
Xamarin.Forms
Shared C# App Logic
(PCL)
Shared XAML/C# UI Code
(Xamarin.Forms)
Xamarin.Forms
Xamarin.Forms
15
XAML
16
17
MVVM
必要な知識
18
プラットフォーム個別
Xamarin Native
iOS API Objective-C, Swift Xcode
Android API Java Android Studio
Windows API Visual StudioC#
API 言語 統合開発環境
iOS API Objective-C, Swift Xcode
Android API Java Android Studio
Windows API Visual StudioC#
Xamarin.Forms
iOS API
Android API
Windows API
Objective-C, Swift Xcode
Java Android Studio
Visual StudioC#Xamarin.Forms
UI toolkit
昔話
過去発生した色々な問題
20
バッドノウハウ(という名のFAQ集)
Xamarin 開発で覚えておきたいこと
ちょまどさん、こんな感じでいくよ!
ヽ(ヽ *゚▽゚*)ノ わーい!
( *゚▽゚* っ)З ぽっぽー!
22
Xamarin の理解・心がけ編
Xamarin 開発をする前に覚えておきたいこと
Xamarin って C#er であれば誰でも簡単にスマホアプリが作れる魔法のツールなんでしょ?
そんなわけない!iOS/Android/C# の知識が全部必要になる素晴らしいツールです!
( *゚▽゚* っ)З
24
Xamarin の開発をする上で大事なことって何だと思う?
バグにめげない気持ち!自分で何とかしようとする気持ち!
( *゚▽゚* っ)З
25
Xamarin.Forms ってどうなの?
バグにめげない気持ち!OSS になったから困ったら
ソースを見よう!( *゚▽゚* っ)З
26
日本語ドキュメントが少なくて辛いんだけど?
みんなで頑張って増やしていこうね!田淵さん引き続きよろしくです!
( *゚▽゚* っ)З
27
プロジェクト設定・ビルド編
Xamarin 開発をする上で覚えておきたいこと
インストール大変じゃない?
大変です!( *゚▽゚* っ)З
(Xamarin Studio on Mac に関しては簡単)
29
Android のデバッグには何を使えばいいの?
実機!実機!( *゚▽゚* っ)З
30
どのテンプレートで何が出来るのか良く分からん
Cross-Platformがいいよ!( *゚▽゚* っ)З
31
Xamarin.Forms のプロジェクト作るの凄い時間がかかるんだけど?
筋トレしてるといいよ!( *゚▽゚* っ)З
32
これ何?
Xamarin.Forms で作る UWP プロジェクトのバージョンだよ!Windows 10 Anniversary Update
SDK (10.0.14393) は選択しちゃダメだよ!( *゚▽゚* っ)З
33
Xamarin.Forms まだワーニングが出るんだけど?
ビルドすると多分消えるよ!
( *゚▽゚* っ)З
34
Xamarin.Forms のバージョンが古くね?
JXUG のテンプレートを使うといいよ!( *゚▽゚* っ)З
35
Android のサポートライブラリーはバージョンアップすべき?
固定バージョンが必要だからアップデートしちゃダメだよ!
( *゚▽゚* っ)З
36
ターゲットって何?
対応 OS で変わるよ!Profile 7 と 49 がいいよ!
( *゚▽゚* っ)З
37
Profile 変えようとしたら何コレ?
Xamarin.Forms ライブラリを全部削除してから変更するとできるよ!
( *゚▽゚* っ)З
38
Xamarin.Forms の Android プロジェクトのビルドに凄い時間がかかるんだけど?
初回のビルドは絶対止めちゃダメだよ!2回目からは早いよ!筋トレだよ!
( *゚▽゚* っ)З
39
No resource found that matches the given name
Android SDK をインストールしてね!6.0, 5.1, 5.0, 4.4, 4.1, 4.0 が必要だよ!
( *゚▽゚* っ)З
40
Resource.Designer.cs に No resource found ってエラーが鬼のように出た!><
Android サポートライブラリのバージョンが違ったりすると出ることがあるよ!
( *゚▽゚* っ)З
41
Android プロジェクトをビルドするとめっちゃ文字化けするんだけど!
Android SDK を最新にするか最新にしすぎてたら戻すと良いらしいよ!
( *゚▽゚* っ)З
42
Android アプリで配置エラーが出たよ…
エミュレーター起動し終わってる?落としちゃダメだよ!
( *゚▽゚* っ)З
43
ビルドに失敗するようになったらどうすれば良い?Unzipping failed ってなに?
すべてのプロジェクトのbin obj を消すんじゃ…
%LOCALAPPDATA%¥Xamarin も消すんじゃ…( *゚▽゚* っ)З
44
Surface Pro 4 で Visual Studio Emulator for Android に配置できない><
Hyper-V の設定を見直すといいよ!
( *゚▽゚* っ)З
45
デバッグビルドが途中で終わるんだけど…
なぜか SD カードにインストールされることがあるみたいよ!
( *゚▽゚* っ)З
46
Android の Layout.axml が開けないんだけど?
Android SDK をインストールしてね!6.0, 5.1, 5.0, 4.4, 4.1, 4.0 が必要だよ!
( *゚▽゚* っ)З
47
UWP ビルド出来ない…><
プラットフォームを x86 にするかチェックを付けるといいよ!
( *゚▽゚* っ)З
48
Material Design を設定したのにステータスバーが黒いんだけど?
Target を 5.0 以上にするの!( *゚▽゚* っ)З
49
iOS に行こうか…
はい!( *゚▽゚* っ)З
50
Mac Remote Agent がすぐ切れるよ…
Mac 側を有線接続して、ディスプレイをオンのままにするといいよ!(省電力)
( *゚▽゚* っ)З
51
Storyboard が開けないんだけど…
iOS SDK と Xcode と Xamarin が最新になってるか確認してみて!
( *゚▽゚* っ)З
52
iOS Simulator を Mac で確認するの面倒なんだけど?
iOS Simulator for Windows を使うといいよ!今は快適だよ!
( *゚▽゚* っ)З
53
iOS アプリのビルド時間、長くない?
筋トレするといいよ!( *゚▽゚* っ)З
54
開発編
Xamarin 開発をする際に思い出してほしいこと
Intellisense が効かなくなった…
最近大丈夫だね!( *゚▽゚* っ)З
56
InitializeComponent に赤い波線が付く…
最近見ないね!( *゚▽゚* っ)З
57
ここからは JXUG の沼に好んで入っていくアーリーアダプターの皆さんからいただいた実際に開発してて遭遇したバッドノウハウを紹介していくよ!
ぽっぽー!!!( *゚▽゚* っ)З
58
Visual Studio と Xamarin Studio で相互運用すると .csproj がゴリっと書き換わったりすることがあるみたいよ。
へー! ( *゚▽゚* っ)З
59
Xamarin.Forms の Slider は Min を先に指定しないと落ちるみたい…
へー! ( *゚▽゚* っ)З
60
Xamarin.Forms で PushModalAsync 表示をしたときに、Navigation.ModalStack.Count の値がiOSとAndroidで違うんだって。
へー! ( *゚▽゚* っ)З
61
Xamarin.Forms のDevice.BeginInvokeOnMainThread は、Android ではそのまま実行されるけど iOS はポストされてから実行されるので挙動が変わるんだって。
へー! ( *゚▽゚* っ)З
62
Xamarin.Forms の StackLayout は設定がややこしいよ。特に XXXandExpand が闇みたいでレイアウトもバグるんだって。
へー! ( *゚▽゚* っ)З
63
Xamarin.Forms の TapGestureRecognizer の判定範囲が Android 側で広すぎて、スワイプとかぶっておかしくなるらしいよ。
へー! ( *゚▽゚* っ)З
64
Xamarin.Forms の PanGestureRecognizer はiOS と Android でイベントが発火したり発火しなかったりするんだって。
へー! ( *゚▽゚* っ)З
65
Xamarin.Forms で InputTransparent=false にしても iOS と Android で下のコントロールにイベントを透過できないことがあるらしいよ。
へー! ( *゚▽゚* っ)З
66
Xamarin.Forms の Picker も闇らしいよ…
へー! ( *゚▽゚* っ)З
67
Xamarin.Forms の ListView はメモリリークするんだって…
へー! ( *゚▽゚* っ)З
68
Xamarin.Forms の UWP 版 ListView だと仮想化が有効にならないんだって。
へー! ( *゚▽゚* っ)З
69
Android の View は Mono 側で GC してもしばらく Java 側から握られてたりしてメモリから消えるまでに時間が掛かるんだって。メモリリークじゃないらしいよ。
へー! ( *゚▽゚* っ)З
70
iOS、デバッグできる端末と launch failed でデバッグできない端末が未だにあるんだって。
へー! ( *゚▽゚* っ)З
71
Xamarin.Forms ェ…
うん…( *゚▽゚* っ)З
72
多謝@omanukehttps://gist.github.com/omanuke/fc8dfe1e0a80b3ed4faf91259df46326https://twitter.com/omanuke/status/773421753079037952
@qwerty2501https://gist.github.com/qwerty2501/11e5bfd1cc368c19ddf693ffd1afe132
@AyaseSHhttps://twitter.com/AyaseSH/status/773323882098941952
@amay077, @espresso3389, @nuits_jp, @Santea3173, @ticktackmobile
@chomado, @atsushieno
73
参考資料
Windows で Xamarin 開発をしたい方はインストールする前に読んでほしい - Xamarin 日本語情報
Xamarin for Visual Studio スタートアップ トラブルQA集 -nuits.jp blog
74
まとめ
75
#Xamarinはいいぞ
それでも!
C# でモバイルアプリが作れる Xamarin が好き!
Xamarin
77
2つの開発手法
78
Shared C# App Logic
(PCL)
Shared XAML/C# UI Code
(Xamarin.Forms)
iOS
C# UI
Shared C# App Logic
(PCL)
Android
C# UI
Windows
C# UI
Xamarin.FormsXamarin Nativeロジックのみ共通化
UIはネイティブで個別に作りこむ
Prebuilt サンプル
https://www.xamarin.com/prebuilt
80
Acquaint Sport Xamarin CRM My Shoppe
ご清聴ありがとうございます