Share
Embed
The Rise of Xamarin: Mobile Development in C#
MonoTouch and Mono for Android empower C# applications targeting iOS and Android respectively.
David Ortinau
May 17, 2012
Transcript
41 slides
-
David Ortinau @davidortinau http://davidortinau.com 16 yrs web, interactive, mobile. Flash,
iPhone, Android, WP7 BA English, Maryville University Friday, August 24, 12 -
I Don’t Hate JavaScript Or HTML5 Or HTML6 Or HTML7
Or HTML8 Or HTML9 Friday, August 24, 12 -
Let’s Talk About • Cross Platform Holy Grail • What
is Mono? • Who is Xamarin? • Why C#? • The World According to Xamarin Friday, August 24, 12 -
Write Once Run Anywhere • Do you hate users?* •
Most cross-platform solutions benefit developers and customers, but rarely value users and user experience. * kidding, of course you don’t. Users are cuddly. Friday, August 24, 12 -
Either/Or • Concessions are made to afford faster development and
less code to target multiple platforms. • Typically you must learn a new, custom way of coding for the middle framework in order to use it and target multiple platforms. *learning new stuff is not bad. Embrace it. Then decide the best path. Friday, August 24, 12 -
iOS Programming: The Big Nerd Ranch Guide “An aspiring iOS
developer faces three basic hurdles: You must learn the Objective-C language...You must master the big ideas... You must master the frameworks.” Friday, August 24, 12 -
Both/And • How can we achieve broad reach across platforms
while: • reusing as much code as possible • not sacrificing user experience • not sacrificing performance • not sacrificing features Friday, August 24, 12 -
Mono Overview • Run .Net code across multiple platforms •
Project began in 2001 • Novell “held” project for years • Mono “died” when Novell was acquired April 2011 • Xamarin founded May 2011 Friday, August 24, 12 -
Key Parts • open source implementation of Microsoft's .Net Framework
based on the Ecma standards for C# and the Common Language Runtime • Mono's C# compiler is feature complete for C# 1.0, 2.0, 3.0, and 4.0 (Ecma) • The runtime implements the Ecma Common Language Infrastructure (CLI). The runtime provides a Just-in-Time (JIT) compiler, an Ahead- of-Time compiler (AOT), a library loader, the garbage collector, a threading system and interoperability functionality. Friday, August 24, 12 -
Supported Platforms • Linux • Android • Mac OS X
• iOS • BSD • Sun Solaris • Unix • Microsoft Windows • Nintendo Wii • Sony PlayStation 3 • XBox Friday, August 24, 12 -
Xamarin Rising • Miguel de Icaza & Nat Friedman •
20+ Members from the Mono team • Self funded • Selling • MonoTouch for iOS • Mono for Android • Support Contracts • Other projects include MonoGame Friday, August 24, 12 -
XobotOS • Android Ported to C# • Sharpen - code
conversion tool • http://blog.xamarin.com/2012/05/01/android- in-c-sharp/ • https://github.com/xamarin/XobotOS • https://github.com/xamarin/XobotOS/tree/ master/sharpen Friday, August 24, 12 -
Miguel “A project that we started because we thought it
would be fun to do has turned out to yield some serious benefits for our products. It’s important for a startup to stay focused, but sometimes you have to try something crazy to make progress. And who knows, maybe Google will thank us some day.” Friday, August 24, 12 -
Mature Language Features • Generics • LINQ • Events •
Lambda Expressions • Reflection • Garbage Collection • Thread Pooling • Asynchronous Programming Features Friday, August 24, 12 -
Broad Reach • Desktop • Windows • OS X •
Linux • Mobile • iPhone • Android • Windows Phone • Gaming • Unity3D • Wii • PS3 • XBox • Embedded • Web and Server Friday, August 24, 12 -
Tools • Visual Studio • ReSharper • Blend Studio •
MonoDevelop Friday, August 24, 12 -
UI# C## Run)me# Pla/orm# Silverlight# Business#Logic# .NET# WP7# iOS# Mono#
Android# MonoTouch# Mono#for# Android# Friday, August 24, 12 -
Requirements • MonoTouch • Mac OS X • MonoDevelop •
Mono for Android • Mac OS X or Windows • MonoDevelop or Visual Studio 2010 • Windows Phone • Windows • Visual Studio 2010 Friday, August 24, 12 -
Runtime • Mono provides a superset of the Silverlight .Net
profile • Still less than full .Net removing pieces either too bulky or unnecessary on mobile Friday, August 24, 12 -
Compiling • Apple doesn’t allow runtime compilation so MonoTouch provides
Ahead-of-Time compilation • Publish directly to TestFlight • Android allows it, so Mono for Android employs Just-in-Time compilation Friday, August 24, 12 -
Bindings • Follow the conventions of the native platform •
UIViewController • UITableViewController • Create custom Bindings for 3rd party libraries Friday, August 24, 12 -
Memory Management • Obj-C is retain count* • MonoTouch abstracts
this adding Garbage Collection • Most classes expose a Dispose() method *newer iOS provides Automatic Reference Counting (ARC) that makes this less of a burden Friday, August 24, 12 -
Delegates • Obj-C makes heavy use of delegation • C#
provides delegation methods • C# replaces most with events Friday, August 24, 12 -
Code Sharing • View code is platform specific • Business
logic can be shared across all platforms using • Shared Libraries • Linked Files • Other methods • Partial Classes • Conditional Compilation • Default platform symbols provided Friday, August 24, 12 -
Persistence • Isolated Storage • Read/Write from file using XMLSerializer
• Database • Sql Server Compact Edition - WP7 • sqlite - iOS and Android • For WP7 • C#-SQLite - APIs http://code.google.com/p/csharp-sqlite/ • sqlite-net - ORM https://github.com/praeclarum/sqlite-net Friday, August 24, 12 -
Popular Libraries • TinyMessenger http://hg.grumpydev.com/tinyioc/wiki/TinyMessenger • TinyIoC http://hg.grumpydev.com/tinyioc/wiki/Home • RestSharp
http://restsharp.org/ • MonoCross http://code.google.com/p/monocross/ • MvvmCross https://github.com/slodge/MvvmCross • MvvmLight http://www.galasoft.ch/mvvm/ • C#-SQLite http://code.google.com/p/csharp-sqlite/ • sqlite-net https://github.com/praeclarum/sqlite-net Friday, August 24, 12 -
More Links • MWC 2012 App https://github.com/xamarin/mobile-samples/tree/master/MWC • NYC Code
Camp 6 App https://github.com/gshackles/NycCodeCamp6 • Mobile Development in C# http://amzn.com/1449320236 Friday, August 24, 12