1 / 46

Building Windows phone, iOS and Android apps with C#

Building Windows phone, iOS and Android apps with C#. Jaime Rodriguez Principal Evangelist, Microsoft. About me Why this talk…. 2000. 2005. 90s. 2008-Today. Primitives. Mobile. Productivity. UX. Disclaimer. About me Why this talk…. 2000. 2005. 90s. 2008-Today.

Download Presentation

Building Windows phone, iOS and Android apps with C#

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. About me Why this talk…. 2000 2005 90s 2008-Today Primitives Mobile Productivity UX Disclaimer

  3. About me Why this talk…. 2000 2005 90s 2008-Today I do not work for Xamarin Opinions are my own, not those of my day-job employer This space evolves very fast Primitives Mobile Productivity UX Disclaimer

  4. Mobile Explosion • Consumers are already mobile-first • Business users are increasingly demanding mobile scenarios

  5. How? #1 – Web Build a Mobile Website

  6. How? #2 – Hybrid Web Native App Mobile Website Put a Web App In the Store

  7. How? #3 – Cloned Native Build App Multiple Times

  8. How? #4 – Shared Native Build Natively and Share Code Shared UI Code

  9. Why Native? Xamarin apps look and feel native because they are native Native User Interfaces Native API Access Native Performance

  10. Start with C# and BCL

  11. … add Windows APIs 100% coverage

  12. … or iOS APIs 100% coverage

  13. … or Android APIs 100% coverage

  14. demo Xamarin Development with Visual Studio

  15. iOS @implementationMSViewController - (void)viewDidLoad { [superviewDidLoad]; } - (IBAction)OnButtonDown:(id)sender { UIAlertView* view = [[UIAlertViewalloc]init]; [view setTitle:@"Hello World"]; [view setMessage:@"How are you?”]; [view addButtonWithTitle:@"OK"]; [view show]; } @end publicpartialclassiOSAppViewController : UIViewController { publiciOSAppViewController (IntPtr handle) : base(handle){}publicoverridevoidViewDidLoad(){base.ViewDidLoad ();}partialvoidOnButtonDown (UIButton sender){ UIAlertView view = newUIAlertView(); view.Title = "Hello World" ; view.Message = "How are you? " ; view.AddButton ("OK"); view.Show(); } }

  16. Android [Activity (Label = "AndroidApp", MainLauncher = true, Icon = "@drawable/icon")]publicclassMainActivity : Activity {protectedoverridevoidOnCreate (Bundle bundle) {base.OnCreate(bundle);SetContentView(Resource.Layout.Main);Buttonbutton = FindViewById<Button> (Resource.Id.me);button.Click+= delegate {AlertDialog.Builderbuilder = newAlertDialog.Builder (this ); AlertDialogdialog = null ; builder.SetTitle( "Hello World").SetMessage ( "How are you") .SetPositiveButton( "OK" , delegate { dialog.Dismiss(); } ); dialog = builder.Show (); } ; }} 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.Builderbuilder = new AlertDialog.Builder(MyActivity.this) ; builder.setTitle( "Hello World") .setMessage("How are you?") .setPositiveButton( "OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterfacedialogInterface, inti) { dialogInterface.dismiss(); }}) .show(); }});} }

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

  18. 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.

  19. 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 ?

  20. Sharing v1 Really?

  21. Compiler Directives Linked Files

  22. Code sharing v3

  23. Share Code: Portable Class Libraries 1 Assembly Multiple Platforms Including: Xamarin.iOS Xamarin.Android

  24. NuGet

  25. Shared Projects

  26. UI: Xamarin+ Xamarin.Forms With Xamarin.Forms: more code-sharing, native controls Traditional Xamarin approach Shared UI Code

  27. UI: Xamarin.Forms • 40+ Pages, Layouts, and Controls • Build from code behind or XAML • Two-way Data Binding • Navigation • Animation API • Dependency Service • Messaging Center Shared UI Code

  28. Layouts ContentView ScrollView Absolute Relative Grid Stack Frame

  29. Controls BoxView Button DatePicker Editor ActivityIndicator Entry Image Label ListView Map OpenGLView Picker ProgressBar SearchBar Slider Stepper TableView TimePicker WebView EntryCell ImageCell SwitchCell TextCell ViewCell

  30. Xamarin Forms • Mark-up (XAML 2009 spec) • Data binding & Data Templates • Markup Extensions • Resources Dictionaries

  31. Xamarin Forms Platform Features • Page.DisplayAlert • UI Thread marshalling • Timers • Xamarin.Forms.Maps • Platform code via OnPlatform<T> and DependencyService.Get<T>

  32. demo Hacking away with Xamarin and Visual Studio

  33. Tips & Tricks Personal Observations & Lessons learned

  34. 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

  35. How I learned native…

  36. How I learned Xamarin…

  37. Sharing code… what should you use? • PCL • Shared Projects • partial classes • C# extensions • All of the above

  38. UI Patterns & Tips • Separate your concerns • Declarative XAML • MVVM is not required • Use OnPlatform<T> for platform specific code • Use ContentPage + layout panels for dynamic resolution

  39. Connect to the cloud: Microsoft Azure http://azure.microsoft.com/en-us/documentation/services/mobile-services/

  40. Memory & Garbage Collection • iOS • Uses AOT (Ahead of Time) compiler • Two GCs: default (Boehm) or Sgen • Android • Uses 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

  41. Performance • Is usually not a problem • Use native tools to measure • iOS: Instruments • Android: Device Monitor’s Allocation Manager • Windows Phone: Visual Studio, Windows Phone Power tools, • Graphics Diagnostics

  42. For gamers

  43. Closing: Mobile app development with C# • Familiar • Productive • Highly reusable • Empowering • Built on a solid and extensible foundation

  44. MSDN Offershttp://xamarin.com/MSDN

  45. Want to win a free Xamarin license? • Download free version of Xamarin Studio … • Create a small Hello World Project on at least two of the three platforms: Windows Phone, Android, iOS. • Tweet a link to your project to @jaimerodriguez before October 10th at noon PST • One random submission will be selected….and a coupon for free license will be emailed

  46. Gracias!!! • Aquiestoy los tresdias! • @jaimerodriguez • jaimer@microsoft.com

More Related