-
Notifications
You must be signed in to change notification settings - Fork 831
docs(macos): how to publish fat app bundles #21744
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR documents new features for creating and managing fat (universal) macOS app bundles that support both Intel (x64) and Apple Silicon (arm64) architectures. It also removes redundant -p:SelfContained=true parameters from documentation examples, as app bundles are always self-contained by default starting with Uno 6.1.
- Adds documentation for creating fat app bundles using
UnoPublishFatBundletarget - Documents individual MSBuild tasks for re-signing, packaging, creating disk images, and notarizing app bundles
- Removes redundant
-p:SelfContained=trueparameters throughout both documentation files
Reviewed Changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 6 comments.
| File | Description |
|---|---|
| doc/articles/uno-publishing-desktop-macos.md | Adds fat app bundle creation section, removes redundant SelfContained property, adds troubleshooting for CodeResources warning |
| doc/articles/uno-publishing-desktop-macos-advanced.md | Adds platform removal optimization section, documents individual MSBuild tasks for app bundle management, removes redundant SelfContained property |
Comments suppressed due to low confidence (1)
doc/articles/uno-publishing-desktop-macos.md:1
- Grammatical error: 'with and additional' should be 'with an additional'.
---
| To create a fat app bundle that can run on both Intel and Apple Silicon Macs you simply need to use this command: | ||
|
|
||
| ```bash | ||
| dotnet build project.csproj -t:UnoPublishFatBundle -p:_IsPublishing=true -f:net9.0-desktop |
Copilot
AI
Nov 4, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Incorrect syntax for the -f parameter. It should use -f (single dash) not -f: (with colon).
| dotnet build project.csproj -t:UnoPublishFatBundle -p:_IsPublishing=true -f:net9.0-desktop | |
| dotnet build project.csproj -t:UnoPublishFatBundle -p:_IsPublishing=true -f net9.0-desktop |
| Finally, merge both arch-specific app bundles into a fat (multi-arch) app bundle. | ||
|
|
||
| ```bash | ||
| dotnet build project.csproj -t:UnoMergeBundles -p:_IsPublishing=true -restore:false -f:net9.0-desktop -p:UnoX64Bundle=bin/Release/net9.0-desktop/osx-x64/publish/UnoApp.app -p:UnoArm64Bundle=bin/Release/net9.0-desktop/osx-arm64/publish/UnoApp.app -p:UnoFatBundle=UnoApp.app |
Copilot
AI
Nov 4, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Inconsistent parameter syntax. The -restore:false and -f:net9.0-desktop parameters use colons, but standard .NET CLI syntax uses equals signs for properties (-restore:false should be --no-restore or -p:Restore=false) and single dashes without colons for framework (-f net9.0-desktop).
| Most changes done to an app bundle will break the digital signature, if present. If you need to customize the app bundle after it has been created, you will need to re-sign it using this command: | ||
|
|
||
| ```bash | ||
| dotnet build project.csproj -t:UnoSignAppBundle -p:_IsPublishing=true -restore:false -f:net9.0-desktop -p:AppBundlePath=UnoApp.app -p:CodesignKey={{identity}} |
Copilot
AI
Nov 4, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Inconsistent parameter syntax. The -restore:false and -f:net9.0-desktop parameters use colons, but standard .NET CLI syntax uses --no-restore for the restore option and -f net9.0-desktop (without colon) for the framework parameter.
| If you did not create a package (.pkg) while building the app bundle, you can create one using the following command: | ||
|
|
||
| ```bash | ||
| dotnet build project.csproj -t:UnoPackageAppBundle -p:_IsPublishing=true -restore:false -f:net9.0-desktop -p:AppBundlePath=UnoApp.app |
Copilot
AI
Nov 4, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Inconsistent parameter syntax. The -restore:false and -f:net9.0-desktop parameters use colons, but standard .NET CLI syntax uses --no-restore for the restore option and -f net9.0-desktop (without colon) for the framework parameter.
| If you did not create a disk image (.dmg) while building the app bundle, you can create one using the following command: | ||
|
|
||
| ```bash | ||
| dotnet build project.csproj -t:UnoCreateDiskImage -p:_IsPublishing=true -restore:false -f:net9.0-desktop -p:AppBundlePath=UnoApp.app |
Copilot
AI
Nov 4, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Inconsistent parameter syntax. The -restore:false and -f:net9.0-desktop parameters use colons, but standard .NET CLI syntax uses --no-restore for the restore option and -f net9.0-desktop (without colon) for the framework parameter.
| It's possible to notarize an app bundle, package or disk image after it has been created. This is useful for fat app bundles, which require an extra merge step, as well as allowing further customization (that would break a digital signature) after an app bundle is created. | ||
|
|
||
| ```bash | ||
| dotnet build project.csproj -t:UnoNotarize -p:_IsPublishing=true -restore:false -f:net9.0-desktop -p:InputFilePath={{file-to-notarize}} -p:PackageFormat={{file-format}} ... |
Copilot
AI
Nov 4, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Inconsistent parameter syntax. The -restore:false and -f:net9.0-desktop parameters use colons, but standard .NET CLI syntax uses --no-restore for the restore option and -f net9.0-desktop (without colon) for the framework parameter.
|
🤖 Your Docs stage site is ready! Visit it here: https://unodocsprstaging.z13.web.core.windows.net/pr-21744/docs/index.html |
Note This is a copy of (already reviewed)
#21262 which was not merged (even if Github says it was).
PR Type:
What is the current behavior? 🤔
Published app bundles (for macOS) are arch-specific, either
x64orarm64.What is the new behavior? 🚀
macOS' app bundles can be published as fat bundles by merging both
x64andarm64bundles.PR Checklist ✅
Please check if your PR fulfills the following requirements:
Screenshots Compare Test Runresults.Other information ℹ️
Before this PR is merged a new revision of uno.sdk.extras must be used for the Uno.Sdk, c.c. @agneszitte