SlideShare a Scribd company logo
Introduction to MonoTouch
MONOTOUCH


Easier development of iOS applications using C#




                 NNUG Bergen
                  Jonas Follesø
                  29/02/2012
ABOUT ME




           Jonas Follesø
           Scientist & Manager BEKK Trondheim
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)
15% discount for NNUG
 Commercial Product


   339$
   399$
xamarin.com/nnug
(Free to run in emulator)
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#                                         Memory
                                                Executable
  Source Code
                                               Machine Code




                MSIL            Mono
                                Just In Time
                .NET Bytecode
                                Compilation
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
                                     Native Code


                   Mono                Mono
                 Cross Compilation
                     (mtouch)
                                      Runtime
Thin layer
  on top of
Cocoa Touch
Same UI
Components
native look & fell
MONOTOUCH APIS



.NET APIs                 Native APIs               3rd Party APIs



•   mscorlib              •   AddressBook           •   OpenTK
•   System                •   AudioToolbox          •   OpenGL
•   System.Core (LINQ)    •   CoreAnimation         •   OpenAL
•   System.Data           •   CoreGraphics          •   SQLite
•   Mono.Data.Sqlite      •   CoreLocation          •   MonoGame
•   System.ServiceModel   •   EventKit/EventKitUI   •   RestSharp
•   System.Json           •   ExternalAccessory     •   Json.NET
•   System.Web.Services   •   GameKit               •   ServiceStack
•   System.Xml            •   MapKit                •   Steema TeeChart
•   System.Xml.Linq       •   NewsstandKit          •   Flurry Analytics
                          •   StoreKit              •   RedLaser
                          •   UIKit                 •   And so on...
                          •   And so on...
Demo:
  Buss
Schedule
Cross Platform
   Mobile
 Development
REUSABLE CODE



Easily Reusable        Reusable with some effort   Not reusable

• Domain Model         • Code accessing            • User Interface Code
                         platform specific
                         components that
• Clients for your       exist across all          • Boot Strapping
  REST- and web          platforms                   Code
  services
                         •   GPS
• Data Access Code       • Contacts
  (SQLite)               • Picture Library
                         • Accelerometer
• Storage Code
  (Isolated Storage)


• Business Logic
Introduction to MonoTouch
Introduction to MonoTouch
Introduction to MonoTouch
CODE REUSE FOR MWC APP



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


•   iPhone + iPad (2476 LOC)                                 65%
•   Android (1095 LOC)
•   WP7 (896 LOC)


                                                    60%


                                             57%
COMMON API FOR SHARED FUNCTIONALITY




                    Xamarin.Mobile


                            Compass +
  Contacts   Geolocation                   Camera   Notifications
                           Accelerometer
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 error
                  return;

          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 Soundsn" +
                   "Alerts and Home Screen Badges for thenapplications 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 ready
for 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.07.17      2010.04.03   2010.06.21    2010.06.21   2011.10.12
 iOS v3.0        iOS v3.2     iOS v4.0      iOS v4.0     iOS v5.0
                  (iPad)




                2010.04.05
                 MT v2.0
   2009.09.14     (iPad)                  2011.04.06    2011.10.12   2012.01.17
    MT v1.0                                MT v4.0       MT v5.0     MT v5.2.5

                   2010.04.05
                    MT v3.0
                   (iPhone 4)
Summary
SUMMARY



C# for iOS                 Cross Platform                  Useful resources

•   Makes iOS easily       •   Standard .NET libraries     •   http://xamarin.com/NNU
    accessible for .NET        for tasks such as:              G for 15% discount on
    developers.                                                MonoTouch & Mono for
                               •   File Access                 Android

•   Thin layer on top of       •   Database Access
    CocoaTouch – same          •   Web Service Access      •   https://github.com/folles
    native look & feel                                         oe/FlightsNorway/tree/w
                               •   Business Logic              orkshop for 50 page
                                                               workshop on cross
•   MonoTouch.Dialog for                                       platform development
    easier UI creation     •   Xamarin.Mobile provides         using Mono.
                               same API for common
                               phone functionality


                           •   NDC 2011 presentation
                               on cross platform mobile:
                               http://vimeo.com/267016
                               39
Questions?

More Related Content

PPTX
An overview of the Windows Phone 7 platform
PDF
WPF - the future of GUI is near
PDF
Multitasking in iOS 7
PPTX
Appcelerator Titanium Intro
PPTX
Titanium Appcelerator - Beginners
PPTX
Android Crash Course Lunch and Learn
PPT
Delta Engine @ CeBit 2011
PDF
Dr. Strangelove, or how I learned to love plugin development
An overview of the Windows Phone 7 platform
WPF - the future of GUI is near
Multitasking in iOS 7
Appcelerator Titanium Intro
Titanium Appcelerator - Beginners
Android Crash Course Lunch and Learn
Delta Engine @ CeBit 2011
Dr. Strangelove, or how I learned to love plugin development

