xamarin バッドノウハウ大全

Post on 16-Apr-2017

15.056 Views

Category:

Software

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

ハンズオンレポジトリ

https://github.com/ytabuchi/XamarinHOL

79

Prebuilt サンプル

https://www.xamarin.com/prebuilt

80

Acquaint Sport Xamarin CRM My Shoppe

【宣伝】次回 JXUG は

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

81

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

top related