Skip to content
Go to file

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


This repository contains a 32 bit and 64 bit cross-compiler for OCaml on iOS SDK 7.0-9.2, armv7 and arm64 respectively. Do read this README, it has instructions on how to install, compile and codesigning for jailbroken phones.


You do not need to have a jailbroken iOS device to run OCaml, you can use the compiler to make an object file out of the OCaml code and then use OCaml as a C library from your Objective-C programs.

To run OCaml on jailbroken phones, that is to make arbitrary pure OCaml executables, you need to use codesign or ldid to sign your binary.

Installation, either 32-bit and 64-bit

First create a fresh switch, it must be 4.02.3:

$ opam switch ios -A 4.02.3

Then add this repository with:

$ opam repository add ios git://

Now you have a choice, do you want the 32 bit for armv7 or 64-bit compiled for arm64 cross-compiler.

For 32-bit

$ opam install ios-thirty-two-bit

For 64-bit

$ opam install ios-sixty-four-bit

Now you can compile OCaml that will run on the iPhone!

Example for jailbroken iDevices

Here is a stupid server, mostly useful to show how one can use the Unix module with no problem on the iPhone.

open UnixLabels

let () =
  let sock = socket ~domain:PF_INET ~kind:SOCK_STREAM ~protocol:0 in
  bind sock ~addr:(ADDR_INET (inet_addr_any, 3000));
  print_endline "About to listen";
  listen sock 5;
  let resp = "Thanks for the Test!\n" in
  let buf = String.create 255 in
  while true do
    let (listen_sock, listen_addr) = accept sock in
    (ignore (read listen_sock ~buf ~pos:0 ~len:255));
    print_endline buf;
    (ignore @@ write listen_sock ~buf:resp ~pos:0 ~len:(String.length resp - 1));
    Unix.close listen_sock

Compile with (same for 32-bit, 64-bit):

$ ocamlopt -o The_server unix.cmxa

Now you need to code sign the binary. You can use ldid, available via brew or Apple’s native codesign tool.

with ldid:

$ ldid -S your_binary

with codesign:

first need to get your developer hash account:

$ security find-identity -pcodesigning -v
1) XXXXX "Some Account: Fool bar"

And now use XXXXX to sign your binary:

$ codesign --deep --sign XXXXX The_server

(You can also try using ldid on the device directly, its in Cydia).

And here’s an example of it working: (The invocation uses ocamloptrev, this was an old version created from a previous verion offered by this repository but the Unix code is exactly the same)


For an example of calling OCaml from Objective-C, see this blog post


This won’t work with other opam packages just yet, I am still working on that. The only thing you’ll have at your disposal for now is the OCaml standard library, which does include unix.


The real heroes are Gerd Stolpmann, awesome guys at; special shout out to Jeffrey Scofield.

Also thanks to @whitequark for his opam-android repo. Although I ended up going in a different approach, his repo was a great starting point for me.


OCaml cross-compiler for iOS



No releases published


No packages published
You can’t perform that action at this time.