Introduction to MonoTouch

Post on 28-Jan-2015

107 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

Transcript

MONOTOUCH

Easier development of iOS applications using C#

NNUG Bergen

Jonas Follesø

29/02/2012

ABOUT ME

Scientist & Manager BEKK Trondheim

Jonas Follesø

AGENDA

What is MonoTouch?

FizzBuzz Demo + Unit Testing

Buss Schedule Demo

Cross Platform Apps

Xamarin.Mobile + MonoTouch.Dialog

What is Mono?

WHAT IS MONO?

• Open source implementation of the .NET platform

• 2001: Created to bring Windows applications to Linux

• 2003: Acquired by Novell with Ximian

• Matured at Novell – now a world-class runtime.

WHAT IS MONO?

C#

IronRuby

IronPython

Visual Basic

F#

C# on iOS(iPhone, iPod Touch, iPad)

Commercial Product

399$(Free to run in emulator)

15% discount for NNUG

339$xamarin.com/nnug

Demo:FizzBuzz

UNIT TESTING MONOTOUCH APPS

• NUnit Lite Runner on device/simulator

• Same NUnit syntax you already know

• Possible to run the same NUnit tests on desktop, iOS and WP7 device

Demo: Unit Testing

.NET & MONO JIT ENGINE

C#Source Code

MonoJust In Time Compilation

MSIL.NET Bytecode

Memory

Executable Machine Code

AHEAD-OF-TIME COMPILATION

• Apple disallows Just-In-Time compilation (JIT)

• Cannot make writable memory executable – enforced by OS

• MonoTouch uses Ahead-of-Time Compilation (AOT)• Generates the native code that JIT would normally

generate

• Links to runtime to create single ARM process capable native binary

AHEAD-OF-TIME COMPILATION

MSIL.NET Bytecode

MonoCross Compilation

(mtouch)

Native Code

Mono Runtime

Thin layer on top of

Cocoa Touch

Same UIComponentsnative look & fell

MONOTOUCH APIS

.NET APIs

Native APIs

3rd Party APIs

• mscorlib

• System

• System.Core (LINQ)

• System.Data

• Mono.Data.Sqlite

• System.ServiceModel

• System.Json

• System.Web.Services

• System.Xml

• System.Xml.Linq

• AddressBook

• AudioToolbox

• CoreAnimation

• CoreGraphics

• CoreLocation

• EventKit/EventKitUI

• ExternalAccessory

• GameKit

• MapKit

• NewsstandKit

• StoreKit

• UIKit

• And so on...

• OpenTK

• OpenGL

• OpenAL

• SQLite

• MonoGame

• RestSharp

• Json.NET

• ServiceStack

• Steema TeeChart

• Flurry Analytics

• RedLaser

• And so on...

Demo:Buss

Schedule

Cross PlatformMobile

Development

REUSABLE CODE

Easily Reusable

Reusable with some effort

Not reusable

• Domain Model

• Clients for your REST- and web services

• Data Access Code (SQLite)

• Storage Code (Isolated Storage)

• Business Logic

• Code accessing platform specific components that exist across all platforms

• GPS

• Contacts

• Picture Library

• Accelerometer

• User Interface Code

• Boot Strapping Code

CODE REUSE FOR MWC APP

57%

60%

65%

iOS Android WP7• 100% reuse of Core Library (1635 LOC)

• iPhone + iPad (2476 LOC)

• Android (1095 LOC)

• WP7 (896 LOC)

COMMON API FOR SHARED FUNCTIONALITY

Xamarin.Mobile

Contacts GeolocationCompass +

Accelerometer

CameraNotification

s

XAMARIN.MEDIA.MEDIAPICKER

ImageView image = FindViewById<ImageView> (Resource.Id.image);

var picker = new MediaPicker (this);picker.PickPhotoAsync()

.ContinueWith (t => {

            if (t.IsCanceled || t.IsFaulted) // user canceled or errorreturn;

            Bitmap b = BitmapFactory.DecodeFile (t.Result.Path);            RunOnUiThread (() => image.SetImageBitmap (b));

      });

XAMARIN.MEDIA.MEDIAPICKER

Demo:Xamarin.Mobile

Create UI faster using

MonoTouch.Dialog

GREATLY SIMPLIFIES CREATION OF SIMPLE UIS

TWO APIS: ELEMENTS API

• MonoTouch.Dialog is a framework that brings declarative UI programming to iOS

return new RootElement ("Settings") {

new Section (){

new BooleanElement ("Airplane Mode", false),

new RootElement ("Notifications", 0, 0) {

new Section (null,

"Turn off Notifications to disable Sounds\n" +

"Alerts and Home Screen Badges for the\napplications below."){

new BooleanElement ("Notifications", false)

}

}},

TWO APIS – REFLECTION API

class AccountInfo { [Section] public bool AirplaneMode;

[Section ("Data Entry", "Your credentials")]

[Entry ("Enter your login name")] public string Login;

[Caption ("Password"), Password ("Enter your password")] public string passwd;

[Section ("Travel options")] public SeatPreference preference;}

Demo:MonoTouch.Dialog

Is it readyfor business?

CONTROVERSY 1: APRIL 2010 – APPLE’S SECTION 3.3.1

• April 8nd: Apple changed license to state that:

“Applications must be originally written in Objective-C, C, C++, or JavaScript as executed by the iPhone OS WebKit engine, and only code written in C, C++, and Objective-C may compile and directly link against the Documented APIs…”

• September 9th: Apple changed license again:

“In particular, we are relaxing all restrictions on the development tools used to create iOS apps, as long as the resulting apps do not download any code. This should give developers the flexibility they want, while preserving the security we need.”

CONTROVERSY 2: MAY 2011 - ATTACHEMATE

• May 2nd: Attachemate buys Novell – Mono team laid off

• Xamarin founded 2 weeks later

• Angry Mono customers pressure Novell to cooperate with Xamarin

• Xamarin secures a perpetual license to all Mono IP: copyrights, patents and trademarks

Basically:All good!

MONOTOUCH & iOS RELEASE HISTORY

2009.09.14MT v1.0

2010.04.05 MT v2.0(iPad) 2011.04.06

MT v4.02011.10.12

MT v5.02012.01.17MT v5.2.5

2009.07.17iOS v3.0

2010.04.03iOS v3.2

(iPad)

2010.06.21iOS v4.0

2010.04.05 MT v3.0

(iPhone 4)

2010.06.21iOS v4.0

2011.10.12iOS v5.0

Summary

SUMMARY

C# for iOS

Cross Platform

Useful resources

• Makes iOS easily accessible for .NET developers.

• Thin layer on top of CocoaTouch – same native look & feel

• MonoTouch.Dialog for easier UI creation

• Standard .NET libraries for tasks such as:

• File Access

• Database Access

• Web Service Access

• Business Logic

• Xamarin.Mobile provides same API for common phone functionality

• NDC 2011 presentation on cross platform mobile: http://vimeo.com/26701639

• http://xamarin.com/NNUG for 15% discount on MonoTouch & Mono for Android

• https://github.com/follesoe/FlightsNorway/tree/workshop for 50 page workshop on cross platform development using Mono.

Questions?

top related