Viewers also liked (8)

PPT
Hvordan lage en vellykket Windows Phone 7 App
PPTX
Hvordan lage en vellykket WP7 applikasjon
PPTX
Why learn new programming languages
PPTX
Smidig 2011 TDD Workshop
PDF
BK2011 Trafikanten - Et webprosjekt med full oppgradering av karttjenester
PPTX
Get a flying start with Windows Phone 7 - NDC2010
PPTX
Smidig brukeropplevelse med skjermbildeprototyper (Smidig2009)
PPTX
Cross platform mobile apps using .NET
Hvordan lage en vellykket Windows Phone 7 App
Hvordan lage en vellykket WP7 applikasjon
Why learn new programming languages
Smidig 2011 TDD Workshop
BK2011 Trafikanten - Et webprosjekt med full oppgradering av karttjenester
Get a flying start with Windows Phone 7 - NDC2010
Smidig brukeropplevelse med skjermbildeprototyper (Smidig2009)
Cross platform mobile apps using .NET
Ad

Similar to Introduction to MonoTouch (20)

PDF
Introduction to Cross Platform Development with Xamarin/ Visual Studio
PDF
Italian Alt.Net Conference MonoTouch Session
PDF
Introduction to MonoTouch and Monodroid/Mono for Android
PPTX
Eco system apps
PDF
Xamarin v.Now
PPTX
Introduction to MonoTouch
PDF
C# On The iPhone with MonoTouch at DDD8
PDF
Bienvenido .Net MAUI - la evolución de Xamarin.Forms
KEY
C# on the iPhone with MonoTouch Glasgow
PDF
Mono for .NET Developers
PPTX
developementofmobileapplication-160412025313 (1).pptx
PDF
Mobile Development Architecture Ppt with Slides, Book Notes on using Web Silv...
PDF
iOS Development Survival Guide for the .NET Guy
PDF
Mobile Backend Apps and APIs meetup London overview of BaaS APIs and discussi...
PDF
WP7, Droid, iPhone, Oh my!
PPTX
Cross platform development with c# and xamarin
PDF
Mono for Android... for Google Devs
PPTX
Firefox os
PPTX
Developing a native mobile apps using Ionic&Cordova
KEY
webOS App by Example: Sorting Thoughts
Introduction to Cross Platform Development with Xamarin/ Visual Studio
Italian Alt.Net Conference MonoTouch Session
Introduction to MonoTouch and Monodroid/Mono for Android
Eco system apps
Xamarin v.Now
Introduction to MonoTouch
C# On The iPhone with MonoTouch at DDD8
Bienvenido .Net MAUI - la evolución de Xamarin.Forms
C# on the iPhone with MonoTouch Glasgow
Mono for .NET Developers
developementofmobileapplication-160412025313 (1).pptx
Mobile Development Architecture Ppt with Slides, Book Notes on using Web Silv...
iOS Development Survival Guide for the .NET Guy
Mobile Backend Apps and APIs meetup London overview of BaaS APIs and discussi...
WP7, Droid, iPhone, Oh my!
Cross platform development with c# and xamarin
Mono for Android... for Google Devs
Firefox os
Developing a native mobile apps using Ionic&Cordova
webOS App by Example: Sorting Thoughts
Ad

More from Jonas Follesø (6)

PPTX
Introduction to F#
PPTX
Windows Phone 7 lyntale fra Grensesnittet Desember 2010
PPTX
NNUG Trondheim 30.09.2010 - Windows Phone 7
PPTX
Generating characterization tests for legacy code
PPTX
MVVM Design Pattern NDC2009
PPT
Silverlight 2 for Developers - TechEd New Zealand 2008
Introduction to F#
Windows Phone 7 lyntale fra Grensesnittet Desember 2010
NNUG Trondheim 30.09.2010 - Windows Phone 7
Generating characterization tests for legacy code
MVVM Design Pattern NDC2009
Silverlight 2 for Developers - TechEd New Zealand 2008

Recently uploaded (20)

PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Machine learning based COVID-19 study performance prediction
PPTX
MYSQL Presentation for SQL database connectivity
PPT
Teaching material agriculture food technology
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
cuic standard and advanced reporting.pdf
PDF
Approach and Philosophy of On baking technology
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Electronic commerce courselecture one. Pdf
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Per capita expenditure prediction using model stacking based on satellite ima...
NewMind AI Monthly Chronicles - July 2025
Mobile App Security Testing_ A Comprehensive Guide.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
The AUB Centre for AI in Media Proposal.docx
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Network Security Unit 5.pdf for BCA BBA.
Machine learning based COVID-19 study performance prediction
MYSQL Presentation for SQL database connectivity
Teaching material agriculture food technology
Chapter 3 Spatial Domain Image Processing.pdf
20250228 LYD VKU AI Blended-Learning.pptx
cuic standard and advanced reporting.pdf
Approach and Philosophy of On baking technology
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Electronic commerce courselecture one. Pdf
Build a system with the filesystem maintained by OSTree @ COSCUP 2025

