introduction to monotouch
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?