Files
navi/packaging/msix/README.md
T
NavisandCursor e416327fbf Add Microsoft Store multi-arch MSIX packaging for EvilFox 4.2.8.1 (x64+Arm64).
Stage Partner Center folder with listing assets and Arm64 binary; MakeAppx not present so README includes pack/bundle commands.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-02 14:06:24 +03:00

83 lines
3.9 KiB
Markdown

# MSIX packaging for EvilFox (Microsoft Store)
EvilFox ships as a **full-trust Win32 + WebView2** app. Prefer **MSIX** over a PWA:
system proxy and protocol cores cannot be delivered as a Store PWA alone.
## Multi-arch (x64 + Arm64)
- Device family: `Windows.Desktop` (Win10 19041+ / Win11; `MaxVersionTested` 10.0.26100.0).
- Architectures: **x64** and **arm64** only (no x86 / AArch32).
- Pack script writes final artifacts to **`dist\microsoft-store\`**:
- `EvilFox_<ver>_x64.msix`
- `EvilFox_<ver>_arm64.msix`
- `EvilFox_<ver>.msixbundle` (when MakeAppx can bundle both)
- `README.txt` (Partner Center upload notes, RU+EN)
- `listing\` (store.csv + screenshots) — filled by the submission prep step
If MakeAppx is missing, the script still stages under `packaging/msix/_staging_<arch>` and prints exact `makeappx` commands in `README.txt`.
## Prerequisites
1. Build Windows x64: `build.bat``dist\navis-release\windows\EvilFox.exe`
2. Cross-build Arm64 (`CGO_ENABLED=0`). **Important:** `goversioninfo -64` produces an **amd64** `cmd/vpnapp/resource.syso` — temporarily rename it aside for the arm64 link, then restore:
```bat
set GOOS=windows
set GOARCH=arm64
set CGO_ENABLED=0
move cmd\vpnapp\resource.syso cmd\vpnapp\resource.syso.amd64.bak
go build -ldflags="-H windowsgui -s -w" -trimpath -o dist\navis-release\windows\arm64\EvilFox.exe ./cmd/vpnapp
move cmd\vpnapp\resource.syso.amd64.bak cmd\vpnapp\resource.syso
```
3. [Windows SDK](https://developer.microsoft.com/windows/downloads/windows-sdk/) with `MakeAppx.exe` (and `SignTool.exe` for sideload signing)
4. Optional: code-signing certificate whose **Subject CN** matches `Identity/@Publisher`
## Pack
From the repo root (PowerShell):
```powershell
.\scripts\pack-msix.ps1
.\scripts\pack-msix.ps1 -Arch x64 -Version 4.2.8.1
.\scripts\pack-msix.ps1 -Arch arm64 -ExePath dist\navis-release\windows\arm64\EvilFox.exe
.\scripts\pack-msix.ps1 -Arch all -OutDir dist\microsoft-store
.\scripts\pack-msix.ps1 -Publisher "CN=Your Store Publisher" -Name "EvilFox.EvilFox"
.\scripts\pack-msix.ps1 -CertPath ".\certs\evilfox-msix.pfx" -CertPassword "..."
```
Parameters: `-Arch x64|arm64|all`, `-OutDir`, `-Version`, `-Name`, `-Publisher`.
## Store submission
1. Create the app in [Partner Center](https://partner.microsoft.com/dashboard).
2. Copy **Package/Identity Name** and **Publisher** into `AppxManifest.xml` (or pass `-Name` / `-Publisher`).
3. Upload **`.msixbundle`** if available, else both **`.msix`** files. Partner Center can re-sign with the Store cert.
4. Device family: **Windows 10/11 Desktop** only. Arm64 covers Windows on ARM.
5. Declare **runFullTrust** and network capabilities; answer Store questions about VPN/proxy use.
6. Privacy policy URL on [evilfox.win](https://evilfox.win) required.
7. Sign in to Visual Studio / Partner Center with the **same Store developer account** if using VS packaging / Store association.
8. **Do not enable in-app self-update** for Store builds — EvilFox detects MSIX package identity and hides the updater (Store updates only).
Optional: place arch-specific `wintun.dll` under `assets/wintun/<arch>/`. Without it, packaging still succeeds; TUN/VPN mode needs the dll next to the exe (proxy mode works without it).
## Sideload test
```powershell
Add-AppxPackage -Path .\dist\microsoft-store\EvilFox_4.2.8.1_x64.msix
```
Unsigned packages need a trusted cert or developer mode / sideloading enabled.
## Remnawave notes
EvilFox can pull configs from a Remnawave panel:
1. Public subscription: paste `https://<panel>/api/sub/<shortUuid>` (or use panel URL + short UUID in the Remnawave block).
2. Optional API token (panel → API Tokens) enables authenticated lookups:
- `GET /api/subscriptions/by-short-uuid/{short}` / `…/raw`
- `GET /api/users/by-short-uuid/{short}` → `subscriptionUrl`
3. Optional Caddy `X-Api-Key` if the panel sits behind Caddy token auth.
Tokens are stored only in local `configs/config.json` (mode 0600) — never commit them.