.NET MAUI without my Mac [Part 1]
Explore whether it’s possible to build .NET MAUI iOS applications without owning a Mac. This post introduces the challenge, outlines initial setup steps, and investigates options using GitHub-hosted macOS runners.
C# and .NET are the standard tools for Windows development. Cross-platform frameworks like MAUI and Blazor build on that foundation, allowing Android and iOS development from a shared codebase. In most cases, building for multiple platforms is simple. iOS builds, however, add complexity because they require macOS, forcing developers to either purchase a Mac or borrow one.
This three-part series explores whether it is possible to build a .NET MAUI iOS application using GitHub-hosted macOS runners at no cost beyond an active Apple Developer Program subscription.
- Part 1 - Without my pants
Explore whether it’s possible to build .NET MAUI iOS applications without owning a Mac. This post introduces the challenge, outlines initial setup steps, and investigates options using GitHub-hosted macOS runners. - Part 2 – Certificates and Provisioning Profiles
Building on the previous post, this guide walks through the detailed process of handling Apple certificates, provisioning profiles, and signing requirements to successfully produce a signed iOS app, all without direct access to a Mac. - Part 3 - Putting on my pants
This final part explores cloud build platforms like Codemagic to complete the iOS build process. Learn how to work around the limitations of GitHub runners and reach a practical solution for building .NET MAUI apps in the cloud.
Prerequisites
This guide assumes familiarity with Git, Visual Studio, and .NET MAUI. All required dependencies for MAUI development on Windows should already be installed.
Create a project
Begin by creating a new GitHub repository, for example maui-iphone
, and clone it locally.

Using Visual Studio, create a new .NET MAUI project in the cloned repository directory, for example MyMauiBlazorApp
.

Add a workflow configuration file at .github/workflows/build.yml
using a text editor. This YAML file defines how GitHub Actions will build the project in a cloud-hosted environment.
This workflow is triggered by pushes to the main
branch and runs on a macos-15
runner. macOS is required for building iOS applications. Version 15 is specified because .NET 9 depends on the latest version of Xcode (16.3), which is only available on macOS 15 or later.
The workflow runs the following steps:
- Checks out the repository.
- Sets up .NET 9 and installs the MAUI iOS workload.
- Restores NuGet packages.
- Publishes the MAUI Blazor iOS application as a Release build, producing an
.ipa
file.
Most of these commands will be familiar to developers with .NET experience. The runtime identifier and .NET version are specified explicitly to avoid unnecessary cross-platform targets, reducing build time as this series focuses solely on iOS.
Build the project
Pushing the project and new build.yml
to your origin will start the build process. It mostly completes, but certificate and code signing errors now appear.

These issues are covered in Part 2 – Certificates and Provisioning Profiles, which explains Apple’s signing process, the required certificates, how to obtain them, and why they are necessary. It also outlines the steps to satisfy Xcode’s build requirements.
Up next
- Part 2 – Certificates and Provisioning Profiles
Building on the previous post, this guide walks through the detailed process of handling Apple certificates, provisioning profiles, and signing requirements to successfully produce a signed iOS app, all without direct access to a Mac. - Part 3 - Putting on my pants
This final part explores cloud build platforms like Codemagic to complete the iOS build process. Learn how to work around the limitations of GitHub runners and reach a practical solution for building .NET MAUI apps in the cloud.