Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET...

25
Xamarin One platform to rule them all? Erwin de Groot @ 040 coders

Transcript of Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET...

Page 1: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

XamarinOne platform to rule them all?

Erwin de Groot @ 040 coders

Page 2: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core
Page 3: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

.NET frameworks

.NET

framework

WPF UI

Libraries

.NET

Silverlight

Xamarin.

Mac

.NET Core

Mono

Touch

Xamarin.

iOS

Mono

Android

Xamarin.

Android

SL UI

Libraries

UWP UI

Libraries

iOS UI

Libraries

Android UI

Libraries

MacOS UI

Libraries

Page 4: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

.NET standard

.NET

framework

WPF UI

Libraries

.NET

Silverlight

Xamarin.

Mac.NET Core

Xamarin.

iOS

Xamarin.

Android

SL UI UWP UI iOS UI Android UI MacOS UI

.NET standard interface

Page 5: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

Xamarin Forms

Xamarin

Forms

Xamarin.

Mac.NET Core

Xamarin.

iOS

Xamarin.

Android

UWP

Shared

UI

iOS Android macOS

Mono &

GTK#

Linux

Page 6: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

Xamarin

Page 7: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

Xamarin history

Page 8: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

Xamarin & alternatives

C#, XAML C++, QML C#, UnityScript, Boo Javascript, HTML5, CSS3

Open source MIT license Open source (L)GPL Proprietary Open source Apache

License

- Still maturing - No native controls - Focus on games

- No native controls

- Slow UI

- No native controls

+ Customizable native

controls

+ Mature rich UI

development

+ Great for games/3D + Fast development

Page 9: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

Visual Studio Xamarin Solution

Page 10: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

From WPF to Xamarin.Forms

WPF Xamarin.Forms

Control Templates Rendering classes

WPF names:

UserControl

StackPanel

ScrollViewer

DataContext

Xamarin.Forms names:

ContentView

StackLayout

ScrollView

BindingContext

Extended Binding functionality Basic Binding functionality

ComboBox Picker

ToolTips, Menu, ContextMenu -

Page 11: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

Xam

ari

n

Bin

din

gs

Xam

ari

n.F

orm

s

User Interface rendering

UWP

StackPanel

Button

Android

LinearLayout

Button

iOS

UIStackView

UIButton

macOS

NSStackView

NSButton

StackLayout

Renderer

Button

Renderer

StackLayout

Renderer

Button

Renderer

UI (XAML)

StackLayout

Button

StackLayout

Renderer

Button

Renderer

StackLayout

Renderer

Button

Renderer

Page 12: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

Custom renderers

Page 13: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

Custom renderers

Page 14: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

Xamarin.Forms.DependencyService

Page 15: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

Xamarin.Forms.DependencyService

Page 16: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

Xamarin.Forms.DependencyService

Page 17: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

Xamarin.Forms.DependencyService

Page 18: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

My development setup

Laptop

- Visual Studio Community

- Android emulatorsiPhone SE

Mac mini

- Visual Studio for Mac

- iOS emulators

iPad Air 2

Android phone

(borrowed)

Page 19: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

Encountered issue #1

Deploying app to a device or simulator yields:

“Couldn't connect to logcat, GetProcessId returned: 0”

No idea what causes this, but when you uninstall the app

from the device/simulator and try again, it works.

Page 20: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

Encountered issue #2

Dunno. Try again.

Page 21: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

Encountered issue #3

Latest Xamarin doesn’t support old .net standard anymore.

Increase the ‘minimum supported windows version’ in the

UWP app.

Page 22: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

Encountered issue #4

.NET and Java each have their own garbage collection.

What happens when you process a bunch of large (native)

bitmaps?

Call ‘Dispose()’ on the bitmap when not used anymore, or

use the ‘using’ construct. Listen to the ‘OnTrimMemory’

event and invoke the .NET Garbage Collection yourself.

.NET Java

Page 23: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

Encountered issue #5

Compiler keeps complaining that the iOS app requires a

LaunchScreen, but the LaunchScreen is there!

‘iPad multitask’ is a new option starting from iOS 11 and

also happens to be enabled default. Somehow this causes

the strange ‘LaunchScreen’ error. Simply disable the option.

Page 24: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

Encountered issue #6

Xamarin.Forms 3.3.0 and up: removing a custom control

from the macOS page causes a NullReferenceException.

Issue is known, but not solved yet.

Revert back to Xamarin.Forms 3.2.0

SkiaSharp 1.60.3 and older: when a canvas has size 0x0, an

OutOfMemoryException occurs

Upgrade SkiaSharp to 1.68.0

SkiaSharp 1.68.0 requires Xamarin.Forms 3.3.0

Page 25: Xamarin One platform to rule them all?040coders.nl/slides/2019-03-21-Xamarin.pdf2019/03/21  · .NET frameworks.NET framework WPF UI Libraries.NET Silverlight Xamarin. Mac.NET Core

In conclusion: did Xamarin help?

• Flexibility

• Custom renderers

• DependencyService

• A single UI definition

• Once set-up, quickly add features too all platforms.

• Xamarin.macOS hasn’t matured yet

• Open source so you can fix it yourself

• Xamarin & community are pretty fast picking up issues

• Visual differences between platforms sometimes look awkward

• You really need those custom renderers