Skip to content

Commit a363be5

Browse files
author
JooHyung Park
committed
Add MSIX support for Microsoft Store distribution
Implement MSIX packaging alongside existing Squirrel installer for Windows. Key Changes: - Add @electron-forge/maker-msix dependency - Configure MSIX maker with proper manifest variables: * packageIdentity: 'TalkToFigmaDesktop' (no spaces, required) * packageDisplayName: 'TalkToFigma Desktop' (user-facing) * appDisplayName: 'TalkToFigma Desktop' (app name) * appExecutable: 'talktofigma-desktop.exe' (matches executableName) - Update GitHub Actions to build and upload MSIX packages - Add universal macOS build support (--arch=universal for arm64 + x64) - Update GitLab CI for universal builds Technical Details: - MSIX is experimental in Electron Forge v7.10+ - Both Squirrel (traditional) and MSIX (Store) installers are built - Package identity cannot contain spaces per MSIX schema - Executable name must match packagerConfig.executableName Artifacts Generated: - Windows: Setup.exe, .nupkg (Squirrel) + .msix (Store) - macOS: Universal DMG and ZIP (Intel + Apple Silicon)
1 parent 2315a04 commit a363be5

5 files changed

Lines changed: 103 additions & 7 deletions

File tree

.github/workflows/build.yml

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ jobs:
5757
run: npm ci --prefer-offline
5858

5959
- name: Build macOS app (unsigned)
60-
run: npm run make -- --platform=darwin
60+
run: npm run make -- --platform=darwin --arch=universal
6161
env:
6262
# Disable code signing by not providing credentials
6363
SIGNING_IDENTITY: ''
@@ -107,6 +107,10 @@ jobs:
107107

108108
- name: Build Windows app
109109
run: npm run make -- --platform=win32
110+
env:
111+
# MSIX maker will run without signing in test mode
112+
# For production, set WINDOWS_SIGN_CERTIFICATE and WINDOWS_SIGN_PASSWORD
113+
DEBUG: electron-windows-msix*
110114

111115
- name: List build artifacts
112116
shell: bash
@@ -120,7 +124,8 @@ jobs:
120124
name: windows-build
121125
path: |
122126
out/make/squirrel.windows/**/*.exe
123-
out/make/squirrel.windows/**/*.msi
127+
out/make/squirrel.windows/**/*.nupkg
128+
out/make/msix/**/*.msix
124129
if-no-files-found: warn
125130

126131
# Create GitHub Release
@@ -160,7 +165,8 @@ jobs:
160165
### 📦 Downloads
161166
- **macOS DMG**: Universal binary (Apple Silicon + Intel) - unsigned community build
162167
- **macOS ZIP**: Alternative distribution format
163-
- **Windows**: EXE installer
168+
- **Windows Squirrel**: Traditional EXE installer
169+
- **Windows MSIX**: Microsoft Store package (experimental)
164170
165171
### ⚠️ Note
166172
These are **unsigned community builds** for testing purposes.
@@ -177,4 +183,5 @@ jobs:
177183
artifacts/macos-dmg/*.dmg
178184
artifacts/macos-zip/**/*.zip
179185
artifacts/windows-build/**/*.exe
180-
artifacts/windows-build/**/*.msi
186+
artifacts/windows-build/**/*.nupkg
187+
artifacts/windows-build/**/*.msix

.gitlab-ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ build-macos:
8585
npm version $TAG_VERSION --no-git-tag-version --allow-same-version
8686
fi
8787
- npm ci --prefer-offline
88-
- npm run make -- --platform=darwin
88+
- npm run make -- --platform=darwin --arch=universal
8989
after_script:
9090
# Clean up temporary keychain
9191
- security delete-keychain ~/Library/Keychains/ci-build.keychain-db || true

forge.config.ts

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { ForgeConfig } from '@electron-forge/shared-types';
22
import { MakerSquirrel } from '@electron-forge/maker-squirrel';
3+
import { MakerMSIX } from '@electron-forge/maker-msix';
34
import { MakerZIP } from '@electron-forge/maker-zip';
45
import { MakerDMG } from '@electron-forge/maker-dmg';
56
import { VitePlugin } from '@electron-forge/plugin-vite';
@@ -26,8 +27,24 @@ const config: ForgeConfig = {
2627
format: 'ULFO',
2728
}, ['darwin']),
2829
new MakerZIP({}, ['darwin']),
29-
// Windows: Squirrel installer
30-
new MakerSquirrel({}),
30+
// Windows: MSIX (for Microsoft Store) and Squirrel (for direct download)
31+
new MakerMSIX({
32+
manifestVariables: {
33+
publisher: 'CN=GRABTAXI HOLDINGS PTE. LTD.',
34+
// packageIdentity: MSIX package identity (no spaces allowed)
35+
packageIdentity: 'TalkToFigmaDesktop',
36+
// packageDisplayName: User-facing package name (spaces allowed)
37+
packageDisplayName: 'TalkToFigma Desktop',
38+
// appDisplayName: User-facing app name (spaces allowed)
39+
appDisplayName: 'TalkToFigma Desktop',
40+
// appExecutable: Must match packagerConfig.executableName
41+
appExecutable: 'talktofigma-desktop.exe',
42+
},
43+
// Code signing will be configured in CI via windowsSignOptions
44+
}, ['win32']),
45+
new MakerSquirrel({
46+
// Squirrel for traditional installer
47+
}, ['win32']),
3148
],
3249
plugins: [
3350
new VitePlugin({

package-lock.json

Lines changed: 71 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
"@electron-forge/cli": "^7.10.2",
2828
"@electron-forge/maker-deb": "^7.10.2",
2929
"@electron-forge/maker-dmg": "^7.11.1",
30+
"@electron-forge/maker-msix": "^7.11.1",
3031
"@electron-forge/maker-rpm": "^7.10.2",
3132
"@electron-forge/maker-squirrel": "^7.10.2",
3233
"@electron-forge/maker-zip": "^7.10.2",

0 commit comments

Comments
 (0)