Building Mobile Cross-Platform Apps foriOS, Android & Windows in C# with Xamarin

Post on 07-Jan-2017

7,649 views 3 download

transcript

Building Mobile Cross-Platform Apps foriOS, Android & Windows in C# with Xamarin

Nick LandrySenior Technical Evangelist, MicrosoftAgeofMobility.com@ActiveNick – github.com/activenick

Session Agenda

Audience poll…

Silo Approach:

Build the Same Apps Multiple Times

The Siloed approach: Build native apps multiple timesMultiple teams and multiple code bases are expensive and slow

+

+

-

Write Once,Run AnywhereApproach

Lowest Common Denominator

Browser Fragmentation

• App Generation.

• Web Browser in a

Native Wrapper +

Platform APIs.

The write-once-run-anywhere approachHTML Hybrid scenarios (Semi-native apps) like Cordova (i.e. PhoneGap)

Xamarin’s Unique Approach

Shared C# codebase • 100% native API access • High performance

iOS C# UI Windows C# UIAndroid C# UI

Shared C# Mobile C# Server

Linux/Mono

CoreCLRAzure

Shared C# Client/Server

C# and Xamarin’s unique approachThe best of all worlds

How Does Xamarin Run C# on iOS or Android?

Windows APIs

Microsoft.Phone Microsoft.Networking Windows.Storage Windows.Foundation Microsoft.Devices

System.Data System.Windows System.Numerics System.Core System.ServiceModel

System.Net System System.IO System.Linq System.Xml

C#

iOS – 100% API Coverage

MapKit UIKit iBeacon CoreGraphics CoreMotion

System.Data System.Windows System.Numerics System.Core System.ServiceModel

System.Net System System.IO System.Linq System.Xml

C#

Android – 100% API Coverage

Text-to-speech ActionBar Printing Framework Renderscript NFC

System.Data System.Windows System.Numerics System.Core System.ServiceModel

System.Net System System.IO System.Linq System.Xml

C#

All 3 characteristics are required for a truly native app

Xamarin is native in all 3 ways

Native User Interface

Apps are built with standard, native

user interface controls for easy and

familiar interactions

Apps have access to the full spectrum of

functionality exposed by the underlying

platform and device

Apps leverage platform-specific hardware

acceleration, and are compiled as native

binaries, not interpreted at runtime.

High-fidelity API Access

Native Performance

Xamarin exposes 100% of the native APIs

for iOS, Android and Windows

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.

Always Up-to-Date

Full support for:Google Glass, Android Wear, Amazon Fire TV

Xamarin: How much?

Yes!

Development Environment

Xamarin Studio

PC or Mac

Visual Studio Plugin

VS 2010/2012/2013/2015

Xamarin Studio

Xamarin + Xamarin.FormsWith Xamarin.Forms:

more code-sharing, native controlsTraditional/Classic Xamarin approach

Shared UI Code

What’s included

✓ 40+ Pages, layouts, and controls

(Build from code behind or XAML)

✓ Two-way data binding

✓ Navigation

✓ Animation API

✓ Dependency Service

✓ Messaging Center

Shared C# App Backend

(non-UI code)

Shared UI Code

<?xml version="1.0" encoding="UTF-8"?>

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"

xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"x:Class="MyApp.MainPage">

<TabbedPage.Children>

<ContentPage Title="Profile" Icon="Profile.png">

<StackLayout Spacing="20" Padding="20"

VerticalOptions="Center">

<Entry Placeholder="Username"

Text="{Binding Username}"/>

<Entry Placeholder="Password"

Text="{Binding Password}"

IsPassword="true"/>

<Button Text="Login" TextColor="White"

BackgroundColor="#77D065"

Command="{Binding LoginCommand}"/>

</StackLayout>

</ContentPage>

<ContentPage Title="Settings" Icon="Settings.png">

<!-- Settings -->

</ContentPage>

</TabbedPage.Children>

Native UI from shared code

At runtime, each Xamarin.Forms page and its

controls are mapped to platform-specific native

user interface elements

Use a single API to generate native, platform-specific user interfaces

Xamarin.Forms Pages

Content MasterDetail Navigation Tabbed Carousel

