Add an MSIX packaging option for Windows
What is the problem or limitation you are having?
Windows appears to have added a new app distribution format - MSIX. This format appears to be preferred for some usages, so it should be supported by Briefcase.
Describe the solution you'd like
briefcase package windows -p msix should be a valid packaging command.
Describe alternatives you've considered
Do nothing, continue to support MSI and ZIP packaging.
Additional context
Our existing WIX tooling needs to be upgraded (see #1185), but WiX documentation is... not great.
The documentation of MSIX is... dense, and doesn't spend a lot of time explaining how MSIX fits into the existing MSI ecosystem. However, from an initial read, it appears that MSIX might (maybe?) be compatible with Windows App Store distribution.
Another advantage of MSIX appears to be that Microsoft itself is providing the tooling to build the installers, so we don't need to rely on a badly documented third-party tool to meet Windows packaging needs.
The first step to progress this will be to investigate the new format and tools and see what is involved in turning a "directory of content" into a signed MSIX installer.
This draft PEP discussing the Windows installer landscape for CPython gives some background that might be helpful in untangling the installer landscape. In particular, it seems to suggest that MSI is effectively a "dead end", and the focus is now on app-store distribution (using MSIX, which is apparently also referred to as APPX).
Just saw this and I will chime in a few points. Note that this info is from me checking things out here are there so It might wrong or outdated.
- I think MSIX and MSI are completely different. They are not built on the same codebase.
- WIX/MSI is definitly not dead. It is being updated regularly and still widely used. I think the PEP link above mention that the version they are using is not being updated (similar to briefcase that is stuck at v3).
- WIX allows the cretion of MSIX through an extension. But if one is only targetting MSIX, it is probably best to cut the middle man and use MSIX tools directly.
Probably, the most important part and annoying one: MSIX have to be digitially signed and they cannot be installed without being trusted. This means that for self-signed packages (i.e., free certificate), the user will have to download the certificate manually and trust it before initiating the installation (https://github.com/microsoft/msix-packaging/issues/332).
That being said, I think MSIX removes a lot of the limitation related to size and number of files limit so it is better options for that. MSIX/WIX did some work in latest versions too.
Will also second that to say MSI/Wix is certainly not dead and is widely used and developed for.
While publishing it to the Microsoft App store forces MSIX mechanism, it does allow for an existing MSI to be wrapped with the MSIX and then sent to the store.
I use this workflow to send my beeware app MSI to the Microsoft Store:
- Build app using beeware to get the MSI
- Run
msix Packaging Tool. This microsoft app is separately installed and executed. Its got a GUI + can be run from command line/template file. This will wrap the MSI into an MSIx, generally work well and can be almost fully automated using scripting. (Almost because, the official microsoft tool produces a msix file which gets rejected by their own app store, unless a few lines are corrected) - App Signing for store: If the one wants to publish the app into the Microsoft store, the unsigned MSIX file can be uploaded using the developer console. The release process signs the app for you - for free and publishes it
- The developer can also self sign the app themselves or use a signing service, but this is a total pain.