xamarin バッドノウハウ大全

82
Xamarin バッドノウハウ大全 2016/9/10 わんくま横浜 田淵義人@エクセルソフト Twitter: @ytabuchi facebook: ytabuchi.xlsoft ちょまど Twitter: @ chomado facebook: chomado

Upload: yoshito-tabuchi

Post on 16-Apr-2017

15.056 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Xamarin バッドノウハウ大全

Xamarin バッドノウハウ大全

2016/9/10 わんくま横浜

田淵義人@エクセルソフト

Twitter: @ytabuchi

facebook: ytabuchi.xlsoft

ちょまど

Twitter: @chomado

facebook: chomado

Page 2: Xamarin バッドノウハウ大全

解説エントリー書きました

Xamarin バッドノウハウの解説

2

Page 3: Xamarin バッドノウハウ大全

自己紹介

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

Page 4: Xamarin バッドノウハウ大全

自己紹介( *゚▽゚* っ)З

https://chomado.com

http://aka.ms/chomado/

4

Page 5: Xamarin バッドノウハウ大全

ゴール

Xamarin のバッドノウハウを知ったうえでも Xamarin って楽しそう!という気持ちになってもらう

( *゚▽゚* っ)З

Page 6: Xamarin バッドノウハウ大全

Xamarin 概要

Page 7: Xamarin バッドノウハウ大全

Xamarin

7

Page 8: Xamarin バッドノウハウ大全

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();

}}

};

Page 9: Xamarin バッドノウハウ大全

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はネイティブで個別に作りこむ

Page 10: Xamarin バッドノウハウ大全

Xamarin ネイティブ

10

iOS

C# UI

Shared C# App Logic

(PCL)

Android

C# UI

Windows

C# UI

Xamarin Nativeロジックのみ共通化

UIはネイティブで個別に作りこむ

Page 11: Xamarin バッドノウハウ大全

Xamarin.Android (Visual Studio)

11

Page 12: Xamarin バッドノウハウ大全

Xamarin.iOS (Xamarin Studio)

12

Page 13: Xamarin バッドノウハウ大全

Xamarin ネイティブ

13

Page 14: Xamarin バッドノウハウ大全

最大公約数

14

Xamarin.Forms

Shared C# App Logic

(PCL)

Shared XAML/C# UI Code

(Xamarin.Forms)

Xamarin.Forms

Page 15: Xamarin バッドノウハウ大全

Xamarin.Forms

15

Page 16: Xamarin バッドノウハウ大全

XAML

16

Page 17: Xamarin バッドノウハウ大全

17

MVVM

Page 18: Xamarin バッドノウハウ大全

必要な知識

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

Page 19: Xamarin バッドノウハウ大全

昔話

Page 20: Xamarin バッドノウハウ大全

過去発生した色々な問題

20

Page 21: Xamarin バッドノウハウ大全

バッドノウハウ(という名のFAQ集)

Xamarin 開発で覚えておきたいこと

Page 22: Xamarin バッドノウハウ大全

ちょまどさん、こんな感じでいくよ!

ヽ(ヽ *゚▽゚*)ノ わーい!

( *゚▽゚* っ)З ぽっぽー!

22

Page 23: Xamarin バッドノウハウ大全

Xamarin の理解・心がけ編

Xamarin 開発をする前に覚えておきたいこと

Page 24: Xamarin バッドノウハウ大全

Xamarin って C#er であれば誰でも簡単にスマホアプリが作れる魔法のツールなんでしょ?

そんなわけない!iOS/Android/C# の知識が全部必要になる素晴らしいツールです!

( *゚▽゚* っ)З

24

Page 25: Xamarin バッドノウハウ大全

Xamarin の開発をする上で大事なことって何だと思う?

バグにめげない気持ち!自分で何とかしようとする気持ち!

( *゚▽゚* っ)З

25

Page 26: Xamarin バッドノウハウ大全

Xamarin.Forms ってどうなの?

バグにめげない気持ち!OSS になったから困ったら

ソースを見よう!( *゚▽゚* っ)З

26

Page 27: Xamarin バッドノウハウ大全

日本語ドキュメントが少なくて辛いんだけど?

みんなで頑張って増やしていこうね!田淵さん引き続きよろしくです!

( *゚▽゚* っ)З

27

Page 28: Xamarin バッドノウハウ大全

プロジェクト設定・ビルド編

Xamarin 開発をする上で覚えておきたいこと

Page 29: Xamarin バッドノウハウ大全

インストール大変じゃない?

大変です!( *゚▽゚* っ)З

(Xamarin Studio on Mac に関しては簡単)

29

Page 30: Xamarin バッドノウハウ大全

Android のデバッグには何を使えばいいの?

実機!実機!( *゚▽゚* っ)З

30

Page 31: Xamarin バッドノウハウ大全

どのテンプレートで何が出来るのか良く分からん

Cross-Platformがいいよ!( *゚▽゚* っ)З

31

Page 32: Xamarin バッドノウハウ大全