UIViewController Activity Page

Xamarin.Forms Layouts

Stack Absolute Relative Grid ContentView ScrollView Frame

40+ Xamarin.Forms 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

Shared Projects

NuGet

Portable Class Libraries

Choosing a Code Sharing Option

Native Dev: Platform Tools or Xamarin?

Platform Tools (Windows, iOS, Android)

• Default native method to build apps

• Free development tools & SDKs

• Requires learning at least one language &

SDK per platform (C#, Java, Objective-C)

• Design, develop & maintain completely

separate apps for each platform

• More learning resources available

• Books, web sites, blogs, training,

StackOverflow, videos, larger

community, etc.

• Yet, iOS developers are (kinda) starting all

over with Swift

Xamarin / Mono

• Reuse existing C# skills & source code (but

you have to know C#)

• Need to buy an additional tool: extra cost

• Need to learn new tools & techniques

• Still need to learn the specifics of each

platform SDK, app architecture & lifecycle

• Fewer third-party libraries available

• Built-in GUI designer for iOS and Android

• Xamarin.Forms provides native shared Uis,

but there is no XAML designer (yet)

• Vendor lock-in / dependency

Mobile Strategy Considerations

Audience

• General Consumer

Market

• Niche Consumer

Market

• Enterprise Users

• BYOD

Objectives

• Marketing “Checklist”

Apps

• Brand “Reach” Apps

• Weekend Warrior Apps

• Apps for Profit

• Mobile Revolution

Apps

Other Considerations

• Mobile Population

Coverage Target &

Desired Reach

• Expertise

• Resources

• Timeframe

Summary

github.com/ActiveNick/MyWeatherNUI

github.com/ActiveNick/MyWeather

github.com/ActiveNick/BingTranslateDemo

github.com/ActiveNick/HelloWeather

github.com/ActiveNick/AzureChatrforWindows

github.com/jamesmontemagno/MyStocks.Forms

github.com/jamesmontemagno/MyExpenses-Sync

Session Demos

http://channel9.msdn.com/events/Build/2015/3-770

http://aka.ms/ch9xam2015-1

http://aka.ms/ch9xam2015-2

http://aka.ms/ch9xam2015-3

http://aka.ms/ch9xam2015-4

http://channel9.msdn.com/Search?term=xamarin#ch9Search&lang-en=en

Xamarin Videos for Developers

http://xamarin.com/download

http://docs.xamarin.com

http://evolve.xamarin.com

http://xamarin.com/university

http://blog.xamarin.com

http://motzcod.es

http://weblogs.asp.net/wallym

http://www.gregshackles.com

Xamarin Resources

Xamarin Developer Certifications:Be part of an Elite Developer Community

Students have the option to take a certification test and become Xamarin certified. Xamarin skills are increasingly in demand – certifications let the market know you represent top talent.

Online Microsoft training delivered by experts to help technologists continually learn

Hundreds of courses for developers, IT Pros, students, entrepreneurs and enthusiasts

11 different languages

More than 3M students registered

Build your own Learning Plan

All free!

Cross-Platform Development withXamarin & Visual Studio

aka.ms/MVAxamarin

http://www.microsoftvirtualacademy.com

• Universal Windows App Developmentwith Cortana and the Speech SDK

• Available for on-demand viewing now:

http://aka.ms/CortanaMVA

Recommended Xamarin Books

http://aka.ms/Xs5v48

Xamarin Mobile Application Development for Android

(Mark Reynolds)

http://aka.ms/Ndl0jn

iOS Development with Xamarin Cookbook

(Dimitris Tavlikos)

http://aka.ms/S8akz1

Xamarin Cross-Platform Application Development

(Jonathan Peppers)

http://aka.ms/Sl5aj9

Thank You!

Slides are posted on SlideShare. Demos are on GitHub.

SlideShare: www.slideshare.net/ActiveNick

Blog: www.AgeofMobility.com

Twitter: @ActiveNick

Mobile Apps: www.bigbaldapps.com

LinkedIn: www.linkedin.com/in/activenick

GitHub: github.com/ActiveNick

Email: nick.landry@microsoft.com