Create amazing iPhone and iPad apps with C# and .NET

Finally, a platform as elegant as the device.

  • Cross Platform

    Easily share code between iOS, Android and Windows Phone 7.

  • Native Code

    High-performance compiled code with full access to all the native APIs, including UIKit.

  • C# & .NET

    Everything you love about .NET, including LINQ, Delegates and Events.

Why you'll love MonoTouch.

MonoTouch makes creating iPhone and iPad apps easier than ever before.

  • Cross platform development

    Thinking about supporting Android in the future? In many cases, you can reuse most of your existing code when porting from iOS to Mono for Android.

  • Discover iOS as you type

    Explore APIs as you type with code autocompletion. Just like Visual Studio.

  • iOS 5 ready

    MonoTouch has all of the latest iOS 5 features bound and ready to use in the apps you create.

  • Reuse existing code

    Import existing .NET libraries and use them in your MonoTouch apps. Easily bind existing C and Objective-C libraries as well.

  • XCode 4 and UI designer integration

    Use XCode 4 and the powerful UI Designer to create interfaces and Storyboards that automatically sync with your MonoTouch project.

  • Up to date

    MonoTouch is frequently updated and ready with all of the new iOS features - typically on the same day they are released!

You're in good company.

Thousands of developers are already using Xamarin to create amazing apps.

  • 3M
  • Microsoft
  • VMWare
  • Novartis
  • Target
  • Accenture
  • Cisco
  • AT&T
  • AOL
  • Monster
  • Cornell University
  • RDIO
  • Matrox
  • CH Robinson
  • Tibco
  • Raytheon BBN Technologies
  • Intuit
  • Medtronic
  • HP
  • Resco
  • Cegedim
  • Frank Krüger

    Software Developer, iCircuit

  • Just Enough

    Cross Platform Software Solutions

Some of the wonderful apps MonoTouch developers have created are featured in our App Showcase.

Write beautiful code.

With MonoTouch, you can harness the full power of C# and .NET. Write shorter, simpler, and more maintainable code using features like LINQ, anonymous types, lambdas and more.

from p in Table<Person> ()
    where p.ID == id
    select p;

LINQ Support

Use LINQ in your MonoTouch projects to query, filter and select data from in-memory arrays, or from databases such as SQLite.

var doc = XDocument.Load(url);
foreach(var item in doc.Root.Elements()) {
    var text = item.Value;
}

Work With XML Easily

Handling XML is quick and easy thanks to the built-in XDocument class - just one of the thousands of .NET APIs available when you use MonoTouch.

button.TouchUpInside += (s, o) => {
    message.Text = "Hello!";
};

Event Handling & Delegates

Easily handle button presses and other UI events.

from item in items.AsParallel ()
   let result = DoExpensiveWork (item)
   select result;

Make Use of Both Cores

Use Parallel LINQ to automatically distribute heavy work, like parsing large JSON results, over both cores of an iPad 2 or iPhone 4S.

Using CoreImage

Objective-C

CIContext *context = 
     [CIContext contextWithOptions: 
        [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES]
                  forKey:kCIContextUseSoftwareRenderer]];
CIImage *ciImage = [CIImage initWithCGImage:cgImage];
	
CIFilter *hueAdjustFilter = [CIFilter filterWithName:@"CIHueAdjust"];
CIFilter *colorControlsFilter = [CIFilter filterWithName:@"CIColorControls"];

[hueAdjustFilter setValue:[NSNumber numberWithDouble:3.0 * M_PI] forKey:@"inputAngle"];

[colorControlsFilter setDefaults];
[colorControlsFilter setValue:[NSNumber numberWithDouble:1.3] forKey:@"inputSaturation"];
[colorControlsFilter setValue:[NSNumber numberWithDouble:0.3] forKey:@"inputBrightness"];

[hueAdjustFilter setValue:ciImage forKey:@"inputImage"];
[colorControlsFilter setValue:[hueAdjustFilter valueForKey:@"outputImage"] forKey:@"inputImage"];
ciImage = [colorControlsFilter valueForKey:@"outputImage"];

[context [createCGImage: ciImage fromExtent:[ciImage extent]]];

C# with MonoTouch

var context = CIContext.FromOptions (new CIContextOptions () {
    UseSoftwareRenderer = true
});
var ciImage = new CIImage (cgImage);
var hueAdjustFilter = new CIHueAdjust {
    InputAngle = 3.0f * Math.PI,
    Image = ciImage,
};

var colorControlsFilter = new CIColorControls {
    InputSaturation = 1.3f,
    InputBrightness = 0.3f,
    Image = hueAdjustFilter.OutputImage
};

ciImage = colorControlsFilter.OutputImage;
context.CreateImage (ciImage, ciImage.Extent);

Creating attributed strings

Objective-C

CFStringRef keys[] = {
    kCTFontAttributeName,
    kCTForegroundColorAttributeName
};

CFTypeRef bval[] = {
    cfListLineCTFontRef,
    CGColorGetConstantColor(kCGColorBlack)
};

attr = CFDictionaryCreate (kCFAllocatorDefault,
    (const void **) &keys, (const void **) &bval,
    sizeof(keys) / sizeof(keys[0]), &kCFTypeDictionaryKeyCallBacks,
    &kCFTypeDictionaryValueCallBacks);

astr = CFAttributedStringCreate(kCFAllocatorDefault, CFSTR("Hello World"), attr);

C# with MonoTouch

var attrs = new CFStringAttributes {
    Font = listLineCTFont,
    ForegroundColor = UIColor.Black.CGColor
};

var astr = new NSAttributedString ("Hello World", attrs);

Probing for properties on an AudioFile

Objective-C

UInt32 maxPacketSize;
UInt32 Propertysize = sizeof(maxPacketSize);
AudioFileGetProperty (
    audioFileID,
    kAudioFilePropertyPacketSizeUpperBound,
    &Propertysize,
    &maxPacketSize
    );

C# with MonoTouch

var maxPacketSize = audioFile.PacketSizeUpperBound;

Pricing & purchase.

Choose the version of MonoTouch that is right for you and your company.

  • Simulator-Only

    Free

    • Simulator only
    • No time limit
    • Give MonoTouch a try!
  • Enterprise

    $999

    • Publish to app stores
    • Enterprise distribution
    • 1 Year of updates
    • Licensed per seat
  • Enterprise Priority

    $2499

    • Publish to app stores
    • Enterprise distribution
    • Priority support queue
    • 1 Year of updates
    • Licensed per seat
30 Day Money Back Guarantee!