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

Preview:

Citation preview

CROSS PLATFORM MOBILE DEVELOPMENT WITH

XAMARINMARCIN KUPTEL

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

▸ Changes need to be made in multiple places

CAN WE DO BETTER?

XAMARIN STUDIO

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

PROFILING TOOLS

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

C#▸ generics

▸ lambda expressions▸ optionals

C# USESGARBAGE COLLECTION

HOW DO C# AND OBJECTIVE C WORK TOGETHER?

GOTCHA NO. 1 UIIMAGE

THE

DISPOSEPATTERN

IOSC# ➡ ARM ASSEMBLY

ANDROIDC# ➡ IL ➡ ASSEMBLY AT RUNTIME

AllIOS FRAMWORKS ARE

AVAILABLE 1

1 http://xamarin.com/platform

... WITH A FEW DIFFERENCES

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

▸ NSString becomes string

GOTCHA NO. 2UITableViewDelegate

and UITableViewDataSource

are classes

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

BINDING PROJECTS

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

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

... }}

SHARING CODE

SHARED PROJECT

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

PORTABLE CLASS LIBRARY

OUR PROJECTS

SHARING ASSETS

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

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

THE VERDICT

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

! Not enough iOS open source projects! Xamarin Studio issues

THANKS!@MARCINKUPTEL

Recommended