Skip to content
cross-compilers

Docker images · no Mac or Windows required

Build macOS, iOS, and Windows apps on Linux.

Two Linux containers that compile, link, and package native software for Apple and Windows targets. Mount your sources at /workspace and build.

Two containers, every desktop target
docker run --rm -v "$PWD:/workspace" \
  docker.io/shepherdjerred/macos-cross-compiler:27 \
  arm64-apple-macos-clang hello.c -o hello

docker run --rm -v "$PWD:/workspace" \
  docker.io/shepherdjerred/windows-cross-compiler@sha256:6b35945b08c90de420111c415145487de5885b6e926c7cd6d4fe54d6d4380617 \
  x86_64-pc-windows-msvc-cl /EHsc hello.cpp /Fehello.exe

The macOS :27 examples require a local build. Publishing is paused; the public :latest and :15.0 tags contain an older toolchain.

macOS images run on amd64 and arm64; Windows images need amd64.

One Linux host, every desktop target.

  • Apple targets

    macOS, iOS, Mac Catalyst

  • Windows targets

    x64, ARM64, MSIX

  • Host

    Any Linux container host

  • CI-ready

    Pinned tags and digests

The images

Pick your target

Each image is a complete toolchain: compilers, SDKs, linkers, and packagers, pinned and ready to run.

WinUI 3 apps use a second image: docker.io/shepherdjerred/windows-cross-compiler-winui.

Shared philosophy

Vendor tools, not imitations

Both images assemble the toolchains the vendors themselves publish, and fill only the gaps where closed binaries can't run on Linux.

  1. Real SDKs

    Apple's macOS and iOS SDKs on one side, the MSVC CRT and Windows SDK on the other. The headers and libraries your code builds against are the vendors' own.

  2. Mount and build

    Sources go in at /workspace and binaries come out. No daemons, no project conversion, no Mac or Windows machine in the loop.

  3. Pinned and reproducible

    One macOS SDK per tag, Windows images pinned by digest. CI builds the same bits every time.