Deployment

Always publish the generated application project, not a Fabulous library. Set the application identifier, display version, numeric version, icons, signing identity, and target minimums in the project/platform manifests before producing store artifacts. Validate launch on a physical device or clean VM; compilation alone is not runtime validation.

.NET MAUI

The maintained HelloWorld project shows the shared resources and conditional Android, iOS, Mac Catalyst, and Windows items.

# Android APK/AAB; configure an Android signing keystore for distribution
dotnet publish MyApp.fsproj -c Release -f net10.0-android

# iOS and Mac Catalyst require macOS, Xcode, and Apple signing profiles
dotnet publish MyApp.fsproj -c Release -f net10.0-ios
dotnet publish MyApp.fsproj -c Release -f net10.0-maccatalyst

# Windows requires Windows, the MAUI workload, and a Windows TFM in the project
dotnet publish MyApp.fsproj -c Release -f net10.0-windows10.0.19041.0

Follow the platform signing and store steps in the .NET MAUI publishing guide. The repository's Windows support uses FSharp.Maui.WinUICompat; generated templates add it for the Windows target.

Avalonia

Desktop Avalonia publishes with a runtime identifier:

dotnet publish MyApp.fsproj -c Release -f net10.0 -r linux-x64 --self-contained true
dotnet publish MyApp.fsproj -c Release -f net10.0 -r osx-arm64 --self-contained true
dotnet publish MyApp.fsproj -c Release -f net10.0 -r win-x64 --self-contained true

Package the output using the operating system's normal installer format. For Avalonia Android and iOS, start from fabulous-avalonia-multi; build the platform host project on a machine with the corresponding workloads and signing tools. See the maintained multi-target sample hosts and Avalonia's deployment documentation.