Xamarin.Forms のプロジェクト作るの凄い時間がかかるんだけど?

筋トレしてるといいよ!( *゚▽゚* っ)З

32

Page 33: Xamarin バッドノウハウ大全

これ何?

Xamarin.Forms で作る UWP プロジェクトのバージョンだよ!Windows 10 Anniversary Update

SDK (10.0.14393) は選択しちゃダメだよ!( *゚▽゚* っ)З

33

Page 34: Xamarin バッドノウハウ大全

Xamarin.Forms まだワーニングが出るんだけど?

ビルドすると多分消えるよ!

( *゚▽゚* っ)З

34

Page 35: Xamarin バッドノウハウ大全

Xamarin.Forms のバージョンが古くね?

JXUG のテンプレートを使うといいよ!( *゚▽゚* っ)З

35

Page 36: Xamarin バッドノウハウ大全

Android のサポートライブラリーはバージョンアップすべき?

固定バージョンが必要だからアップデートしちゃダメだよ!

( *゚▽゚* っ)З

36

Page 37: Xamarin バッドノウハウ大全

ターゲットって何?

対応 OS で変わるよ!Profile 7 と 49 がいいよ!

( *゚▽゚* っ)З

37

Page 38: Xamarin バッドノウハウ大全

Profile 変えようとしたら何コレ?

Xamarin.Forms ライブラリを全部削除してから変更するとできるよ!

( *゚▽゚* っ)З

38

Page 39: Xamarin バッドノウハウ大全

Xamarin.Forms の Android プロジェクトのビルドに凄い時間がかかるんだけど?

初回のビルドは絶対止めちゃダメだよ!2回目からは早いよ!筋トレだよ!

( *゚▽゚* っ)З

39

Page 40: Xamarin バッドノウハウ大全

No resource found that matches the given name

Android SDK をインストールしてね!6.0, 5.1, 5.0, 4.4, 4.1, 4.0 が必要だよ!

( *゚▽゚* っ)З

40

Page 41: Xamarin バッドノウハウ大全

Resource.Designer.cs に No resource found ってエラーが鬼のように出た!><

Android サポートライブラリのバージョンが違ったりすると出ることがあるよ!

( *゚▽゚* っ)З

41

Page 42: Xamarin バッドノウハウ大全

Android プロジェクトをビルドするとめっちゃ文字化けするんだけど!

Android SDK を最新にするか最新にしすぎてたら戻すと良いらしいよ!

( *゚▽゚* っ)З

42

Page 43: Xamarin バッドノウハウ大全

Android アプリで配置エラーが出たよ…

エミュレーター起動し終わってる?落としちゃダメだよ!

( *゚▽゚* っ)З

43

Page 44: Xamarin バッドノウハウ大全

ビルドに失敗するようになったらどうすれば良い?Unzipping failed ってなに?

すべてのプロジェクトのbin obj を消すんじゃ…

%LOCALAPPDATA%¥Xamarin も消すんじゃ…( *゚▽゚* っ)З

44

Page 45: Xamarin バッドノウハウ大全

Surface Pro 4 で Visual Studio Emulator for Android に配置できない><

Hyper-V の設定を見直すといいよ!

( *゚▽゚* っ)З

45

Page 46: Xamarin バッドノウハウ大全

デバッグビルドが途中で終わるんだけど…

なぜか SD カードにインストールされることがあるみたいよ!

( *゚▽゚* っ)З

46

Page 47: Xamarin バッドノウハウ大全

Android の Layout.axml が開けないんだけど?

Android SDK をインストールしてね!6.0, 5.1, 5.0, 4.4, 4.1, 4.0 が必要だよ!

( *゚▽゚* っ)З

47

Page 48: Xamarin バッドノウハウ大全

UWP ビルド出来ない…><

プラットフォームを x86 にするかチェックを付けるといいよ!

( *゚▽゚* っ)З

48

Page 49: Xamarin バッドノウハウ大全

Material Design を設定したのにステータスバーが黒いんだけど?

Target を 5.0 以上にするの!( *゚▽゚* っ)З

49

Page 50: Xamarin バッドノウハウ大全

iOS に行こうか…

はい!( *゚▽゚* っ)З

50

Page 51: Xamarin バッドノウハウ大全

Mac Remote Agent がすぐ切れるよ…

Mac 側を有線接続して、ディスプレイをオンのままにするといいよ!(省電力)

( *゚▽゚* っ)З

51

Page 52: Xamarin バッドノウハウ大全

Storyboard が開けないんだけど…

iOS SDK と Xcode と Xamarin が最新になってるか確認してみて!

( *゚▽゚* っ)З

52

Page 53: Xamarin バッドノウハウ大全

iOS Simulator を Mac で確認するの面倒なんだけど?

iOS Simulator for Windows を使うといいよ!今は快適だよ!

( *゚▽゚* っ)З

53

Page 54: Xamarin バッドノウハウ大全

iOS アプリのビルド時間、長くない?

筋トレするといいよ!( *゚▽゚* っ)З

54

Page 55: Xamarin バッドノウハウ大全

