46
Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Embed Size (px)

Citation preview

Page 1: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Building Windows phone, iOS and Android apps with C#

Jaime Rodriguez

Principal Evangelist, Microsoft

Page 2: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

About me Why this talk….

90s 2000

2005

2008-Today

Primitives

Productivity

UX Mobile

Disclaimer

Page 3: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

About me Why this talk….

90s 2000

2005

2008-Today

Primitives

Productivity

UX Mobile

Disclaimer

I do not work for Xamarin

Opinions are my own, not those of my day-job employer

This space evolves very fast

Page 4: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Mobile Explosion

Consumers are already mobile-first

Business users are increasingly demanding mobile scenarios

Page 5: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

How? #1 – Web

Build a MobileWebsite

Page 6: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

How? #2 – Hybrid Web

Put a Web App In the Store

Native App

MobileWebsite

Page 7: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

How? #3 – Cloned Native

Build App Multiple Times

Page 8: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

How? #4 – Shared Native

Shared UI Code

Build Nativelyand Share Code

Page 9: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Why Native?

Xamarin apps look and feel native because they are native

Native User Interfaces Native API Access Native Performance

Page 10: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Start with C# and BCL

Page 11: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

… add Windows APIs

100% coverage

Page 12: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

… or iOS APIs

100% coverage

Page 13: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

… or Android APIs

100% coverage

Page 14: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

demoXamarin Development with Visual Studio

Page 15: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

@implementation MSViewController- (void)viewDidLoad{ [super viewDidLoad];}

- (IBAction)OnButtonDown:(id)sender { UIAlertView* view = [[UIAlertView alloc]init]; [view setTitle:@"Hello World"]; [view setMessage: @"How are you?”]; [view addButtonWithTitle:@"OK"]; [view show];}@end

public partial class iOSAppViewController : UIViewController

{ public iOSAppViewController (IntPtr handle) :

base (handle){ }

public override void ViewDidLoad (){base.ViewDidLoad ();

}

partial void OnButtonDown (UIButton sender) {

UIAlertView view = new UIAlertView();

view.Title = "Hello World" ; view.Message = "How are you? " ; view.AddButton ("OK"); view.Show();

}

}

iOS

Page 16: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

public class MyActivity extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

Button myBtn = (Button) this.findViewById( R.id.clickMe);

myBtn.setOnClickListener( new View.OnClickListener() {

@Override

public void onClick(View view) {

AlertDialog.Builder builder = new AlertDialog.Builder(MyActivity.this) ;

builder.setTitle( "Hello World")

.setMessage("How are you?")

.setPositiveButton( "OK", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialogInterface, int i) {

dialogInterface.dismiss();

}}) .show();

}});}

}

[Activity (Label = "AndroidApp", MainLauncher = true, Icon = "@drawable/icon")] public class MainActivity : Activity { protected override void OnCreate (Bundle bundle) {

base.OnCreate (bundle); SetContentView (Resource.Layout.Main); Button button = FindViewById<Button>

(Resource.Id.me);

button.Click += delegate { AlertDialog.Builder builder = new

AlertDialog.Builder (this ); AlertDialog dialog = null ; builder.SetTitle ( "Hello World")

.SetMessage ( "How are you")

.SetPositiveButton( "OK" , delegate {

dialog.Dismiss(); } ); dialog = builder.Show ();

} ;

}}

Android

Page 17: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Anything you can do in Objective-C or Java can be done in C# with Xamarin using Visual Studio

Page 18: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Native Performance

Xamarin.iOS does full Ahead Of Time (AOT) compilation to produce an ARM binary for Apple’s App Store.

Xamarin.Android takes advantage of Just In Time (JIT) compilation on the Android device.

Page 19: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

So far…

Using C# BCL on iOS, Android and Windows Phone apps

C# Bindings to iOS/Android Great tooling

Editors Debugging Extensibility

Potentially cumbersome code sharing as you write platform specific code ?

Page 20: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Sharing v1Really?

Page 21: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Linked Files

Compiler Directives

Page 22: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Code sharing v3

Page 23: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Share Code: Portable Class Libraries

1 AssemblyMultiple PlatformsIncluding:

Xamarin.iOSXamarin.Android

Page 24: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

NuGet

Page 25: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Shared Projects

Page 26: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

UI: Xamarin + Xamarin.FormsWith Xamarin.Forms:

more code-sharing, native controlsTraditional Xamarin approach

Shared UI Code

Page 27: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

40+ Pages, Layouts, and Controls

Build from code behind or XAML

Two-way Data Binding

Navigation

Animation API

Dependency Service

Messaging Center

UI: Xamarin.Forms

Shared UI Code

Page 28: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Layouts

Stack Absolute Relative Grid ContentView

ScrollView Frame

Page 29: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

ControlsActivityIndicato

rBoxView Button DatePicker Editor

Entry Image Label ListView Map

OpenGLView Picker ProgressBar SearchBar Slider

Stepper TableView TimePicker WebView EntryCell

ImageCell SwitchCell TextCell ViewCell

Page 30: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Xamarin Forms

Mark-up (XAML 2009 spec)

Data binding & Data Templates

Markup Extensions

Resources Dictionaries

Page 31: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Xamarin Forms Platform Features

Page.DisplayAlert

UI Thread marshalling

Timers

Xamarin.Forms.Maps

Platform code via OnPlatform<T> and DependencyService.Get<T>

Page 32: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

demoHacking away with Xamarin and Visual Studio

Page 33: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Tips & Tricks Personal Observations & Lessons learned

Page 34: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Ramp-up & Mastery

To be successful using C# on iOS, Android, and Windows Phone, you still have to know how to code for these platforms

Page 35: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

How I learned native…

Page 36: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

How I learned Xamarin…

Page 37: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Sharing code… what should you use?

a) PCL

b) Shared Projects

c) partial classes

d) C# extensions

e) All of the above

Page 38: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

UI Patterns & Tips

Separate your concernsDeclarative XAML MVVM is not required

Use OnPlatform<T> for platform specific code

Use ContentPage + layout panels for dynamic resolution

Page 39: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Connect to the cloud: Microsoft Azure

http://azure.microsoft.com/en-us/documentation/services/mobile-services/

Page 40: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Memory & Garbage Collection

iOSUses AOT (Ahead of Time) compiler Two GCs: default (Boehm) or Sgen

AndroidUses Sgen GC

Windows Phone Uses .NET GC,

http://developer.xamarin.com/guides/cross-platform/application_fundamentals/memory_perf_best_practices

/http://msdn.microsoft.com/en-us/library/ms973837.aspx

Page 41: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Performance

Is usually not a problem

Use native tools to measure iOS: Instruments Android: Device Monitor’s Allocation ManagerWindows Phone: Visual Studio, Windows Phone Power tools,

Graphics Diagnostics

Page 42: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

For gamers

Page 43: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Closing: Mobile app development with C#Familiar

Productive

Highly reusable

Empowering

Built on a solid and extensible foundation

Page 44: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

MSDN Offershttp://xamarin.com/MSDN

Page 45: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Want to win a free Xamarin license?

1. Download free version of Xamarin Studio …

2. Create a small Hello World Project on at least two of the three platforms: Windows Phone, Android, iOS.

3. Tweet a link to your project to @jaimerodriguez before October 10th at noon PST

4. One random submission will be selected….and a coupon for free license will be emailed

Page 46: Building Windows phone, iOS and Android apps with C# Jaime Rodriguez Principal Evangelist, Microsoft

Gracias!!!

Aqui estoy los tres dias!

@jaimerodriguez [email protected]