Introduction to MonoTouch

  • 2. MONOTOUCH Easier development of iOS applications using C# NNUG Bergen Jonas Follesø 29/02/2012
  • 3. ABOUT ME Jonas Follesø Scientist & Manager BEKK Trondheim
  • 4. AGENDA What is MonoTouch? FizzBuzz Demo + Unit Testing Buss Schedule Demo Cross Platform Apps Xamarin.Mobile + MonoTouch.Dialog
  • 6. 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.
  • 7. WHAT IS MONO? C# IronRuby IronPython Visual Basic F#
  • 8. C# on iOS (iPhone, iPod Touch, iPad)
  • 9. 15% discount for NNUG Commercial Product 339$ 399$ xamarin.com/nnug (Free to run in emulator)
  • 11. 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
  • 13. .NET & MONO JIT ENGINE C# Memory Executable Source Code Machine Code MSIL Mono Just In Time .NET Bytecode Compilation
  • 14. 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
  • 15. AHEAD-OF-TIME COMPILATION MSIL .NET Bytecode Native Code Mono Mono Cross Compilation (mtouch) Runtime
  • 16. Thin layer on top of Cocoa Touch
  • 18. MONOTOUCH APIS .NET APIs Native APIs 3rd Party APIs • mscorlib • AddressBook • OpenTK • System • AudioToolbox • OpenGL • System.Core (LINQ) • CoreAnimation • OpenAL • System.Data • CoreGraphics • SQLite • Mono.Data.Sqlite • CoreLocation • MonoGame • System.ServiceModel • EventKit/EventKitUI • RestSharp • System.Json • ExternalAccessory • Json.NET • System.Web.Services • GameKit • ServiceStack • System.Xml • MapKit • Steema TeeChart • System.Xml.Linq • NewsstandKit • Flurry Analytics • StoreKit • RedLaser • UIKit • And so on... • And so on...
  • 20. Cross Platform Mobile Development
  • 21. REUSABLE CODE Easily Reusable Reusable with some effort Not reusable • Domain Model • Code accessing • User Interface Code platform specific components that • Clients for your exist across all • Boot Strapping REST- and web platforms Code services • GPS • Data Access Code • Contacts (SQLite) • Picture Library • Accelerometer • Storage Code (Isolated Storage) • Business Logic
  • 25. CODE REUSE FOR MWC APP • 100% reuse of Core Library (1635 LOC) iOS Android WP7 • iPhone + iPad (2476 LOC) 65% • Android (1095 LOC) • WP7 (896 LOC) 60% 57%
  • 26. COMMON API FOR SHARED FUNCTIONALITY Xamarin.Mobile Compass + Contacts Geolocation Camera Notifications Accelerometer
  • 27. 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 error return; Bitmap b = BitmapFactory.DecodeFile (t.Result.Path); RunOnUiThread (() => image.SetImageBitmap (b)); });
  • 30. Create UI faster using MonoTouch.Dialog
  • 32. 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 Soundsn" + "Alerts and Home Screen Badges for thenapplications below."){ new BooleanElement ("Notifications", false) } }},
  • 33. 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; }
  • 35. Is it ready for business?
  • 36. 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.”
  • 37. 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
  • 39. MONOTOUCH & iOS RELEASE HISTORY 2009.07.17 2010.04.03 2010.06.21 2010.06.21 2011.10.12 iOS v3.0 iOS v3.2 iOS v4.0 iOS v4.0 iOS v5.0 (iPad) 2010.04.05 MT v2.0 2009.09.14 (iPad) 2011.04.06 2011.10.12 2012.01.17 MT v1.0 MT v4.0 MT v5.0 MT v5.2.5 2010.04.05 MT v3.0 (iPhone 4)
  • 41. SUMMARY C# for iOS Cross Platform Useful resources • Makes iOS easily • Standard .NET libraries • http://xamarin.com/NNU accessible for .NET for tasks such as: G for 15% discount on developers. MonoTouch & Mono for • File Access Android • Thin layer on top of • Database Access CocoaTouch – same • Web Service Access • https://github.com/folles native look & feel oe/FlightsNorway/tree/w • Business Logic orkshop for 50 page workshop on cross • MonoTouch.Dialog for platform development easier UI creation • Xamarin.Mobile provides using Mono. same API for common phone functionality • NDC 2011 presentation on cross platform mobile: http://vimeo.com/267016 39