Awesome Everywhere Targeting Every Device With Visual Studio

Download Report

Transcript Awesome Everywhere Targeting Every Device With Visual Studio

Building Windows phone, iOS
and Android apps with C#
Jaime Rodriguez
Principal Evangelist, Microsoft
About me
90s
Primitives
Why this talk….
2000
2005
Productivity
UX
Disclaimer
2008-Today
Mobile
About me
90s
Why this talk….
2000
2005
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
Productivity
Disclaimer
UX
Mobile
Mobile Explosion
Consumers are already
mobile-first
Business users are
increasingly demanding
mobile scenarios
How? #1 – Web
Build a Mobile
Website
How? #2 – Hybrid Web
Native App
Put a Web App
In the Store
Mobile
Website
How? #3 – Cloned Native
Build App
Multiple Times
How? #4 – Shared Native
Build Natively
and Share Code
Shared UI Code
Why Native?
Native User Interfaces
Native API Access
Native Performance
Xamarin apps look and feel native because they are native
Start with C# and BCL
… add Windows APIs
100% coverage
… or iOS APIs
100% coverage
… or Android APIs
100% coverage
demo
Xamarin Development with Visual Studio
iOS
@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();
}
Android
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
[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 ();
} ;
public void onClick(DialogInterface
dialogInterface, int i) {
dialogInterface.dismiss();
}}) .show();
}});
}
}
}
}
Anything you can do in Objective-C or Java
can be done in C# with Xamarin using Visual Studio
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.
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 ?
Sharing v1
Really?
Linked
Files
Compiler
Directives
Code sharing v3
Share Code: Portable Class Libraries
NuGet
Shared Projects
UI: Xamarin + Xamarin.Forms
Traditional Xamarin approach
With Xamarin.Forms:
more code-sharing, native controls
Shared UI Code
UI: Xamarin.Forms
 40+ Pages, Layouts, and Controls
 Build from code behind or XAML
Shared UI Code
 Two-way Data Binding
 Navigation
 Animation API
 Dependency Service
 Messaging Center
Layouts
Stack
Absolute
Relative
Grid
ContentView
ScrollView
Frame
Controls
ActivityIndicator
BoxView
Button
DatePicker
Editor
Entry
Image
Label
ListView
Map
OpenGLView
Picker
ProgressBar
SearchBar
Slider
Stepper
TableView
TimePicker
WebView
EntryCell
ImageCell
SwitchCell
TextCell
ViewCell
Xamarin Forms
Mark-up (XAML 2009 spec)
Data binding & Data Templates
Markup Extensions
Resources Dictionaries
Xamarin Forms Platform Features
Page.DisplayAlert
UI Thread marshalling
Timers
Xamarin.Forms.Maps
Platform code via OnPlatform<T> and DependencyService.Get<T>
demo
Hacking away with Xamarin and Visual Studio
Tips & Tricks
Personal Observations &
Lessons learned
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
How I learned native…
How I learned Xamarin…
Sharing code… what should you use?
a) PCL
b) Shared Projects
c) partial classes
d) C# extensions
e) All of the above
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
Connect to the cloud: Microsoft Azure
http://azure.microsoft.com/en-us/documentation/services/mobile-services/
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
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
For gamers
Closing: Mobile app development with C#
Familiar
Productive
Highly reusable
Empowering
Built on a solid and extensible foundation
http://xamarin.com/MSDN
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
Gracias!!!
Aqui estoy los tres dias!
@jaimerodriguez
[email protected]