C# on the iPhone
with MonoTouch
        Chris Hardy
follow on Twitter - @chrisntr
http://greatfridays.com
Covering...

• What is MonoTouch?
• How does it work?
• Why would you use it?
• Demos
Starting point....
Objective C and Xcode
Learn to read Objective-C
Learn to read Objective-C

 • All Apple documentation is in Obj-C
 • Most examples are in Obj-C
 • It’s not too hard to understand
 • It might even be fun...
What is MonoTouch?
What is Mono?
What is Mono?

    Open Source .Net
  Implementation of the
Microsoft .Net Framework
Mono’s JIT Engine
             Memory

      Mono

CIL
Apple No No...
• Contractual Requirements
 • No interpreted code
 • No shared libraries

• Kernel Limitations
 • iPhone OS 2.0+ disables JIT
Mono’s AOT Engine
             Native
             Code

      Mono
      AOT      Mono Runtime


CIL
                        ARM
Monotouch Features
• mtouch
• MonoDevelop iPhone Add-In
• CocoaTouch.NET
• Full static AOT compiler
• Support for all your existing code
 • Reflection
 • Generics
 • LINQ
 • Anonymous Methods
 • Lambda’s etc...
MonoTouch’s APIs
The Bindings
• MonoTouch namespace
• MonoTouch.Foo namespace
 • Maps to CocoaTouch’s Foo Framework
• 1:1 Mapping of classes.
 • MonoTouch.UIKit.UILabel
 • CocoaTouch’s UIKit framework, UILabel
    class
Strong Types
• Objective-C
 • Arrays are weakly typed:
 • NSArray return values.
• MonoTouch has strong types
 • UIView[] Subviews { get; }
 • vs
 • NSArray *subviews;
• Intellisense - explore the API...
Garbage Collection
•   Automatic:
    •   Mono’s GC will collect objects on demand

•   Deterministic:
    •   Use when you need control.

    •   Every object in MonoTouch implements IDisposable
        using (var image = UIImage.FromFile(“foo.png”)){
            surface.DrawImage(image, 20, 20);
        }
Linker
What about App Size?

• 10 MB (compressed) limit on 3G/Edge
  downloads
• .Net BCL and other libraries are huge
• Mono Linker to the rescue!
Linking Assemblies
Linker Options

• No Link
• Link SDK Only
• Full Link
Pipeline

• Interface Builder GUI Designer
 • Exact same tool used by Xcode
 • Support for existing Xcode interfaces
• MonoDevelop IDE
Integration
• Tight integration between MD and IB
 • IB produces XIBs with MD parses
• Automatic class generation in MD
• Generates partial classes for all types,
  outlets and actions defined in Interface
  Builder
Outlets

• Instance Variables
• Can be strong or loosely typed
 • MD will strong type
Actions
• Objects emit broadcast messages to
  receivers
• You can do this C#
• MonoDevelop takes care of the details for
  you
• Creates partial methods for you extend
MonoTouch Events
• Supports Objective-C pattern:
 webView.Delegate = new
 MyWebViewDelegate();
• C# style events as well:
 webView.PageLoaded += delegate {
     HideSpinningWheel();
 }
Debugging


• Console.WriteLine(“Debugging inside of
  MonoTouch”);
• printf(“I made it to this line!n”)
Well...
• MonoTouch released around 15th
  September 2009
• MonoTouch 1.1 on 2nd October 2009
• MonoTouch 1.2 (Beta) released on 28th
  October 2009... With Debugging support
• Currently on MonoTouch 1.4.5
Debugger

• MonoTouch debugger leverages Mono’s
  new Soft-Debugger
• Supports the Simulator
• Supports the Device...
 • even over WiFi
Debugger Features
• Breakpoints
• Catchpoints
• Inspection
• Watches
• Immediate / Expression Evaluator
• Call Stack
• Stepping
Caveats

• Debug binaries on devices are very large
• Cannot debug Main or FinishedLaunching
  on device
• Consumes more memory runtime
• Performance hit
Getting started
• Get iPhone SDK from Apple
• Get Mono from Novell
• Get MonoTouch (evaluation version is free)
• Get MonoDevelop
• Register with Apple iPhone Developer
  Program and purchase MonoTouch for
  putting apps on device and AppStore.
One more thing...
iPad

• But you want to develop for the iPad...

• 24 Hours after the SDK was released...
• MonoTouch support for iPad
Demo time...
Q +A
twitter.com/chrisntr
chrisntr@gmail.com

C# On The iPhone with MonoTouch at DDD8