I've been struggling with trying to "release" this app. Here's a chronicle / brainstorm on next steps.
Plan A: Microsoft Store
My original plan was to distribute this through the Microsoft Store. However, it was rejected for certification for not offering "unique lasting value". I appealed, noting
In case it helps, there are several other apps in the store which are similar but inferior, e.g., "Black Screen for Windows" requires paying money to black out specific screens, or "Black Screen Software" has a settings dialog that looks like it's from 2004. I am hopeful my app can be judged at least good as those products, which have already been admitted.
but the Microsoft Store Certification Team said
Thank you for contacting us. The product does not currently contain enough content and functionality. Please include additional in-app features, content, or functionality to provide lasting value for your users. You may want to review the "Create amazing apps with staying power" section of our App Quality guidelines here: https://learn.microsoft.com/en-us/windows/apps/publish/store-app-quality.
Plan B: Signed MSIX Distribution via GitHub Releases + WinGet
My next plan was to auto-publish from GitHub Releases, and submit to the WinGet directory. I wanted to do this with a code signing certificate, so people would not get scary warnings trying to install. Sure, it might cost some money, but whatever, I can afford it.
I tried following the guide "Automatically Signing a Windows EXE with Azure Trusted Signing, dotnet sign, and GitHub Actions". However, the $10/month Azure signature service discussed there is only available to residents of the US or Canada. As a resident of Japan, this doesn't work.
(My US mailing address was not enough, as their identity verification service wanted some sort of utility bill or something as a proof of address.)
Plan C: Unsigned MSIX Distribution via GitHub Releases
This is what I'm working on now. After some stumbles, I seem to have gotten it working: https://github.com/domenic/display-blackout/releases
The resulting UX is terrible! Double-clicking does not work. You need to open a PowerShell terminal as administrator!
Future possibilities
Pay $$$ for a cert
ChatGPT and I are researching whether it's possible to get a signing certificate while a resident of Japan. It seems there are some options in the $200-$300/year range? But they might require me to have a registered company? (I only have a sole proprietorship.)
It sounds like this might be difficult to pull off in CI as well, as they want you to use a hardware token to sign things.
If I end up needing to register a company anyway, maybe registering a US LLC and then using the Azure $10/month certificates would be simplest.
(It's crazy that the corresponding certs for macOS/iOS are $99/year!)
Use a free-for-OSS cert
https://signpath.org/ seems somewhat promising? The only part of their application that gives me pause is
Describe how we can verify that your project is used and trusted. Provide sources and links including
- Media reports
- Blog articles
- Wikipedia articles in other languages (see below for English), Softpedia etc.
- Usage data such as number of downloads, forks or dependencies
- Analysis such as GitHub Insights
- Proof of Trademark ownership if you're using a trademarked name
If available, we will also look at the English Wikipedia article and OpenHub (see below), and community data such as GitHub Insights.
And I mean, I just released this app today, and am not planning a big marketing campaign. So I don't know how they'll look at my little hobby app.
Give up on MSIX
MSIX seems to be Microsoft's golden path for app distribution, but maybe going old-school is best. We could just create a no-install EXE, or a MSI installer.
If I understand correctly, these will give scary warnings if unsigned, but users are able to click through them. So at least you get double-click install instead of requiring an administrator command prompt.
Give up on this project and work on PowerToys instead
In microsoft/PowerToys#13035 (comment) I've been encouraged to contribute this project's functionality to the PowerToys project. I'm excited and will definitely be doing that! And indeed, once that's done, probably Display Blackout does not need to exist as a standalone project.
But, I was still hoping that this project would be a reasonable learning experience for how to create and distribute Windows utility apps. I have a few more ideas, and not all of them are going to fit into PowerToys! What am I going to do next time?