Easily share code between iOS, Android and Windows Phone 7.
High-performance compiled code with full access to all the native APIs, including UIKit.
Everything you love about .NET, including LINQ, Delegates and Events.
MonoTouch makes creating iPhone and iPad apps easier than ever before.
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.
Explore APIs as you type with code autocompletion. Just like Visual Studio.
MonoTouch has all of the latest iOS 5 features bound and ready to use in the apps you create.
Import existing .NET libraries and use them in your MonoTouch apps. Easily bind existing C and Objective-C libraries as well.
Use XCode 4 and the powerful UI Designer to create interfaces and Storyboards that automatically sync with your MonoTouch project.
MonoTouch is frequently updated and ready with all of the new iOS features - typically on the same day they are released!
Thousands of developers are already using Xamarin to create amazing apps.





















Software Developer, iCircuit
Cross Platform Software Solutions
Some of the wonderful apps MonoTouch developers have created are featured in our App Showcase.
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;
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;
}
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!";
};
Easily handle button presses and other UI events.
from item in items.AsParallel () let result = DoExpensiveWork (item) select result;
Use Parallel LINQ to automatically distribute heavy work, like parsing large JSON results, over both cores of an iPad 2 or iPhone 4S.
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]]];
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);
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);
var attrs = new CFStringAttributes {
Font = listLineCTFont,
ForegroundColor = UIColor.Black.CGColor
};
var astr = new NSAttributedString ("Hello World", attrs);
UInt32 maxPacketSize;
UInt32 Propertysize = sizeof(maxPacketSize);
AudioFileGetProperty (
audioFileID,
kAudioFilePropertyPacketSizeUpperBound,
&Propertysize,
&maxPacketSize
);
var maxPacketSize = audioFile.PacketSizeUpperBound;
To learn more, check out our awesome documentation: Documentation | Code Samples | Tutorials
Choose the version of MonoTouch that is right for you and your company.