diff --git a/.cspell.yaml b/.cspell.yaml index 92d98531..00b68b96 100644 --- a/.cspell.yaml +++ b/.cspell.yaml @@ -85,6 +85,7 @@ words: - mipmap - mobileprovision - mozallowfullscreen + - msix - notlike - nubank - opengraph diff --git a/src/content/docs/code-push/release.mdx b/src/content/docs/code-push/release.mdx index 2f7e777b..bf806b92 100644 --- a/src/content/docs/code-push/release.mdx +++ b/src/content/docs/code-push/release.mdx @@ -439,6 +439,11 @@ the `--flutter-version` flag. shorebird release windows --flutter-version %flutter_version% ``` +To package this build for the Microsoft Store, set `build_windows: false` in the +`msix_config` section of `pubspec.yaml` so `package:msix` does not rebuild with +stock Flutter. See +[Releasing for Windows](/flutter-concepts/releasing-flutter-apps/windows/). + @@ -620,3 +625,8 @@ as needed. title="Releasing for iOS" description="Learn how to configure Xcode signing and submit your release to the Apple App Store." /> + diff --git a/src/content/docs/flutter-concepts/releasing-flutter-apps/index.mdx b/src/content/docs/flutter-concepts/releasing-flutter-apps/index.mdx index 3df518b7..9c7d062e 100644 --- a/src/content/docs/flutter-concepts/releasing-flutter-apps/index.mdx +++ b/src/content/docs/flutter-concepts/releasing-flutter-apps/index.mdx @@ -393,3 +393,8 @@ artifacts: title="Releasing for iOS (Apple App Store)" description="Configure Xcode signing identities, Privacy Manifests, build IPAs, and distribute via TestFlight and App Review." /> + diff --git a/src/content/docs/flutter-concepts/releasing-flutter-apps/windows.mdx b/src/content/docs/flutter-concepts/releasing-flutter-apps/windows.mdx new file mode 100644 index 00000000..401db0d2 --- /dev/null +++ b/src/content/docs/flutter-concepts/releasing-flutter-apps/windows.mdx @@ -0,0 +1,75 @@ +--- +title: Releasing for Windows +description: + Build a Shorebird Windows release, then package an MSIX from that output + without letting package:msix rebuild the app with stock Flutter. +sidebar: + label: Windows (Microsoft Store) + order: 4 +--- + +To submit an app to the Microsoft Store, you need an **MSIX** package. +[`package:msix`](https://pub.dev/packages/msix) is a common way to produce that +file from a Flutter Windows build. By default it runs `flutter build windows` +with the Flutter SDK on your `PATH`, not Shorebird's Flutter. That rebuild is +not a Shorebird release, so patches will not apply. + +Build with Shorebird first, then tell `package:msix` to package the existing +output. + +## Step 1: Create a Shorebird Windows release + +```bash +shorebird release windows +``` + +The Windows executable is written to `build/windows/x64/runner/Release`. See +[Create a Release](/code-push/release/) for flavors, targets, and +`--flutter-version`. + +## Step 2: Disable the MSIX rebuild + +Add [`package:msix`](https://pub.dev/packages/msix) as a dev dependency if you +do not already use it: + +```bash +flutter pub add dev:msix +``` + +Then set `build_windows: false` in the `msix_config` section of `pubspec.yaml`: + +```yaml +msix_config: + display_name: My App + publisher_display_name: Example + publisher: CN=00000000-0000-0000-0000-000000000000 + identity_name: com.example.myapp + msix_version: 1.0.0.0 + store: true + build_windows: false +``` + +`build_windows: false` skips `flutter build windows` and packages the directory +Shorebird already produced. + +Copy `identity_name`, `publisher`, and `publisher_display_name` from Partner +Center (Product identity). With `store: true`, `package:msix` refuses to build +if any of them is missing. The fourth part of `msix_version` must be `0` for +Store submissions. + +## Step 3: Create the MSIX package + +```bash +dart run msix:create +``` + +Submit the generated `.msix` file to the Microsoft Store. + +:::caution + +After `shorebird release windows`, do not run `flutter build windows`, or +`msix:create` without `build_windows: false`. Those commands rebuild with +non-Shorebird Flutter and overwrite the build output, so the resulting MSIX will +not receive patches. + +:::