diff --git a/.gitignore b/.gitignore index 89ae641..d03cfc1 100644 --- a/.gitignore +++ b/.gitignore @@ -25,8 +25,13 @@ EvilFox.exe.bak # MSIX staging / local packages packaging/msix/_staging/ +packaging/msix/_staging_*/ packaging/msix/Assets/ *.msix +*.msixbundle +dist/microsoft-store/*.msix +dist/microsoft-store/*.msixbundle +dist/microsoft-store/_bundle_input/ # Android android/.gradle/ diff --git a/dist/microsoft-store/README.txt b/dist/microsoft-store/README.txt new file mode 100644 index 0000000..bced188 --- /dev/null +++ b/dist/microsoft-store/README.txt @@ -0,0 +1,60 @@ +EvilFox Microsoft Store package folder +Version: 4.2.8.1 +Generated: 2026-08-02 14:05:35 + +=== Partner Center upload (EN) === +1. Sign in to Partner Center with the same Microsoft Store developer account + you use for Visual Studio packaging / Store association (same tenant). +2. Open the EvilFox product -> Packages (Windows 10 / 11). +3. Prefer uploading EvilFox_4.2.8.1.msixbundle if present. + Otherwise upload each EvilFox_4.2.8.1_.msix (x64 + arm64). +4. Device family: check Windows 10 / 11 Desktop ONLY + (do NOT select Xbox, HoloLens, Surface Hub, IoT, Team, etc.). +5. Arm64 package covers Windows on ARM. Do not ship x86 / AArch32; + Microsoft is dropping AArch32 on future WoA. +6. Before final Store signing, replace Identity Name/Publisher with the + exact values from Partner Center (or let Partner Center re-sign). +7. Privacy policy URL on https://evilfox.win is required for Store listing. + +=== Partner Center (RU) === +1. Войдите в Partner Center тем же аккаунтом разработчика Store, + что и в Visual Studio (ассоциация приложения / упаковка). +2. Загрузите EvilFox_4.2.8.1.msixbundle, если есть; иначе оба .msix + (x64 и arm64). +3. Семейство устройств: только Windows 10/11 Desktop + (без Xbox / HoloLens / IoT и т.п.). +4. Arm64 = Windows on ARM; x86/AArch32 не публикуем. +5. Name/Publisher в манифесте должны совпадать с Partner Center + (или Store переподпишет пакет). +6. Нужен URL политики конфиденциальности на evilfox.win. + +=== Artifacts === +Bundle: (not created) +Staging x64: D:\vpn navi\packaging\msix\_staging_x64 +Staging arm64: D:\vpn navi\packaging\msix\_staging_arm64 + +=== MakeAppx === +MakeAppx.exe NOT FOUND on this machine. +Install Windows 10/11 SDK, then run: + makeappx pack /d "D:\vpn navi\packaging\msix\_staging_x64" /p "D:\vpn navi\dist\microsoft-store\EvilFox_4.2.8.1_x64.msix" /o + makeappx pack /d "D:\vpn navi\packaging\msix\_staging_arm64" /p "D:\vpn navi\dist\microsoft-store\EvilFox_4.2.8.1_arm64.msix" /o + makeappx bundle /d "D:\vpn navi\dist\microsoft-store\_bundle_input" /p "D:\vpn navi\dist\microsoft-store\EvilFox_4.2.8.1.msixbundle" /o + (copy both .msix into _bundle_input first) + +=== wintun.dll === +wintun.dll was NOT found under assets/ or dist/. Packaging continued. +VPN (TUN) mode needs wintun.dll next to EvilFox.exe. +Store users can still use proxy mode without it. +Add arch-specific wintun.dll later under assets/wintun// if needed. + +=== Listing assets === +listing\store.csv - Partner Center bulk listing fields +listing\screen\ - screenshots for Store listing + +=== Arm64 build note === +Cross-build (CGO_ENABLED=0): + set GOOS=windows + set GOARCH=arm64 + rem temporarily move cmd\vpnapp\resource.syso (amd64 from goversioninfo -64) + go build -ldflags="-H windowsgui -s -w" -trimpath -o dist\navis-release\windows\arm64\EvilFox.exe ./cmd/vpnapp + rem restore resource.syso diff --git a/dist/microsoft-store/listing/screen/1.ru.png b/dist/microsoft-store/listing/screen/1.ru.png new file mode 100644 index 0000000..2837f8b Binary files /dev/null and b/dist/microsoft-store/listing/screen/1.ru.png differ diff --git a/dist/microsoft-store/listing/screen/10.en.png b/dist/microsoft-store/listing/screen/10.en.png new file mode 100644 index 0000000..633fe14 Binary files /dev/null and b/dist/microsoft-store/listing/screen/10.en.png differ diff --git a/dist/microsoft-store/listing/screen/11.en.png b/dist/microsoft-store/listing/screen/11.en.png new file mode 100644 index 0000000..52ff7b3 Binary files /dev/null and b/dist/microsoft-store/listing/screen/11.en.png differ diff --git a/dist/microsoft-store/listing/screen/12dark.png b/dist/microsoft-store/listing/screen/12dark.png new file mode 100644 index 0000000..93d80ff Binary files /dev/null and b/dist/microsoft-store/listing/screen/12dark.png differ diff --git a/dist/microsoft-store/listing/screen/13dark.png b/dist/microsoft-store/listing/screen/13dark.png new file mode 100644 index 0000000..c603747 Binary files /dev/null and b/dist/microsoft-store/listing/screen/13dark.png differ diff --git a/dist/microsoft-store/listing/screen/14dark.png b/dist/microsoft-store/listing/screen/14dark.png new file mode 100644 index 0000000..69eac6c Binary files /dev/null and b/dist/microsoft-store/listing/screen/14dark.png differ diff --git a/dist/microsoft-store/listing/screen/15dark.png b/dist/microsoft-store/listing/screen/15dark.png new file mode 100644 index 0000000..ed1df84 Binary files /dev/null and b/dist/microsoft-store/listing/screen/15dark.png differ diff --git a/dist/microsoft-store/listing/screen/16dark.png b/dist/microsoft-store/listing/screen/16dark.png new file mode 100644 index 0000000..c123dc3 Binary files /dev/null and b/dist/microsoft-store/listing/screen/16dark.png differ diff --git a/dist/microsoft-store/listing/screen/2.ru.png b/dist/microsoft-store/listing/screen/2.ru.png new file mode 100644 index 0000000..19521fd Binary files /dev/null and b/dist/microsoft-store/listing/screen/2.ru.png differ diff --git a/dist/microsoft-store/listing/screen/3.ru.png b/dist/microsoft-store/listing/screen/3.ru.png new file mode 100644 index 0000000..b7243f6 Binary files /dev/null and b/dist/microsoft-store/listing/screen/3.ru.png differ diff --git a/dist/microsoft-store/listing/screen/4.ru.png b/dist/microsoft-store/listing/screen/4.ru.png new file mode 100644 index 0000000..afcd2ea Binary files /dev/null and b/dist/microsoft-store/listing/screen/4.ru.png differ diff --git a/dist/microsoft-store/listing/screen/5.ru.png b/dist/microsoft-store/listing/screen/5.ru.png new file mode 100644 index 0000000..6dcca79 Binary files /dev/null and b/dist/microsoft-store/listing/screen/5.ru.png differ diff --git a/dist/microsoft-store/listing/screen/6.ru.png b/dist/microsoft-store/listing/screen/6.ru.png new file mode 100644 index 0000000..37c9746 Binary files /dev/null and b/dist/microsoft-store/listing/screen/6.ru.png differ diff --git a/dist/microsoft-store/listing/screen/7.en.png b/dist/microsoft-store/listing/screen/7.en.png new file mode 100644 index 0000000..57deaf8 Binary files /dev/null and b/dist/microsoft-store/listing/screen/7.en.png differ diff --git a/dist/microsoft-store/listing/screen/8.en.png b/dist/microsoft-store/listing/screen/8.en.png new file mode 100644 index 0000000..ef6bef5 Binary files /dev/null and b/dist/microsoft-store/listing/screen/8.en.png differ diff --git a/dist/microsoft-store/listing/screen/9.png b/dist/microsoft-store/listing/screen/9.png new file mode 100644 index 0000000..139bd4f Binary files /dev/null and b/dist/microsoft-store/listing/screen/9.png differ diff --git a/dist/microsoft-store/listing/store.csv b/dist/microsoft-store/listing/store.csv new file mode 100644 index 0000000..0ffd9a0 --- /dev/null +++ b/dist/microsoft-store/listing/store.csv @@ -0,0 +1,488 @@ +Field,ID,Type (Тип),default,en +Description,2,Текст,"EvilFox — приложение для безопасного доступа в интернет на Windows. + +Защитите данные в публичных Wi‑Fi сетях: EvilFox шифрует трафик, скрывает ваш реальный IP-адрес и помогает предотвратить утечки DNS. Современный интерфейс на русском и английском, светлая и тёмная темы, удобный выбор серверов и понятный статус подключения. + +Возможности: +• Шифрование трафика с поддержкой современных протоколов +• Режим прокси и полный режим защиты (TUN) для всего трафика приложений +• Защита от утечек (Kill Switch) при обрыве соединения +• Автовыбор сервера с наименьшим пингом +• Список серверов с флагами стран и группировкой по хосту +• Добавление собственной конфигурации по URL +• Мониторинг использования трафика и статистика сессий +• Интерфейс на русском и английском языках + +EvilFox подходит для повседневной работы, путешествий и защиты приватности. Конфигурацию подключения вы добавляете самостоятельно; покупки внутри приложения не требуются. + +Сайт: https://evilfox.win/ +Поддержка: https://t.me/evilfox100Bot","EvilFox is a Windows app for private, secure internet access. + +Protect your data on public Wi‑Fi: EvilFox encrypts your traffic, hides your real IP address, and helps prevent DNS leaks. A modern interface in English and Russian, light and dark themes, an easy server list, and a clear connection status. + +Features: +• Traffic encryption with modern protocol support +• Proxy mode and full protection mode (TUN) for all app traffic +• Leak protection (Kill Switch) if the connection drops +• Auto-select the server with the lowest ping +• Server list with country flags and host grouping +• Add your own configuration via URL +• Traffic usage monitoring and session stats +• English and Russian interface + +EvilFox is built for everyday browsing, travel, and privacy. You add your own connection configuration; no in-app purchases are required. + +Website: https://evilfox.win/ +Support: https://t.me/evilfox100Bot" +ReleaseNotes,3,Текст,"Обновление 4.2: улучшенный интерфейс для Microsoft Store, переключатель языка RU/EN, светлая тема по умолчанию, группировка серверов по IP с отображением доступных протоколов, исправления переключателей темы и языка, реальные флаги стран (SVG), Kill Switch и статистика.","Version 4.2: Microsoft Store–ready UI polish, RU/EN language switch, light theme by default, servers grouped by IP with available protocols, theme/language toggle fixes, real country flags (SVG), Kill Switch, and usage statistics." +Title,4,Текст,EvilFox,EvilFox +ShortTitle,5,Текст,EvilFox,EvilFox +SortTitle,6,Текст,EvilFox,EvilFox +VoiceTitle,7,Текст,Evil Fox,Evil Fox +ShortDescription,8,Текст,"Безопасный доступ в интернет: шифрование трафика, скрытие IP, защита от утечек DNS. Русский и английский. Современные протоколы, Kill Switch, удобный выбор серверов.","Secure internet access: encrypt traffic, hide your IP, help prevent DNS leaks. English & Russian. Modern protocols, Kill Switch, easy server selection." +DevStudio,9,Текст,EvilFox,EvilFox +CopyrightTrademarkInformation,12,Текст,© EvilFox. All rights reserved. EvilFox and the EvilFox logo are trademarks of their respective owners.,© EvilFox. All rights reserved. EvilFox and the EvilFox logo are trademarks of their respective owners. +AdditionalLicenseTerms,13,Текст,Proprietary software. By installing EvilFox you agree to use the application in accordance with applicable laws. The app provides a client for encrypted network connections; server configurations are supplied by the user. See https://evilfox.win/ for support and terms.,Proprietary software. By installing EvilFox you agree to use the application in accordance with applicable laws. The app provides a client for encrypted network connections; server configurations are supplied by the user. See https://evilfox.win/ for support and terms. +DesktopScreenshot1,100,Относительный путь (или URL-адрес файла в Центре партнеров),screen/1.ru.png,screen/7.en.png +DesktopScreenshot2,101,Относительный путь (или URL-адрес файла в Центре партнеров),screen/2.ru.png,screen/8.en.png +DesktopScreenshot3,102,Относительный путь (или URL-адрес файла в Центре партнеров),screen/3.ru.png,screen/9.png +DesktopScreenshot4,103,Относительный путь (или URL-адрес файла в Центре партнеров),screen/4.ru.png,screen/10.en.png +DesktopScreenshot5,104,Относительный путь (или URL-адрес файла в Центре партнеров),screen/5.ru.png,screen/11.en.png +DesktopScreenshot6,105,Относительный путь (или URL-адрес файла в Центре партнеров),screen/6.ru.png,screen/12dark.png +DesktopScreenshot7,106,Относительный путь (или URL-адрес файла в Центре партнеров),screen/12dark.png,screen/13dark.png +DesktopScreenshot8,107,Относительный путь (или URL-адрес файла в Центре партнеров),screen/13dark.png,screen/14dark.png +DesktopScreenshot9,108,Относительный путь (или URL-адрес файла в Центре партнеров),screen/14dark.png,screen/15dark.png +DesktopScreenshot10,109,Относительный путь (или URL-адрес файла в Центре партнеров),screen/15dark.png,screen/16dark.png +DesktopScreenshot11,110,Относительный путь (или URL-адрес файла в Центре партнеров),screen/16dark.png, +DesktopScreenshot12,111,Относительный путь (или URL-адрес файла в Центре партнеров),screen/9.png, +DesktopScreenshot13,112,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot14,113,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot15,114,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot16,115,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot17,116,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot18,117,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot19,118,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot20,119,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot21,120,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot22,121,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot23,122,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot24,123,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot25,124,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot26,125,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot27,126,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot28,127,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot29,128,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot30,129,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshotCaption1,150,Текст,Главный экран: подключение и статус защиты,Home: connect and protection status +DesktopScreenshotCaption2,151,Текст,Список серверов с флагами и пингом,Server list with flags and ping +DesktopScreenshotCaption3,152,Текст,"Настройки: тема, язык, Kill Switch",App overview +DesktopScreenshotCaption4,153,Текст,Статистика использования,"Settings: theme, language, Kill Switch" +DesktopScreenshotCaption5,154,Текст,Помощь и полезные ссылки,Statistics and help +DesktopScreenshotCaption6,155,Текст,Добавление конфигурации,Dark theme: home +DesktopScreenshotCaption7,156,Текст,Тёмная тема: главный экран,Dark theme: servers +DesktopScreenshotCaption8,157,Текст,Тёмная тема: серверы,Dark theme: settings +DesktopScreenshotCaption9,158,Текст,Тёмная тема: настройки,Dark theme: statistics +DesktopScreenshotCaption10,159,Текст,Тёмная тема: статистика,Dark theme: help +DesktopScreenshotCaption11,160,Текст,Тёмная тема: помощь,Dark theme: help +DesktopScreenshotCaption12,161,Текст,Общий вид приложения,App overview +DesktopScreenshotCaption13,162,Текст,, +DesktopScreenshotCaption14,163,Текст,, +DesktopScreenshotCaption15,164,Текст,, +DesktopScreenshotCaption16,165,Текст,, +DesktopScreenshotCaption17,166,Текст,, +DesktopScreenshotCaption18,167,Текст,, +DesktopScreenshotCaption19,168,Текст,, +DesktopScreenshotCaption20,169,Текст,, +DesktopScreenshotCaption21,170,Текст,, +DesktopScreenshotCaption22,171,Текст,, +DesktopScreenshotCaption23,172,Текст,, +DesktopScreenshotCaption24,173,Текст,, +DesktopScreenshotCaption25,174,Текст,, +DesktopScreenshotCaption26,175,Текст,, +DesktopScreenshotCaption27,176,Текст,, +DesktopScreenshotCaption28,177,Текст,, +DesktopScreenshotCaption29,178,Текст,, +DesktopScreenshotCaption30,179,Текст,, +MobileScreenshot1,200,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot2,201,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot3,202,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot4,203,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot5,204,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot6,205,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot7,206,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot8,207,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot9,208,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot10,209,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot11,210,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot12,211,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot13,212,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot14,213,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot15,214,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot16,215,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot17,216,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot18,217,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot19,218,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot20,219,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot21,220,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot22,221,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot23,222,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot24,223,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot25,224,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot26,225,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot27,226,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot28,227,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot29,228,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot30,229,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshotCaption1,250,Текст,, +MobileScreenshotCaption2,251,Текст,, +MobileScreenshotCaption3,252,Текст,, +MobileScreenshotCaption4,253,Текст,, +MobileScreenshotCaption5,254,Текст,, +MobileScreenshotCaption6,255,Текст,, +MobileScreenshotCaption7,256,Текст,, +MobileScreenshotCaption8,257,Текст,, +MobileScreenshotCaption9,258,Текст,, +MobileScreenshotCaption10,259,Текст,, +MobileScreenshotCaption11,260,Текст,, +MobileScreenshotCaption12,261,Текст,, +MobileScreenshotCaption13,262,Текст,, +MobileScreenshotCaption14,263,Текст,, +MobileScreenshotCaption15,264,Текст,, +MobileScreenshotCaption16,265,Текст,, +MobileScreenshotCaption17,266,Текст,, +MobileScreenshotCaption18,267,Текст,, +MobileScreenshotCaption19,268,Текст,, +MobileScreenshotCaption20,269,Текст,, +MobileScreenshotCaption21,270,Текст,, +MobileScreenshotCaption22,271,Текст,, +MobileScreenshotCaption23,272,Текст,, +MobileScreenshotCaption24,273,Текст,, +MobileScreenshotCaption25,274,Текст,, +MobileScreenshotCaption26,275,Текст,, +MobileScreenshotCaption27,276,Текст,, +MobileScreenshotCaption28,277,Текст,, +MobileScreenshotCaption29,278,Текст,, +MobileScreenshotCaption30,279,Текст,, +XboxScreenshot1,300,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot2,301,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot3,302,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot4,303,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot5,304,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot6,305,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot7,306,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot8,307,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot9,308,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot10,309,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot11,310,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot12,311,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot13,312,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot14,313,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot15,314,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot16,315,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot17,316,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot18,317,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot19,318,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot20,319,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot21,320,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot22,321,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot23,322,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot24,323,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot25,324,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot26,325,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot27,326,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot28,327,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot29,328,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot30,329,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshotCaption1,350,Текст,, +XboxScreenshotCaption2,351,Текст,, +XboxScreenshotCaption3,352,Текст,, +XboxScreenshotCaption4,353,Текст,, +XboxScreenshotCaption5,354,Текст,, +XboxScreenshotCaption6,355,Текст,, +XboxScreenshotCaption7,356,Текст,, +XboxScreenshotCaption8,357,Текст,, +XboxScreenshotCaption9,358,Текст,, +XboxScreenshotCaption10,359,Текст,, +XboxScreenshotCaption11,360,Текст,, +XboxScreenshotCaption12,361,Текст,, +XboxScreenshotCaption13,362,Текст,, +XboxScreenshotCaption14,363,Текст,, +XboxScreenshotCaption15,364,Текст,, +XboxScreenshotCaption16,365,Текст,, +XboxScreenshotCaption17,366,Текст,, +XboxScreenshotCaption18,367,Текст,, +XboxScreenshotCaption19,368,Текст,, +XboxScreenshotCaption20,369,Текст,, +XboxScreenshotCaption21,370,Текст,, +XboxScreenshotCaption22,371,Текст,, +XboxScreenshotCaption23,372,Текст,, +XboxScreenshotCaption24,373,Текст,, +XboxScreenshotCaption25,374,Текст,, +XboxScreenshotCaption26,375,Текст,, +XboxScreenshotCaption27,376,Текст,, +XboxScreenshotCaption28,377,Текст,, +XboxScreenshotCaption29,378,Текст,, +XboxScreenshotCaption30,379,Текст,, +HolographicScreenshot1,400,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot2,401,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot3,402,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot4,403,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot5,404,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot6,405,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot7,406,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot8,407,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot9,408,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot10,409,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot11,410,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot12,411,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot13,412,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot14,413,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot15,414,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot16,415,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot17,416,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot18,417,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot19,418,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot20,419,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot21,420,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot22,421,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot23,422,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot24,423,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot25,424,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot26,425,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot27,426,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot28,427,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot29,428,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot30,429,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshotCaption1,450,Текст,, +HolographicScreenshotCaption2,451,Текст,, +HolographicScreenshotCaption3,452,Текст,, +HolographicScreenshotCaption4,453,Текст,, +HolographicScreenshotCaption5,454,Текст,, +HolographicScreenshotCaption6,455,Текст,, +HolographicScreenshotCaption7,456,Текст,, +HolographicScreenshotCaption8,457,Текст,, +HolographicScreenshotCaption9,458,Текст,, +HolographicScreenshotCaption10,459,Текст,, +HolographicScreenshotCaption11,460,Текст,, +HolographicScreenshotCaption12,461,Текст,, +HolographicScreenshotCaption13,462,Текст,, +HolographicScreenshotCaption14,463,Текст,, +HolographicScreenshotCaption15,464,Текст,, +HolographicScreenshotCaption16,465,Текст,, +HolographicScreenshotCaption17,466,Текст,, +HolographicScreenshotCaption18,467,Текст,, +HolographicScreenshotCaption19,468,Текст,, +HolographicScreenshotCaption20,469,Текст,, +HolographicScreenshotCaption21,470,Текст,, +HolographicScreenshotCaption22,471,Текст,, +HolographicScreenshotCaption23,472,Текст,, +HolographicScreenshotCaption24,473,Текст,, +HolographicScreenshotCaption25,474,Текст,, +HolographicScreenshotCaption26,475,Текст,, +HolographicScreenshotCaption27,476,Текст,, +HolographicScreenshotCaption28,477,Текст,, +HolographicScreenshotCaption29,478,Текст,, +HolographicScreenshotCaption30,479,Текст,, +SurfaceHubScreenshot11,510,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot12,511,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot13,512,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot14,513,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot15,514,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot16,515,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot17,516,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot18,517,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot19,518,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot20,519,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot21,520,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot22,521,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot23,522,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot24,523,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot25,524,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot26,525,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot27,526,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot28,527,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot29,528,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot30,529,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshotCaption11,560,Текст,, +SurfaceHubScreenshotCaption12,561,Текст,, +SurfaceHubScreenshotCaption13,562,Текст,, +SurfaceHubScreenshotCaption14,563,Текст,, +SurfaceHubScreenshotCaption15,564,Текст,, +SurfaceHubScreenshotCaption16,565,Текст,, +SurfaceHubScreenshotCaption17,566,Текст,, +SurfaceHubScreenshotCaption18,567,Текст,, +SurfaceHubScreenshotCaption19,568,Текст,, +SurfaceHubScreenshotCaption20,569,Текст,, +SurfaceHubScreenshotCaption21,570,Текст,, +SurfaceHubScreenshotCaption22,571,Текст,, +SurfaceHubScreenshotCaption23,572,Текст,, +SurfaceHubScreenshotCaption24,573,Текст,, +SurfaceHubScreenshotCaption25,574,Текст,, +SurfaceHubScreenshotCaption26,575,Текст,, +SurfaceHubScreenshotCaption27,576,Текст,, +SurfaceHubScreenshotCaption28,577,Текст,, +SurfaceHubScreenshotCaption29,578,Текст,, +SurfaceHubScreenshotCaption30,579,Текст,, +StoreLogo720x1080,600,Относительный путь (или URL-адрес файла в Центре партнеров),, +StoreLogo1080x1080,601,Относительный путь (или URL-адрес файла в Центре партнеров),, +StoreLogo300x300,602,Относительный путь (или URL-адрес файла в Центре партнеров),, +OverrideLogosForWin10,603,True/False,,False +StoreLogoOverride150x150,604,Относительный путь (или URL-адрес файла в Центре партнеров),, +StoreLogoOverride71x71,605,Относительный путь (или URL-адрес файла в Центре партнеров),, +PromoImage1920x1080,606,Относительный путь (или URL-адрес файла в Центре партнеров),, +PromoImage2400x1200,607,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxBrandedKeyArt584x800,608,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxTitledHero1920x1080,609,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxFeaturedPromo1080x1080,610,Относительный путь (или URL-адрес файла в Центре партнеров),, +OptionalPromo358x358,611,Относительный путь (или URL-адрес файла в Центре партнеров),, +OptionalPromo1000x800,612,Относительный путь (или URL-адрес файла в Центре партнеров),, +OptionalPromo414x180,613,Относительный путь (или URL-адрес файла в Центре партнеров),, +Feature1,700,Текст,Шифрование трафика и скрытие IP-адреса,Encrypt traffic and hide your IP address +Feature2,701,Текст,Режим прокси и полный режим защиты (TUN),Proxy mode and full protection mode (TUN) +Feature3,702,Текст,Kill Switch — блокировка трафика при обрыве VPN,Kill Switch blocks traffic if VPN drops +Feature4,703,Текст,Автовыбор сервера с лучшим пингом,Auto-select the lowest-ping server +Feature5,704,Текст,Серверы с флагами стран и группировкой протоколов,Servers with country flags and protocol grouping +Feature6,705,Текст,Добавление конфигурации по URL,Add configuration via URL +Feature7,706,Текст,Статистика трафика и сессий,Traffic and session statistics +Feature8,707,Текст,Интерфейс на русском и английском,English and Russian interface +Feature9,708,Текст,Светлая и тёмная темы оформления,Light and dark themes +Feature10,709,Текст,Защита от утечек DNS,DNS leak protection +Feature11,710,Текст,, +Feature12,711,Текст,, +Feature13,712,Текст,, +Feature14,713,Текст,, +Feature15,714,Текст,, +Feature16,715,Текст,, +Feature17,716,Текст,, +Feature18,717,Текст,, +Feature19,718,Текст,, +Feature20,719,Текст,, +MinimumHardwareReq1,800,Текст,Windows 10 version 1809 or later (x64),Windows 10 version 1809 or later (x64) +MinimumHardwareReq2,801,Текст,Internet connection,Internet connection +MinimumHardwareReq3,802,Текст,100 MB free disk space,100 MB free disk space +MinimumHardwareReq4,803,Текст,, +MinimumHardwareReq5,804,Текст,, +MinimumHardwareReq6,805,Текст,, +MinimumHardwareReq7,806,Текст,, +MinimumHardwareReq8,807,Текст,, +MinimumHardwareReq9,808,Текст,, +MinimumHardwareReq10,809,Текст,, +MinimumHardwareReq11,810,Текст,, +RecommendedHardwareReq1,850,Текст,Windows 11 (x64),Windows 11 (x64) +RecommendedHardwareReq2,851,Текст,Stable broadband connection,Stable broadband connection +RecommendedHardwareReq3,852,Текст,, +RecommendedHardwareReq4,853,Текст,, +RecommendedHardwareReq5,854,Текст,, +RecommendedHardwareReq6,855,Текст,, +RecommendedHardwareReq7,856,Текст,, +RecommendedHardwareReq8,857,Текст,, +RecommendedHardwareReq9,858,Текст,, +RecommendedHardwareReq10,859,Текст,, +RecommendedHardwareReq11,860,Текст,, +SearchTerm1,900,Текст,VPN,VPN +SearchTerm2,901,Текст,privacy,privacy +SearchTerm3,902,Текст,secure internet,secure internet +SearchTerm4,903,Текст,encrypt traffic,encrypt traffic +SearchTerm5,904,Текст,EvilFox,EvilFox +SearchTerm6,905,Текст,proxy client,proxy client +SearchTerm7,906,Текст,kill switch,kill switch +TrailerToPlayAtTopOfListing,999,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer1,1000,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer2,1001,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer3,1002,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer4,1003,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer5,1004,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer6,1005,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer7,1006,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer8,1007,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer9,1008,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer10,1009,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer11,1010,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer12,1011,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer13,1012,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer14,1013,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer15,1014,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerTitle1,1020,Текст,, +TrailerTitle2,1021,Текст,, +TrailerTitle3,1022,Текст,, +TrailerTitle4,1023,Текст,, +TrailerTitle5,1024,Текст,, +TrailerTitle6,1025,Текст,, +TrailerTitle7,1026,Текст,, +TrailerTitle8,1027,Текст,, +TrailerTitle9,1028,Текст,, +TrailerTitle10,1029,Текст,, +TrailerTitle11,1030,Текст,, +TrailerTitle12,1031,Текст,, +TrailerTitle13,1032,Текст,, +TrailerTitle14,1033,Текст,, +TrailerTitle15,1034,Текст,, +TrailerThumbnail1,1040,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail2,1041,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail3,1042,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail4,1043,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail5,1044,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail6,1045,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail7,1046,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail8,1047,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail9,1048,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail10,1049,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail11,1050,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail12,1051,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail13,1052,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail14,1053,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail15,1054,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption1,1055,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption2,1056,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption3,1057,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption4,1058,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption5,1059,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption6,1060,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption7,1061,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption8,1062,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption9,1063,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption10,1064,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption11,1065,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption12,1066,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption13,1067,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption14,1068,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption15,1069,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription1,1070,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription2,1071,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription3,1072,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription4,1073,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription5,1074,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription6,1075,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription7,1076,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription8,1077,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription9,1078,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription10,1079,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription11,1080,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription12,1081,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription13,1082,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription14,1083,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription15,1084,Относительный путь (или URL-адрес файла в Центре партнеров),, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, diff --git a/dist/navis-release/windows/arm64/EvilFox.exe b/dist/navis-release/windows/arm64/EvilFox.exe new file mode 100644 index 0000000..df49fda Binary files /dev/null and b/dist/navis-release/windows/arm64/EvilFox.exe differ diff --git a/packaging/msix/AppxManifest.xml b/packaging/msix/AppxManifest.xml index a9258c7..a590afe 100644 --- a/packaging/msix/AppxManifest.xml +++ b/packaging/msix/AppxManifest.xml @@ -30,6 +30,7 @@ xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" IgnorableNamespaces="uap rescap"> + _x64.msix` + - `EvilFox__arm64.msix` + - `EvilFox_.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_` and prints exact `makeappx` commands in `README.txt`. + ## Prerequisites -1. Build Windows binaries: `build.bat` → `dist\navis-release\windows\Navis.exe` -2. [Windows SDK](https://developer.microsoft.com/windows/downloads/windows-sdk/) with `MakeAppx.exe` (and `SignTool.exe` for sideload signing) -3. Optional: a code-signing certificate whose **Subject CN** matches `Identity/@Publisher` in `AppxManifest.xml` +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 @@ -15,38 +39,39 @@ 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 "..." ``` -Options: - -```powershell -.\scripts\pack-msix.ps1 -ExePath "dist\navis-release\windows\Navis.exe" -Version "2.9.0.1" -.\scripts\pack-msix.ps1 -Publisher "CN=Your Store Publisher" -Name "EvilFox.Navis" -.\scripts\pack-msix.ps1 -CertPath ".\certs\navis-msix.pfx" -CertPassword "..." -``` - -Output: `dist\navis-release\windows\Navis_.msix` +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` to the script). -3. Upload the `.msix` (Partner Center can re-sign with the Store cert). -4. Declare **runFullTrust** and network capabilities; answer Store questions about VPN/proxy use. -5. Privacy policy URL required (document system-proxy changes and outbound tunnel traffic). -6. **Do not enable in-app self-update** for Store builds — Navis detects MSIX package identity and hides the updater (Store updates only). +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//`. 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\navis-release\windows\Navis_3.9.0.1.msix +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 -Navis can pull configs from a Remnawave panel: +EvilFox can pull configs from a Remnawave panel: 1. Public subscription: paste `https:///api/sub/` (or use panel URL + short UUID in the Remnawave block). 2. Optional API token (panel → API Tokens) enables authenticated lookups: diff --git a/packaging/msix/STORE_README_TEMPLATE.txt b/packaging/msix/STORE_README_TEMPLATE.txt new file mode 100644 index 0000000..495d29d --- /dev/null +++ b/packaging/msix/STORE_README_TEMPLATE.txt @@ -0,0 +1,50 @@ +EvilFox Microsoft Store package folder +Version: {{VERSION}} +Generated: {{GENERATED}} + +=== Partner Center upload (EN) === +1. Sign in to Partner Center with the same Microsoft Store developer account + you use for Visual Studio packaging / Store association (same tenant). +2. Open the EvilFox product -> Packages (Windows 10 / 11). +3. Prefer uploading EvilFox_{{VERSION}}.msixbundle if present. + Otherwise upload each EvilFox_{{VERSION}}_.msix (x64 + arm64). +4. Device family: check Windows 10 / 11 Desktop ONLY + (do NOT select Xbox, HoloLens, Surface Hub, IoT, Team, etc.). +5. Arm64 package covers Windows on ARM. Do not ship x86 / AArch32; + Microsoft is dropping AArch32 on future WoA. +6. Before final Store signing, replace Identity Name/Publisher with the + exact values from Partner Center (or let Partner Center re-sign). +7. Privacy policy URL on https://evilfox.win is required for Store listing. + +=== Partner Center (RU) === +1. Войдите в Partner Center тем же аккаунтом разработчика Store, + что и в Visual Studio (ассоциация приложения / упаковка). +2. Загрузите EvilFox_{{VERSION}}.msixbundle, если есть; иначе оба .msix + (x64 и arm64). +3. Семейство устройств: только Windows 10/11 Desktop + (без Xbox / HoloLens / IoT и т.п.). +4. Arm64 = Windows on ARM; x86/AArch32 не публикуем. +5. Name/Publisher в манифесте должны совпадать с Partner Center + (или Store переподпишет пакет). +6. Нужен URL политики конфиденциальности на evilfox.win. + +=== Artifacts === +{{ARTIFACTS}} + +=== MakeAppx === +{{MAKEAPPX}} + +=== wintun.dll === +{{WINTUN}} + +=== Listing assets === +listing\store.csv - Partner Center bulk listing fields +listing\screen\ - screenshots for Store listing + +=== Arm64 build note === +Cross-build (CGO_ENABLED=0): + set GOOS=windows + set GOARCH=arm64 + rem temporarily move cmd\vpnapp\resource.syso (amd64 from goversioninfo -64) + go build -ldflags="-H windowsgui -s -w" -trimpath -o dist\navis-release\windows\arm64\EvilFox.exe ./cmd/vpnapp + rem restore resource.syso diff --git a/screen/1.ru.png b/screen/1.ru.png new file mode 100644 index 0000000..2837f8b Binary files /dev/null and b/screen/1.ru.png differ diff --git a/screen/10.en.png b/screen/10.en.png new file mode 100644 index 0000000..633fe14 Binary files /dev/null and b/screen/10.en.png differ diff --git a/screen/11.en.png b/screen/11.en.png new file mode 100644 index 0000000..52ff7b3 Binary files /dev/null and b/screen/11.en.png differ diff --git a/screen/12dark.png b/screen/12dark.png new file mode 100644 index 0000000..93d80ff Binary files /dev/null and b/screen/12dark.png differ diff --git a/screen/13dark.png b/screen/13dark.png new file mode 100644 index 0000000..c603747 Binary files /dev/null and b/screen/13dark.png differ diff --git a/screen/14dark.png b/screen/14dark.png new file mode 100644 index 0000000..69eac6c Binary files /dev/null and b/screen/14dark.png differ diff --git a/screen/15dark.png b/screen/15dark.png new file mode 100644 index 0000000..ed1df84 Binary files /dev/null and b/screen/15dark.png differ diff --git a/screen/16dark.png b/screen/16dark.png new file mode 100644 index 0000000..c123dc3 Binary files /dev/null and b/screen/16dark.png differ diff --git a/screen/2.ru.png b/screen/2.ru.png new file mode 100644 index 0000000..19521fd Binary files /dev/null and b/screen/2.ru.png differ diff --git a/screen/3.ru.png b/screen/3.ru.png new file mode 100644 index 0000000..b7243f6 Binary files /dev/null and b/screen/3.ru.png differ diff --git a/screen/4.ru.png b/screen/4.ru.png new file mode 100644 index 0000000..afcd2ea Binary files /dev/null and b/screen/4.ru.png differ diff --git a/screen/5.ru.png b/screen/5.ru.png new file mode 100644 index 0000000..6dcca79 Binary files /dev/null and b/screen/5.ru.png differ diff --git a/screen/6.ru.png b/screen/6.ru.png new file mode 100644 index 0000000..37c9746 Binary files /dev/null and b/screen/6.ru.png differ diff --git a/screen/7.en.png b/screen/7.en.png new file mode 100644 index 0000000..57deaf8 Binary files /dev/null and b/screen/7.en.png differ diff --git a/screen/8.en.png b/screen/8.en.png new file mode 100644 index 0000000..ef6bef5 Binary files /dev/null and b/screen/8.en.png differ diff --git a/screen/9.png b/screen/9.png new file mode 100644 index 0000000..139bd4f Binary files /dev/null and b/screen/9.png differ diff --git a/scripts/pack-msix.ps1 b/scripts/pack-msix.ps1 index 97be464..471bea4 100644 --- a/scripts/pack-msix.ps1 +++ b/scripts/pack-msix.ps1 @@ -1,44 +1,50 @@ #Requires -Version 5.1 <# .SYNOPSIS - Pack EvilFox.exe into an MSIX for Microsoft Store / sideload. + Pack EvilFox.exe into per-arch MSIX (and optional .msixbundle) for Microsoft Store. .DESCRIPTION - Builds Store assets, stages AppxManifest + EvilFox.exe, runs MakeAppx. - Prefers MSIX over PWA: EvilFox needs Win32/WebView2 VPN and system-proxy access. + Builds Store assets, stages AppxManifest + EvilFox.exe per architecture, runs MakeAppx. + Default output: dist\microsoft-store\EvilFox__.msix + Prefer MSIX over PWA: EvilFox needs Win32/WebView2 VPN and system-proxy access. + + resource.syso note (arm64 cross-build): goversioninfo -64 emits an amd64 .syso. + For GOARCH=arm64 builds, temporarily rename cmd/vpnapp/resource.syso aside, then restore. .EXAMPLE .\scripts\pack-msix.ps1 - .\scripts\pack-msix.ps1 -Version 4.0.1.1 -Publisher "CN=EvilFox" + .\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 #> [CmdletBinding()] param( + [ValidateSet("x64", "arm64", "all")] + [string]$Arch = "all", [string]$ExePath = "", [string]$OutDir = "", - [string]$Version = "4.2.3.1", + [string]$Version = "4.2.8.1", [string]$Name = "EvilFox.EvilFox", [string]$Publisher = "CN=EvilFox", [string]$DisplayName = "EvilFox", [string]$PublisherDisplayName = "EvilFox", [string]$CertPath = "", [string]$CertPassword = "", - [switch]$SkipAssets + [switch]$SkipAssets, + [switch]$SkipBundle ) $ErrorActionPreference = "Stop" $Root = Split-Path -Parent (Split-Path -Parent $MyInvocation.MyCommand.Path) Set-Location $Root -if (-not $ExePath) { - $ExePath = Join-Path $Root "dist\navis-release\windows\EvilFox.exe" -} if (-not $OutDir) { - $OutDir = Join-Path $Root "dist\navis-release\windows" + $OutDir = Join-Path $Root "dist\microsoft-store" } - -if (-not (Test-Path -LiteralPath $ExePath)) { - throw "EvilFox.exe not found at '$ExePath'. Run build.bat first." +if (-not [System.IO.Path]::IsPathRooted($OutDir)) { + $OutDir = Join-Path $Root $OutDir } +$OutDir = [System.IO.Path]::GetFullPath($OutDir) function Find-SdkTool([string]$name) { $candidates = @() @@ -59,7 +65,128 @@ function Find-SdkTool([string]$name) { return $null } +function Resolve-ArchExe([string]$arch, [string]$explicit) { + if ($explicit) { return $explicit } + switch ($arch) { + "x64" { + return Join-Path $Root "dist\navis-release\windows\EvilFox.exe" + } + "arm64" { + return Join-Path $Root "dist\navis-release\windows\arm64\EvilFox.exe" + } + default { throw "Unsupported arch: $arch" } + } +} + +function Find-WintunDll([string]$arch) { + $candidates = @() + if ($arch -eq "arm64") { + $candidates += @( + (Join-Path $Root "assets\wintun\arm64\wintun.dll"), + (Join-Path $Root "dist\navis-release\windows\arm64\wintun.dll") + ) + } else { + $candidates += @( + (Join-Path $Root "assets\wintun\x64\wintun.dll"), + (Join-Path $Root "assets\wintun\amd64\wintun.dll"), + (Join-Path $Root "dist\navis-release\windows\wintun.dll") + ) + } + $candidates += @( + (Join-Path $Root "assets\wintun\$arch\wintun.dll"), + (Join-Path $Root "assets\wintun\wintun.dll"), + (Join-Path $Root "wintun.dll") + ) + foreach ($p in $candidates) { + if (Test-Path -LiteralPath $p) { return $p } + } + return $null +} + +function Write-StoreReadme( + [string]$dir, + [string]$version, + [string[]]$stagedArchs, + [string[]]$msixPaths, + [string]$bundlePath, + [string]$makeAppxPath, + [hashtable]$makeAppxCmds, + [bool]$missingWintun +) { + $tplPath = Join-Path $Root "packaging\msix\STORE_README_TEMPLATE.txt" + if (-not (Test-Path -LiteralPath $tplPath)) { + throw "Missing template: $tplPath" + } + $text = [System.IO.File]::ReadAllText($tplPath, [System.Text.Encoding]::UTF8) + $text = $text.Replace("{{VERSION}}", $version) + $text = $text.Replace("{{GENERATED}}", (Get-Date -Format "yyyy-MM-dd HH:mm:ss")) + + $artifacts = New-Object System.Collections.Generic.List[string] + if ($bundlePath -and (Test-Path -LiteralPath $bundlePath)) { + $artifacts.Add("Bundle: $bundlePath") + } else { + $artifacts.Add("Bundle: (not created)") + } + foreach ($p in $msixPaths) { + if (Test-Path -LiteralPath $p) { + $artifacts.Add("MSIX: $p") + } + } + foreach ($a in $stagedArchs) { + $stg = Join-Path $Root ("packaging\msix\_staging_" + $a) + $artifacts.Add("Staging ${a}: $stg") + } + $text = $text.Replace("{{ARTIFACTS}}", ($artifacts -join "`r`n")) + + $makeLines = New-Object System.Collections.Generic.List[string] + if ($makeAppxPath) { + $makeLines.Add("Found: $makeAppxPath") + } else { + $makeLines.Add("MakeAppx.exe NOT FOUND on this machine.") + $makeLines.Add("Install Windows 10/11 SDK, then run:") + foreach ($a in $stagedArchs) { + if ($makeAppxCmds.ContainsKey($a)) { + $makeLines.Add(" $($makeAppxCmds[$a])") + } + } + if ($stagedArchs.Count -ge 2) { + $bundleDir = Join-Path $dir "_bundle_input" + $bundleOut = Join-Path $dir ("EvilFox_" + $version + ".msixbundle") + $makeLines.Add(" makeappx bundle /d `"$bundleDir`" /p `"$bundleOut`" /o") + $makeLines.Add(" (copy both .msix into _bundle_input first)") + } + } + $text = $text.Replace("{{MAKEAPPX}}", ($makeLines -join "`r`n")) + + if ($missingWintun) { + $wintun = @( + "wintun.dll was NOT found under assets/ or dist/. Packaging continued.", + "VPN (TUN) mode needs wintun.dll next to EvilFox.exe.", + "Store users can still use proxy mode without it.", + "Add arch-specific wintun.dll later under assets/wintun// if needed." + ) -join "`r`n" + } else { + $wintun = "wintun.dll was included in staging where found for the target arch." + } + $text = $text.Replace("{{WINTUN}}", $wintun) + + $utf8 = New-Object System.Text.UTF8Encoding $false + [System.IO.File]::WriteAllText((Join-Path $dir "README.txt"), $text, $utf8) +} + $MakeAppx = Find-SdkTool "makeappx.exe" +New-Item -ItemType Directory -Force -Path $OutDir | Out-Null + +$archList = @() +if ($Arch -eq "all") { + $archList = @("x64", "arm64") +} else { + $archList = @($Arch) +} + +# When -Arch all, prefer per-arch default exe paths (ignore -ExePath). +$explicitExe = "" +if ($Arch -ne "all") { $explicitExe = $ExePath } if (-not $SkipAssets) { Write-Host "Generating Store assets..." @@ -67,60 +194,159 @@ if (-not $SkipAssets) { if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } } -$Staging = Join-Path $Root "packaging\msix\_staging" -if (Test-Path $Staging) { Remove-Item -Recurse -Force $Staging } -New-Item -ItemType Directory -Path $Staging | Out-Null -New-Item -ItemType Directory -Path (Join-Path $Staging "Assets") | Out-Null +$producedMsix = @() +$stagedArchs = @() +$makeAppxCmds = @{} +$anyMissingExe = $false +$missingWintun = $false +$packFailed = $false +$makeAppxMissing = -not [bool]$MakeAppx -$AssetsSrc = Join-Path $Root "packaging\msix\Assets" -Copy-Item -Path (Join-Path $AssetsSrc "*") -Destination (Join-Path $Staging "Assets") -Force -Copy-Item -LiteralPath $ExePath -Destination (Join-Path $Staging "EvilFox.exe") -Force +foreach ($a in $archList) { + $exe = Resolve-ArchExe $a $explicitExe + if (-not (Test-Path -LiteralPath $exe)) { + Write-Host "SKIP ${a}: EvilFox.exe not found at '$exe'" -ForegroundColor Yellow + $anyMissingExe = $true + continue + } -$ManifestSrc = Join-Path $Root "packaging\msix\AppxManifest.xml" -$ManifestDst = Join-Path $Staging "AppxManifest.xml" -$manifestText = Get-Content -LiteralPath $ManifestSrc -Raw -Encoding UTF8 -# Prefer exact placeholder swaps so we never touch . -$manifestText = $manifestText.Replace('Name="EvilFox.EvilFox"', "Name=`"$Name`"") -$manifestText = $manifestText.Replace('Publisher="CN=EvilFox"', "Publisher=`"$Publisher`"") -$manifestText = $manifestText.Replace('Version="4.2.3.1"', "Version=`"$Version`"") -$manifestText = $manifestText.Replace('EvilFox', "$DisplayName") -$manifestText = $manifestText.Replace('EvilFox', "$PublisherDisplayName") -$manifestText = $manifestText.Replace('DisplayName="EvilFox"', "DisplayName=`"$DisplayName`"") -[System.IO.File]::WriteAllText($ManifestDst, $manifestText, (New-Object System.Text.UTF8Encoding $false)) + $Staging = Join-Path $Root ("packaging\msix\_staging_" + $a) + if (Test-Path $Staging) { Remove-Item -Recurse -Force $Staging } + New-Item -ItemType Directory -Path $Staging | Out-Null + New-Item -ItemType Directory -Path (Join-Path $Staging "Assets") | Out-Null -New-Item -ItemType Directory -Force -Path $OutDir | Out-Null -$MsixPath = Join-Path $OutDir ("EvilFox_" + $Version + ".msix") -if (Test-Path $MsixPath) { Remove-Item -Force $MsixPath } + $AssetsSrc = Join-Path $Root "packaging\msix\Assets" + if (-not (Test-Path $AssetsSrc)) { + throw "Store assets missing at $AssetsSrc (run without -SkipAssets)." + } + Copy-Item -Path (Join-Path $AssetsSrc "*") -Destination (Join-Path $Staging "Assets") -Force + Copy-Item -LiteralPath $exe -Destination (Join-Path $Staging "EvilFox.exe") -Force -if (-not $MakeAppx) { - Write-Host "" - Write-Host "MakeAppx.exe not found - install the Windows 10/11 SDK to produce .msix." -ForegroundColor Yellow - Write-Host "Staging is ready: $Staging" - Write-Host "Then run:" - Write-Host (" makeappx pack /d `"{0}`" /p `"{1}`" /o" -f $Staging, $MsixPath) + $wintun = Find-WintunDll $a + if ($wintun) { + Copy-Item -LiteralPath $wintun -Destination (Join-Path $Staging "wintun.dll") -Force + Write-Host "Included wintun.dll for $a from $wintun" + } else { + $missingWintun = $true + Write-Host "No wintun.dll for $a (proxy mode still OK; TUN needs dll next to exe)." -ForegroundColor DarkYellow + } + + $ManifestSrc = Join-Path $Root "packaging\msix\AppxManifest.xml" + $ManifestDst = Join-Path $Staging "AppxManifest.xml" + $manifestText = Get-Content -LiteralPath $ManifestSrc -Raw -Encoding UTF8 + # Prefer exact placeholder swaps so we never touch . + $manifestText = $manifestText.Replace('Name="EvilFox.EvilFox"', "Name=`"$Name`"") + $manifestText = $manifestText.Replace('Publisher="CN=EvilFox"', "Publisher=`"$Publisher`"") + $manifestText = $manifestText.Replace('Version="4.2.8.1"', "Version=`"$Version`"") + # Also accept older template version if someone reverts the manifest placeholder. + $manifestText = $manifestText.Replace('Version="4.2.3.1"', "Version=`"$Version`"") + $manifestText = $manifestText.Replace('ProcessorArchitecture="x64"', "ProcessorArchitecture=`"$a`"") + $manifestText = $manifestText.Replace('ProcessorArchitecture="arm64"', "ProcessorArchitecture=`"$a`"") + $manifestText = $manifestText.Replace('EvilFox', "$DisplayName") + $manifestText = $manifestText.Replace('EvilFox', "$PublisherDisplayName") + $manifestText = $manifestText.Replace('DisplayName="EvilFox"', "DisplayName=`"$DisplayName`"") + [System.IO.File]::WriteAllText($ManifestDst, $manifestText, (New-Object System.Text.UTF8Encoding $false)) + + $MsixPath = Join-Path $OutDir ("EvilFox_" + $Version + "_" + $a + ".msix") + $makeAppxCmds[$a] = ("makeappx pack /d `"{0}`" /p `"{1}`" /o" -f $Staging, $MsixPath) + $stagedArchs += $a + + if ($makeAppxMissing) { + Write-Host "Staged $a (MakeAppx missing): $Staging" -ForegroundColor Yellow + continue + } + + if (Test-Path $MsixPath) { Remove-Item -Force $MsixPath } + Write-Host "Packing $MsixPath ..." + & $MakeAppx pack /d $Staging /p $MsixPath /o + if ($LASTEXITCODE -ne 0) { + Write-Host "MakeAppx pack failed for $a (exit $LASTEXITCODE)" -ForegroundColor Red + $packFailed = $true + continue + } + + if ($CertPath) { + $SignTool = Find-SdkTool "signtool.exe" + if (-not $SignTool) { throw "signtool.exe not found (needed for -CertPath)." } + Write-Host "Signing $a with $CertPath ..." + if ($CertPassword) { + & $SignTool sign /fd SHA256 /a /f $CertPath /p $CertPassword $MsixPath + } else { + & $SignTool sign /fd SHA256 /a /f $CertPath $MsixPath + } + if ($LASTEXITCODE -ne 0) { + Write-Host "Sign failed for $a" -ForegroundColor Red + $packFailed = $true + continue + } + } + + $producedMsix += $MsixPath + Write-Host "Packed: $MsixPath" +} + +$BundlePath = Join-Path $OutDir ("EvilFox_" + $Version + ".msixbundle") +if (-not $SkipBundle -and -not $makeAppxMissing -and $producedMsix.Count -ge 2) { + $bundleInput = Join-Path $OutDir "_bundle_input" + if (Test-Path $bundleInput) { Remove-Item -Recurse -Force $bundleInput } + New-Item -ItemType Directory -Path $bundleInput | Out-Null + foreach ($p in $producedMsix) { + Copy-Item -LiteralPath $p -Destination (Join-Path $bundleInput (Split-Path $p -Leaf)) -Force + } + if (Test-Path $BundlePath) { Remove-Item -Force $BundlePath } + Write-Host "Bundling $BundlePath ..." + & $MakeAppx bundle /d $bundleInput /p $BundlePath /o + if ($LASTEXITCODE -ne 0) { + Write-Host "makeappx bundle failed (exit $LASTEXITCODE)" -ForegroundColor Yellow + $BundlePath = "" + } else { + Write-Host "Bundle: $BundlePath" + } +} elseif ($producedMsix.Count -eq 1) { + $BundlePath = "" +} + +Write-StoreReadme -dir $OutDir -version $Version -stagedArchs $stagedArchs ` + -msixPaths $producedMsix -bundlePath $BundlePath -makeAppxPath $MakeAppx ` + -makeAppxCmds $makeAppxCmds -missingWintun $missingWintun + +# Copy Partner Center listing inputs when present in the repo. +$listingDir = Join-Path $OutDir "listing" +$listingScreen = Join-Path $listingDir "screen" +New-Item -ItemType Directory -Force -Path $listingScreen | Out-Null +$storeCsv = Join-Path $Root "store.csv" +if (Test-Path -LiteralPath $storeCsv) { + Copy-Item -LiteralPath $storeCsv -Destination (Join-Path $listingDir "store.csv") -Force +} +$screenSrc = Join-Path $Root "screen" +if (Test-Path -LiteralPath $screenSrc) { + Copy-Item -Path (Join-Path $screenSrc "*") -Destination $listingScreen -Force +} + +Write-Host "" +Write-Host "Store folder: $OutDir" +Write-Host "README: $(Join-Path $OutDir 'README.txt')" +Write-Host "Staged: $($stagedArchs -join ', ')" +if ($producedMsix.Count -gt 0) { + Write-Host "MSIX: $($producedMsix -join ', ')" +} + +# Exit non-zero only after staging both (when requested) if MakeAppx missing, +# or if packing failed / required exes missing. +if ($makeAppxMissing) { + if ($Arch -eq "all" -and $stagedArchs.Count -lt 2) { + Write-Host "MakeAppx missing and could not stage both arches." -ForegroundColor Red + exit 2 + } + if ($stagedArchs.Count -eq 0) { + Write-Host "Nothing staged." -ForegroundColor Red + exit 2 + } + Write-Host "MakeAppx missing - staging complete; see README.txt for pack commands." -ForegroundColor Yellow exit 2 } -Write-Host "Packing $MsixPath ..." -& $MakeAppx pack /d $Staging /p $MsixPath /o -if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } - -if ($CertPath) { - $SignTool = Find-SdkTool "signtool.exe" - if (-not $SignTool) { throw "signtool.exe not found (needed for -CertPath)." } - Write-Host "Signing with $CertPath ..." - if ($CertPassword) { - & $SignTool sign /fd SHA256 /a /f $CertPath /p $CertPassword $MsixPath - } else { - & $SignTool sign /fd SHA256 /a /f $CertPath $MsixPath - } - if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } -} - -Write-Host "" -Write-Host "Done:" -Write-Host " $MsixPath" -Write-Host " Staging: $Staging" -Write-Host "" -Write-Host "Store: upload MSIX in Partner Center (identity must match reservation)." -Write-Host ("Sideload: Add-AppxPackage -Path `"{0}`"" -f $MsixPath) +if ($packFailed) { exit 1 } +if ($anyMissingExe -and $Arch -eq "all" -and $producedMsix.Count -lt 2) { exit 1 } +if ($producedMsix.Count -eq 0) { exit 1 } +exit 0 diff --git a/store.csv b/store.csv new file mode 100644 index 0000000..0ffd9a0 --- /dev/null +++ b/store.csv @@ -0,0 +1,488 @@ +Field,ID,Type (Тип),default,en +Description,2,Текст,"EvilFox — приложение для безопасного доступа в интернет на Windows. + +Защитите данные в публичных Wi‑Fi сетях: EvilFox шифрует трафик, скрывает ваш реальный IP-адрес и помогает предотвратить утечки DNS. Современный интерфейс на русском и английском, светлая и тёмная темы, удобный выбор серверов и понятный статус подключения. + +Возможности: +• Шифрование трафика с поддержкой современных протоколов +• Режим прокси и полный режим защиты (TUN) для всего трафика приложений +• Защита от утечек (Kill Switch) при обрыве соединения +• Автовыбор сервера с наименьшим пингом +• Список серверов с флагами стран и группировкой по хосту +• Добавление собственной конфигурации по URL +• Мониторинг использования трафика и статистика сессий +• Интерфейс на русском и английском языках + +EvilFox подходит для повседневной работы, путешествий и защиты приватности. Конфигурацию подключения вы добавляете самостоятельно; покупки внутри приложения не требуются. + +Сайт: https://evilfox.win/ +Поддержка: https://t.me/evilfox100Bot","EvilFox is a Windows app for private, secure internet access. + +Protect your data on public Wi‑Fi: EvilFox encrypts your traffic, hides your real IP address, and helps prevent DNS leaks. A modern interface in English and Russian, light and dark themes, an easy server list, and a clear connection status. + +Features: +• Traffic encryption with modern protocol support +• Proxy mode and full protection mode (TUN) for all app traffic +• Leak protection (Kill Switch) if the connection drops +• Auto-select the server with the lowest ping +• Server list with country flags and host grouping +• Add your own configuration via URL +• Traffic usage monitoring and session stats +• English and Russian interface + +EvilFox is built for everyday browsing, travel, and privacy. You add your own connection configuration; no in-app purchases are required. + +Website: https://evilfox.win/ +Support: https://t.me/evilfox100Bot" +ReleaseNotes,3,Текст,"Обновление 4.2: улучшенный интерфейс для Microsoft Store, переключатель языка RU/EN, светлая тема по умолчанию, группировка серверов по IP с отображением доступных протоколов, исправления переключателей темы и языка, реальные флаги стран (SVG), Kill Switch и статистика.","Version 4.2: Microsoft Store–ready UI polish, RU/EN language switch, light theme by default, servers grouped by IP with available protocols, theme/language toggle fixes, real country flags (SVG), Kill Switch, and usage statistics." +Title,4,Текст,EvilFox,EvilFox +ShortTitle,5,Текст,EvilFox,EvilFox +SortTitle,6,Текст,EvilFox,EvilFox +VoiceTitle,7,Текст,Evil Fox,Evil Fox +ShortDescription,8,Текст,"Безопасный доступ в интернет: шифрование трафика, скрытие IP, защита от утечек DNS. Русский и английский. Современные протоколы, Kill Switch, удобный выбор серверов.","Secure internet access: encrypt traffic, hide your IP, help prevent DNS leaks. English & Russian. Modern protocols, Kill Switch, easy server selection." +DevStudio,9,Текст,EvilFox,EvilFox +CopyrightTrademarkInformation,12,Текст,© EvilFox. All rights reserved. EvilFox and the EvilFox logo are trademarks of their respective owners.,© EvilFox. All rights reserved. EvilFox and the EvilFox logo are trademarks of their respective owners. +AdditionalLicenseTerms,13,Текст,Proprietary software. By installing EvilFox you agree to use the application in accordance with applicable laws. The app provides a client for encrypted network connections; server configurations are supplied by the user. See https://evilfox.win/ for support and terms.,Proprietary software. By installing EvilFox you agree to use the application in accordance with applicable laws. The app provides a client for encrypted network connections; server configurations are supplied by the user. See https://evilfox.win/ for support and terms. +DesktopScreenshot1,100,Относительный путь (или URL-адрес файла в Центре партнеров),screen/1.ru.png,screen/7.en.png +DesktopScreenshot2,101,Относительный путь (или URL-адрес файла в Центре партнеров),screen/2.ru.png,screen/8.en.png +DesktopScreenshot3,102,Относительный путь (или URL-адрес файла в Центре партнеров),screen/3.ru.png,screen/9.png +DesktopScreenshot4,103,Относительный путь (или URL-адрес файла в Центре партнеров),screen/4.ru.png,screen/10.en.png +DesktopScreenshot5,104,Относительный путь (или URL-адрес файла в Центре партнеров),screen/5.ru.png,screen/11.en.png +DesktopScreenshot6,105,Относительный путь (или URL-адрес файла в Центре партнеров),screen/6.ru.png,screen/12dark.png +DesktopScreenshot7,106,Относительный путь (или URL-адрес файла в Центре партнеров),screen/12dark.png,screen/13dark.png +DesktopScreenshot8,107,Относительный путь (или URL-адрес файла в Центре партнеров),screen/13dark.png,screen/14dark.png +DesktopScreenshot9,108,Относительный путь (или URL-адрес файла в Центре партнеров),screen/14dark.png,screen/15dark.png +DesktopScreenshot10,109,Относительный путь (или URL-адрес файла в Центре партнеров),screen/15dark.png,screen/16dark.png +DesktopScreenshot11,110,Относительный путь (или URL-адрес файла в Центре партнеров),screen/16dark.png, +DesktopScreenshot12,111,Относительный путь (или URL-адрес файла в Центре партнеров),screen/9.png, +DesktopScreenshot13,112,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot14,113,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot15,114,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot16,115,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot17,116,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot18,117,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot19,118,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot20,119,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot21,120,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot22,121,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot23,122,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot24,123,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot25,124,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot26,125,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot27,126,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot28,127,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot29,128,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshot30,129,Относительный путь (или URL-адрес файла в Центре партнеров),, +DesktopScreenshotCaption1,150,Текст,Главный экран: подключение и статус защиты,Home: connect and protection status +DesktopScreenshotCaption2,151,Текст,Список серверов с флагами и пингом,Server list with flags and ping +DesktopScreenshotCaption3,152,Текст,"Настройки: тема, язык, Kill Switch",App overview +DesktopScreenshotCaption4,153,Текст,Статистика использования,"Settings: theme, language, Kill Switch" +DesktopScreenshotCaption5,154,Текст,Помощь и полезные ссылки,Statistics and help +DesktopScreenshotCaption6,155,Текст,Добавление конфигурации,Dark theme: home +DesktopScreenshotCaption7,156,Текст,Тёмная тема: главный экран,Dark theme: servers +DesktopScreenshotCaption8,157,Текст,Тёмная тема: серверы,Dark theme: settings +DesktopScreenshotCaption9,158,Текст,Тёмная тема: настройки,Dark theme: statistics +DesktopScreenshotCaption10,159,Текст,Тёмная тема: статистика,Dark theme: help +DesktopScreenshotCaption11,160,Текст,Тёмная тема: помощь,Dark theme: help +DesktopScreenshotCaption12,161,Текст,Общий вид приложения,App overview +DesktopScreenshotCaption13,162,Текст,, +DesktopScreenshotCaption14,163,Текст,, +DesktopScreenshotCaption15,164,Текст,, +DesktopScreenshotCaption16,165,Текст,, +DesktopScreenshotCaption17,166,Текст,, +DesktopScreenshotCaption18,167,Текст,, +DesktopScreenshotCaption19,168,Текст,, +DesktopScreenshotCaption20,169,Текст,, +DesktopScreenshotCaption21,170,Текст,, +DesktopScreenshotCaption22,171,Текст,, +DesktopScreenshotCaption23,172,Текст,, +DesktopScreenshotCaption24,173,Текст,, +DesktopScreenshotCaption25,174,Текст,, +DesktopScreenshotCaption26,175,Текст,, +DesktopScreenshotCaption27,176,Текст,, +DesktopScreenshotCaption28,177,Текст,, +DesktopScreenshotCaption29,178,Текст,, +DesktopScreenshotCaption30,179,Текст,, +MobileScreenshot1,200,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot2,201,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot3,202,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot4,203,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot5,204,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot6,205,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot7,206,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot8,207,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot9,208,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot10,209,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot11,210,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot12,211,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot13,212,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot14,213,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot15,214,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot16,215,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot17,216,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot18,217,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot19,218,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot20,219,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot21,220,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot22,221,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot23,222,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot24,223,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot25,224,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot26,225,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot27,226,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot28,227,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot29,228,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshot30,229,Относительный путь (или URL-адрес файла в Центре партнеров),, +MobileScreenshotCaption1,250,Текст,, +MobileScreenshotCaption2,251,Текст,, +MobileScreenshotCaption3,252,Текст,, +MobileScreenshotCaption4,253,Текст,, +MobileScreenshotCaption5,254,Текст,, +MobileScreenshotCaption6,255,Текст,, +MobileScreenshotCaption7,256,Текст,, +MobileScreenshotCaption8,257,Текст,, +MobileScreenshotCaption9,258,Текст,, +MobileScreenshotCaption10,259,Текст,, +MobileScreenshotCaption11,260,Текст,, +MobileScreenshotCaption12,261,Текст,, +MobileScreenshotCaption13,262,Текст,, +MobileScreenshotCaption14,263,Текст,, +MobileScreenshotCaption15,264,Текст,, +MobileScreenshotCaption16,265,Текст,, +MobileScreenshotCaption17,266,Текст,, +MobileScreenshotCaption18,267,Текст,, +MobileScreenshotCaption19,268,Текст,, +MobileScreenshotCaption20,269,Текст,, +MobileScreenshotCaption21,270,Текст,, +MobileScreenshotCaption22,271,Текст,, +MobileScreenshotCaption23,272,Текст,, +MobileScreenshotCaption24,273,Текст,, +MobileScreenshotCaption25,274,Текст,, +MobileScreenshotCaption26,275,Текст,, +MobileScreenshotCaption27,276,Текст,, +MobileScreenshotCaption28,277,Текст,, +MobileScreenshotCaption29,278,Текст,, +MobileScreenshotCaption30,279,Текст,, +XboxScreenshot1,300,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot2,301,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot3,302,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot4,303,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot5,304,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot6,305,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot7,306,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot8,307,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot9,308,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot10,309,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot11,310,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot12,311,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot13,312,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot14,313,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot15,314,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot16,315,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot17,316,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot18,317,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot19,318,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot20,319,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot21,320,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot22,321,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot23,322,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot24,323,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot25,324,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot26,325,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot27,326,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot28,327,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot29,328,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshot30,329,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxScreenshotCaption1,350,Текст,, +XboxScreenshotCaption2,351,Текст,, +XboxScreenshotCaption3,352,Текст,, +XboxScreenshotCaption4,353,Текст,, +XboxScreenshotCaption5,354,Текст,, +XboxScreenshotCaption6,355,Текст,, +XboxScreenshotCaption7,356,Текст,, +XboxScreenshotCaption8,357,Текст,, +XboxScreenshotCaption9,358,Текст,, +XboxScreenshotCaption10,359,Текст,, +XboxScreenshotCaption11,360,Текст,, +XboxScreenshotCaption12,361,Текст,, +XboxScreenshotCaption13,362,Текст,, +XboxScreenshotCaption14,363,Текст,, +XboxScreenshotCaption15,364,Текст,, +XboxScreenshotCaption16,365,Текст,, +XboxScreenshotCaption17,366,Текст,, +XboxScreenshotCaption18,367,Текст,, +XboxScreenshotCaption19,368,Текст,, +XboxScreenshotCaption20,369,Текст,, +XboxScreenshotCaption21,370,Текст,, +XboxScreenshotCaption22,371,Текст,, +XboxScreenshotCaption23,372,Текст,, +XboxScreenshotCaption24,373,Текст,, +XboxScreenshotCaption25,374,Текст,, +XboxScreenshotCaption26,375,Текст,, +XboxScreenshotCaption27,376,Текст,, +XboxScreenshotCaption28,377,Текст,, +XboxScreenshotCaption29,378,Текст,, +XboxScreenshotCaption30,379,Текст,, +HolographicScreenshot1,400,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot2,401,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot3,402,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot4,403,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot5,404,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot6,405,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot7,406,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot8,407,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot9,408,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot10,409,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot11,410,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot12,411,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot13,412,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot14,413,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot15,414,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot16,415,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot17,416,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot18,417,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot19,418,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot20,419,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot21,420,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot22,421,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot23,422,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot24,423,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot25,424,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot26,425,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot27,426,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot28,427,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot29,428,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshot30,429,Относительный путь (или URL-адрес файла в Центре партнеров),, +HolographicScreenshotCaption1,450,Текст,, +HolographicScreenshotCaption2,451,Текст,, +HolographicScreenshotCaption3,452,Текст,, +HolographicScreenshotCaption4,453,Текст,, +HolographicScreenshotCaption5,454,Текст,, +HolographicScreenshotCaption6,455,Текст,, +HolographicScreenshotCaption7,456,Текст,, +HolographicScreenshotCaption8,457,Текст,, +HolographicScreenshotCaption9,458,Текст,, +HolographicScreenshotCaption10,459,Текст,, +HolographicScreenshotCaption11,460,Текст,, +HolographicScreenshotCaption12,461,Текст,, +HolographicScreenshotCaption13,462,Текст,, +HolographicScreenshotCaption14,463,Текст,, +HolographicScreenshotCaption15,464,Текст,, +HolographicScreenshotCaption16,465,Текст,, +HolographicScreenshotCaption17,466,Текст,, +HolographicScreenshotCaption18,467,Текст,, +HolographicScreenshotCaption19,468,Текст,, +HolographicScreenshotCaption20,469,Текст,, +HolographicScreenshotCaption21,470,Текст,, +HolographicScreenshotCaption22,471,Текст,, +HolographicScreenshotCaption23,472,Текст,, +HolographicScreenshotCaption24,473,Текст,, +HolographicScreenshotCaption25,474,Текст,, +HolographicScreenshotCaption26,475,Текст,, +HolographicScreenshotCaption27,476,Текст,, +HolographicScreenshotCaption28,477,Текст,, +HolographicScreenshotCaption29,478,Текст,, +HolographicScreenshotCaption30,479,Текст,, +SurfaceHubScreenshot11,510,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot12,511,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot13,512,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot14,513,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot15,514,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot16,515,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot17,516,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot18,517,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot19,518,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot20,519,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot21,520,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot22,521,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot23,522,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot24,523,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot25,524,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot26,525,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot27,526,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot28,527,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot29,528,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshot30,529,Относительный путь (или URL-адрес файла в Центре партнеров),, +SurfaceHubScreenshotCaption11,560,Текст,, +SurfaceHubScreenshotCaption12,561,Текст,, +SurfaceHubScreenshotCaption13,562,Текст,, +SurfaceHubScreenshotCaption14,563,Текст,, +SurfaceHubScreenshotCaption15,564,Текст,, +SurfaceHubScreenshotCaption16,565,Текст,, +SurfaceHubScreenshotCaption17,566,Текст,, +SurfaceHubScreenshotCaption18,567,Текст,, +SurfaceHubScreenshotCaption19,568,Текст,, +SurfaceHubScreenshotCaption20,569,Текст,, +SurfaceHubScreenshotCaption21,570,Текст,, +SurfaceHubScreenshotCaption22,571,Текст,, +SurfaceHubScreenshotCaption23,572,Текст,, +SurfaceHubScreenshotCaption24,573,Текст,, +SurfaceHubScreenshotCaption25,574,Текст,, +SurfaceHubScreenshotCaption26,575,Текст,, +SurfaceHubScreenshotCaption27,576,Текст,, +SurfaceHubScreenshotCaption28,577,Текст,, +SurfaceHubScreenshotCaption29,578,Текст,, +SurfaceHubScreenshotCaption30,579,Текст,, +StoreLogo720x1080,600,Относительный путь (или URL-адрес файла в Центре партнеров),, +StoreLogo1080x1080,601,Относительный путь (или URL-адрес файла в Центре партнеров),, +StoreLogo300x300,602,Относительный путь (или URL-адрес файла в Центре партнеров),, +OverrideLogosForWin10,603,True/False,,False +StoreLogoOverride150x150,604,Относительный путь (или URL-адрес файла в Центре партнеров),, +StoreLogoOverride71x71,605,Относительный путь (или URL-адрес файла в Центре партнеров),, +PromoImage1920x1080,606,Относительный путь (или URL-адрес файла в Центре партнеров),, +PromoImage2400x1200,607,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxBrandedKeyArt584x800,608,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxTitledHero1920x1080,609,Относительный путь (или URL-адрес файла в Центре партнеров),, +XboxFeaturedPromo1080x1080,610,Относительный путь (или URL-адрес файла в Центре партнеров),, +OptionalPromo358x358,611,Относительный путь (или URL-адрес файла в Центре партнеров),, +OptionalPromo1000x800,612,Относительный путь (или URL-адрес файла в Центре партнеров),, +OptionalPromo414x180,613,Относительный путь (или URL-адрес файла в Центре партнеров),, +Feature1,700,Текст,Шифрование трафика и скрытие IP-адреса,Encrypt traffic and hide your IP address +Feature2,701,Текст,Режим прокси и полный режим защиты (TUN),Proxy mode and full protection mode (TUN) +Feature3,702,Текст,Kill Switch — блокировка трафика при обрыве VPN,Kill Switch blocks traffic if VPN drops +Feature4,703,Текст,Автовыбор сервера с лучшим пингом,Auto-select the lowest-ping server +Feature5,704,Текст,Серверы с флагами стран и группировкой протоколов,Servers with country flags and protocol grouping +Feature6,705,Текст,Добавление конфигурации по URL,Add configuration via URL +Feature7,706,Текст,Статистика трафика и сессий,Traffic and session statistics +Feature8,707,Текст,Интерфейс на русском и английском,English and Russian interface +Feature9,708,Текст,Светлая и тёмная темы оформления,Light and dark themes +Feature10,709,Текст,Защита от утечек DNS,DNS leak protection +Feature11,710,Текст,, +Feature12,711,Текст,, +Feature13,712,Текст,, +Feature14,713,Текст,, +Feature15,714,Текст,, +Feature16,715,Текст,, +Feature17,716,Текст,, +Feature18,717,Текст,, +Feature19,718,Текст,, +Feature20,719,Текст,, +MinimumHardwareReq1,800,Текст,Windows 10 version 1809 or later (x64),Windows 10 version 1809 or later (x64) +MinimumHardwareReq2,801,Текст,Internet connection,Internet connection +MinimumHardwareReq3,802,Текст,100 MB free disk space,100 MB free disk space +MinimumHardwareReq4,803,Текст,, +MinimumHardwareReq5,804,Текст,, +MinimumHardwareReq6,805,Текст,, +MinimumHardwareReq7,806,Текст,, +MinimumHardwareReq8,807,Текст,, +MinimumHardwareReq9,808,Текст,, +MinimumHardwareReq10,809,Текст,, +MinimumHardwareReq11,810,Текст,, +RecommendedHardwareReq1,850,Текст,Windows 11 (x64),Windows 11 (x64) +RecommendedHardwareReq2,851,Текст,Stable broadband connection,Stable broadband connection +RecommendedHardwareReq3,852,Текст,, +RecommendedHardwareReq4,853,Текст,, +RecommendedHardwareReq5,854,Текст,, +RecommendedHardwareReq6,855,Текст,, +RecommendedHardwareReq7,856,Текст,, +RecommendedHardwareReq8,857,Текст,, +RecommendedHardwareReq9,858,Текст,, +RecommendedHardwareReq10,859,Текст,, +RecommendedHardwareReq11,860,Текст,, +SearchTerm1,900,Текст,VPN,VPN +SearchTerm2,901,Текст,privacy,privacy +SearchTerm3,902,Текст,secure internet,secure internet +SearchTerm4,903,Текст,encrypt traffic,encrypt traffic +SearchTerm5,904,Текст,EvilFox,EvilFox +SearchTerm6,905,Текст,proxy client,proxy client +SearchTerm7,906,Текст,kill switch,kill switch +TrailerToPlayAtTopOfListing,999,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer1,1000,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer2,1001,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer3,1002,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer4,1003,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer5,1004,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer6,1005,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer7,1006,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer8,1007,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer9,1008,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer10,1009,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer11,1010,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer12,1011,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer13,1012,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer14,1013,Относительный путь (или URL-адрес файла в Центре партнеров),, +Trailer15,1014,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerTitle1,1020,Текст,, +TrailerTitle2,1021,Текст,, +TrailerTitle3,1022,Текст,, +TrailerTitle4,1023,Текст,, +TrailerTitle5,1024,Текст,, +TrailerTitle6,1025,Текст,, +TrailerTitle7,1026,Текст,, +TrailerTitle8,1027,Текст,, +TrailerTitle9,1028,Текст,, +TrailerTitle10,1029,Текст,, +TrailerTitle11,1030,Текст,, +TrailerTitle12,1031,Текст,, +TrailerTitle13,1032,Текст,, +TrailerTitle14,1033,Текст,, +TrailerTitle15,1034,Текст,, +TrailerThumbnail1,1040,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail2,1041,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail3,1042,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail4,1043,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail5,1044,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail6,1045,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail7,1046,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail8,1047,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail9,1048,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail10,1049,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail11,1050,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail12,1051,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail13,1052,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail14,1053,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerThumbnail15,1054,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption1,1055,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption2,1056,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption3,1057,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption4,1058,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption5,1059,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption6,1060,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption7,1061,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption8,1062,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption9,1063,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption10,1064,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption11,1065,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption12,1066,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption13,1067,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption14,1068,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerClosedCaption15,1069,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription1,1070,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription2,1071,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription3,1072,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription4,1073,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription5,1074,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription6,1075,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription7,1076,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription8,1077,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription9,1078,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription10,1079,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription11,1080,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription12,1081,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription13,1082,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription14,1083,Относительный путь (или URL-адрес файла в Центре партнеров),, +TrailerAudioDescription15,1084,Относительный путь (или URL-адрес файла в Центре партнеров),, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,, +,,,,