Upload
augustine-williams
View
219
Download
1
Embed Size (px)
Citation preview
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
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
Mobile Explosion
Consumers are already mobile-first
Business users are increasingly demanding mobile scenarios
How? #1 – Web
Build a MobileWebsite
How? #2 – Hybrid Web
Put a Web App In the Store
Native App
MobileWebsite
How? #3 – Cloned Native
Build App Multiple Times
How? #4 – Shared Native
Shared UI Code
Build Nativelyand Share Code
Why Native?
Xamarin apps look and feel native because they are native
Native User Interfaces Native API Access Native Performance
Start with C# and BCL
… add Windows APIs
100% coverage
… or iOS APIs
100% coverage
… or Android APIs
100% coverage
demoXamarin Development with Visual Studio
@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
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
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 v1Really?
Linked Files
Compiler Directives
Code sharing v3
Share Code: Portable Class Libraries
1 AssemblyMultiple PlatformsIncluding:
Xamarin.iOSXamarin.Android
NuGet
Shared Projects
UI: Xamarin + Xamarin.FormsWith Xamarin.Forms:
more code-sharing, native controlsTraditional Xamarin approach
Shared UI Code
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
Layouts
Stack Absolute Relative Grid ContentView
ScrollView Frame
ControlsActivityIndicato
rBoxView 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>
demoHacking 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 concernsDeclarative 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
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
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
For gamers
Closing: Mobile app development with C#Familiar
Productive
Highly reusable
Empowering
Built on a solid and extensible foundation
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