開発編

Xamarin 開発をする際に思い出してほしいこと

Page 56: Xamarin バッドノウハウ大全

Intellisense が効かなくなった…

最近大丈夫だね!( *゚▽゚* っ)З

56

Page 57: Xamarin バッドノウハウ大全

InitializeComponent に赤い波線が付く…

最近見ないね!( *゚▽゚* っ)З

57

Page 58: Xamarin バッドノウハウ大全

ここからは JXUG の沼に好んで入っていくアーリーアダプターの皆さんからいただいた実際に開発してて遭遇したバッドノウハウを紹介していくよ!

ぽっぽー!!!( *゚▽゚* っ)З

58

Page 59: Xamarin バッドノウハウ大全

Visual Studio と Xamarin Studio で相互運用すると .csproj がゴリっと書き換わったりすることがあるみたいよ。

へー! ( *゚▽゚* っ)З

59

Page 60: Xamarin バッドノウハウ大全

Xamarin.Forms の Slider は Min を先に指定しないと落ちるみたい…

へー! ( *゚▽゚* っ)З

60

Page 61: Xamarin バッドノウハウ大全

Xamarin.Forms で PushModalAsync 表示をしたときに、Navigation.ModalStack.Count の値がiOSとAndroidで違うんだって。

へー! ( *゚▽゚* っ)З

61

Page 62: Xamarin バッドノウハウ大全

Xamarin.Forms のDevice.BeginInvokeOnMainThread は、Android ではそのまま実行されるけど iOS はポストされてから実行されるので挙動が変わるんだって。

へー! ( *゚▽゚* っ)З

62

Page 63: Xamarin バッドノウハウ大全

Xamarin.Forms の StackLayout は設定がややこしいよ。特に XXXandExpand が闇みたいでレイアウトもバグるんだって。

へー! ( *゚▽゚* っ)З

63

Page 64: Xamarin バッドノウハウ大全

Xamarin.Forms の TapGestureRecognizer の判定範囲が Android 側で広すぎて、スワイプとかぶっておかしくなるらしいよ。

へー! ( *゚▽゚* っ)З

64

Page 65: Xamarin バッドノウハウ大全

Xamarin.Forms の PanGestureRecognizer はiOS と Android でイベントが発火したり発火しなかったりするんだって。

へー! ( *゚▽゚* っ)З

65

Page 66: Xamarin バッドノウハウ大全

Xamarin.Forms で InputTransparent=false にしても iOS と Android で下のコントロールにイベントを透過できないことがあるらしいよ。

へー! ( *゚▽゚* っ)З

66

Page 67: Xamarin バッドノウハウ大全

Xamarin.Forms の Picker も闇らしいよ…

へー! ( *゚▽゚* っ)З

67

Page 68: Xamarin バッドノウハウ大全

Xamarin.Forms の ListView はメモリリークするんだって…

へー! ( *゚▽゚* っ)З

68

Page 69: Xamarin バッドノウハウ大全

Xamarin.Forms の UWP 版 ListView だと仮想化が有効にならないんだって。

へー! ( *゚▽゚* っ)З

69

Page 70: Xamarin バッドノウハウ大全

Android の View は Mono 側で GC してもしばらく Java 側から握られてたりしてメモリから消えるまでに時間が掛かるんだって。メモリリークじゃないらしいよ。

へー! ( *゚▽゚* っ)З

70

Page 71: Xamarin バッドノウハウ大全

iOS、デバッグできる端末と launch failed でデバッグできない端末が未だにあるんだって。

へー! ( *゚▽゚* っ)З

71

Page 72: Xamarin バッドノウハウ大全

Xamarin.Forms ェ…

うん…( *゚▽゚* っ)З

72

Page 73: Xamarin バッドノウハウ大全

多謝@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

Page 74: Xamarin バッドノウハウ大全

参考資料

Windows で Xamarin 開発をしたい方はインストールする前に読んでほしい - Xamarin 日本語情報

Xamarin for Visual Studio スタートアップ トラブルQA集 -nuits.jp blog

74

Page 75: Xamarin バッドノウハウ大全

まとめ

75

Page 76: Xamarin バッドノウハウ大全

#Xamarinはいいぞ

それでも!

C# でモバイルアプリが作れる Xamarin が好き!

Page 77: Xamarin バッドノウハウ大全

Xamarin

77

Page 78: Xamarin バッドノウハウ大全

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はネイティブで個別に作りこむ

Page 79: Xamarin バッドノウハウ大全

ハンズオンレポジトリ

https://github.com/ytabuchi/XamarinHOL

79

Page 80: Xamarin バッドノウハウ大全

Prebuilt サンプル

https://www.xamarin.com/prebuilt

80

Acquaint Sport Xamarin CRM My Shoppe

Page 81: Xamarin バッドノウハウ大全

【宣伝】次回 JXUG は

JXUGC #17 お前の Xamarin アプリを見せてみろ!

81

Page 82: Xamarin バッドノウハウ大全

ご清聴ありがとうございます