CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN...

30
CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL

Transcript of CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN...

Page 1: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

CROSS PLATFORM MOBILE DEVELOPMENT WITH

XAMARINMARCIN KUPTEL

Page 2: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes
Page 3: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

NOT IDEAL▸ Double the amount of work▸ More developers required

▸ Changes need to be made in multiple places

Page 4: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

CAN WE DO BETTER?

Page 5: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes
Page 6: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes
Page 7: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

XAMARIN STUDIO

Page 8: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

BUT WHAT ABOUT THE UI?▸ Either use Xamarin Designer▸ Or stick with Interface Builder!

Page 9: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

PROFILING TOOLS

▸ HeapShot - Xamarin's own memory and performance tool▸ Xamarin Profiler

Page 10: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

C#▸ generics

▸ lambda expressions▸ optionals

Page 11: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

C# USESGARBAGE COLLECTION

Page 12: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

HOW DO C# AND OBJECTIVE C WORK TOGETHER?

Page 13: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

GOTCHA NO. 1 UIIMAGE

Page 14: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

THE

DISPOSEPATTERN

Page 15: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

IOSC# ➡ ARM ASSEMBLY

ANDROIDC# ➡ IL ➡ ASSEMBLY AT RUNTIME

Page 16: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

AllIOS FRAMWORKS ARE

AVAILABLE 1

1 http://xamarin.com/platform

Page 17: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

... WITH A FEW DIFFERENCES

▸ Strongly typed arrays instead of NSArray▸ Delegate methods exposed through events and properties

▸ NSString becomes string

Page 18: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

GOTCHA NO. 2UITableViewDelegate

and UITableViewDataSource

are classes

Page 19: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

THIRD PARTY LIBRARIES

▸ NuGet is a package manager built into Xamarin Studio▸ Over 37,000 libraries

▸ Notifies you when a library has been updated▸ You can easily publish your own

Page 20: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

BINDING PROJECTS

Page 21: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

API DEFINITIONnamespace Cocos2D { [BaseType (typeof (NSObject))] interface Camera { [Static, Export ("getZEye")] nfloat ZEye { get; }

[Export ("restore")] void Restore ();

... }}

Page 22: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

SHARING CODE

Page 23: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

SHARED PROJECT

#if __IOS__nsDispatcher.BeginInvokeOnMainThread(NotifyListeners);#elif __ANDROID__Dispatcher.RunOnUiThread(() => NotifyListeners());#endif

Page 24: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

PORTABLE CLASS LIBRARY

Page 25: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

OUR PROJECTS

Page 26: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

SHARING ASSETS

Page 27: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

CONTINUOUS INTEGRATION/Applications/Xamarin\ Studio.app/Contents/MacOS/mdtool -v build “--configuration:Release|iPhone” app/MyAwesomeApp.sln

UNFORTUNATELY IT IS NOT POSSIBLE TO BUILD WITHOUT CODE-SIGNINGsecurity unlock-keychain -pPASSWORD ~/Library/Keychains/login.keychain

Page 28: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

NUNIT FOR UNIT TESTING[TestFixture]public class LoginViewModelTests{ [Test] public void TestThatLoginViewModelCanBeCreated() { Mock<IAccountApi> mockAccount = new Mock<IAccountApi>(); Mock<IDialogService> dialogServiceMock = new Mock<IDialogService>();

...

Assert.IsNotNull(viewModel);}

Page 29: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

THE VERDICT

! Very easy to share code between platforms! Good support from Xamarin

! Not enough iOS open source projects! Xamarin Studio issues

Page 30: CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN MARCIN KUPTEL. NOT IDEAL Double the amount of work More developers required Changes

THANKS!@MARCINKUPTEL