CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN...
Transcript of CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN · CROSS PLATFORM MOBILE DEVELOPMENT WITH XAMARIN...
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
... 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