Xamarin バッドノウハウ大全
2016/9/10 わんくま横浜
田淵義人@エクセルソフト
Twitter: @ytabuchi
facebook: ytabuchi.xlsoft
ちょまど
Twitter: @chomado
facebook: chomado
解説エントリー書きました
Xamarin バッドノウハウの解説
2
自己紹介
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
多謝
@omanuke
https://gist.github.com/omanuke/fc8dfe1e0a80b3ed4faf91259df46326
https://twitter.com/omanuke/status/773421753079037952
@qwerty2501
https://gist.github.com/qwerty2501/11e5bfd1cc368c19ddf693ffd1afe132
@AyaseSH
https://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はネイティブで個別に作りこむ
ハンズオンレポジトリ
https://github.com/ytabuchi/XamarinHOL
79
Prebuilt サンプル
https://www.xamarin.com/prebuilt
80
Acquaint Sport Xamarin CRM My Shoppe
【宣伝】次回 JXUG は
JXUGC #17 お前の Xamarin アプリを見せてみろ!
81
ご清聴ありがとうございます

Xamarin バッドノウハウ大全