This page is likely outdated (last edited on 04 Aug 2009). Visit the new documentation for updated content.

MonoTouch mtouch

iPhone applications are shipped as application bundles. These are directories with the extension .app that contain your code, data, configuration files and a manifest that the iPhone uses to learn about your application.

The process of turning a .NET executable into an application is mostly driven by the mtouch command, a tool that integrates many of the steps required to turn the application into a bundle. This tool is also used to launch your application in the simulator and to deploy the software to an actual iPhone or iPod Touch device.

Table of contents

Building

The mtouch command can compile your code in three different ways:

  • Compile for simulator testing.
  • Compile for device deployment.
  • Compile to source code, for integration with X-Code.

Building for the Simulator

When you get started, the most common used scenario will be for you to try out the application in the Simulator, so you will be using the mtouch -sim to compile the code into a simulator package. This is done like this:

 $ mtouch -sim Hello.app hello.exe

Building for the Device

To build software for the device you will build your application using the mtouch -dev option, additionally you need to provide the name of the certificate used to sign your application. The following shows how the application is built for the device:

mtouch -dev -c "iPhone Developer: Miguel de Icaza" foo.exe

In this particular case, we are using the “iPhone Developer: Miguel de Icaza” certificate to sign the application. This step is very important, or the physical device will refuse to load the application.

Running your Application

Launching on the Simulator

Launching on the simulator is very simple once you have an application bundle:

 $ mtouch -launchsim Hello.app

You will see some output like this:

Launching application
Application launched
PID: 98460
Press enter to terminate the application

It is strongly recommended that you also keep a log of the standard output and standard error files to assist in your debugging. The output of Console.WriteLine goes to stdout, and the output from Console.Error.WriteLine and any other runtime error messages goes to stderr.

To do this, use the –stdout and –stderr flags:

../../tools/mtouch/mtouch --launchsim=Hello.app --stdout=output --stderr=error

If your application fails, you can see the fiels output and error to diagnose the problem.

Debugging on the Simulator

Debugging on the simulator is currently limited to debugging at the GDB level. This debugging is described in Debugging with GDB. This means that it is mostly useful if you are debugging low-level operations or if you are familiar with Mono internals, it is not a complete managed debugger.

 $ mtouch -debugsim Hello.app

You will see some output like:

Launching application
Application launched
PID: 29558
Press enter to terminate the application

Open another terminal and launch gdb and type:

(gdb) attach 29558 <-- PID from above
Attaching to process 29558.
Reading symbols for shared libraries . done
0x8fe01010 in __dyld__dyld_start ()
(gdb) continue

Debugging on the Device

Debugging on the device is currently provided thru the Xcode debugging mechanism and uses GDB. This debugging is described in Debugging with GDB. This means that it is mostly useful if you are debugging low-level operations or if you are familiar with Mono internals, it is not a complete managed debugger.

 $ mtouch -xcode Hello -res MainWindow.xib -res Icon.png hello.exe

This command will generate a xcodeproject in the folder “Hello” containing the resources Icon.png and MainWindow.xib from your hello.exe, and open the project in xcode, you can then debug on the device via Xcode.

Deploying to a Device

Overview

Troubleshooting