20 Eylül 2026 Pazar

MonoGame 데스크톱 게임을 Microsoft Store에 게시하기: 완전한 MSIX 및 WAP 가이드




MonoGame 데스크톱 게임을 Microsoft Store에 게시하기: 완전한 MSIX 및 WAP 가이드

인디 게임을 Windows 10 및 Windows 11의 Microsoft Store에 출시하면 전 세계 수억 명의 PC 게이머에게 직접 도달할 수 있으며, 백그라운드 자동 업데이트, Windows Game Bar 통합, 샌드박스형 컨테이너 설치의 보안성을 누릴 수 있습니다. 그러나 게임이 MonoGame(.NET 8.0 또는 .NET 9.0 WindowsDX)으로 제작된 경우, 기존 Win32 실행 파일(.exe)을 현대적인 MSIX / AppX 애플리케이션 모델과 연결하는 아키텍처 파이프라인이 필요합니다.

Arar GamesPaint TrekBlocked: Pixel Panzer 출시를 통해 초기 컴파일부터 스토어 라이브 배포까지의 모든 과정을 성공적으로 구축했습니다. 본 가이드에서는 프로젝트 구성, Visual Studio의 Publish 메뉴 옵션 분석, Package.appxmanifest 작성, 타일 그래픽 스케일링, WACK 인증 오류 해결 및 Microsoft Partner Center 최종 제출까지의 전체 프로세스를 상세히 다룹니다.


1. 아키텍처 기반: Win32 vs MSIX

전통적인 MonoGame 게임은 표준 Win32 .exe, 런타임 라이브러리(.dll) 및 컴파일된 바이너리 에셋(.xnb 텍스처, .ogg 오디오, 셰이더)이 포함된 Content/ 폴더로 빌드됩니다.

Windows 애플리케이션 패키징(WAP) 프로젝트를 통해 게임을 MSIX bundle로 캡슐화하면 다음과 같은 핵심 이점을 얻을 수 있습니다:

  1. 격리된 컨테이너 라이프사이클: MSIX 앱은 격리된 가상 환경에서 실행되므로, 프로그램 삭제 시 모든 파일과 가상 레지스트리가 시스템에 찌꺼기를 남기지 않고 완벽하게 제거됩니다.
  2. 동적 아키텍처 및 리소스 전달: 단일 .appxupload 패키지에 x86x64 바이너리와 다양한 화면 배율(scale-100~scale-400)이 함께 번들링되어, 사용자 PC 사양에 맞는 파일만 다운로드되므로 다운로드 크기가 획기적으로 줄어듭니다.
  3. 자동 크래시 텔레메트리: Visual Studio가 디버그 심볼(.appxsym)을 번들에 자동 포함하므로, 사용자 기기에서 예외가 발생할 경우 Partner Center 콘솔에서 정확한 라인 번호와 함수명이 포함된 스택 추적을 즉시 확인할 수 있습니다.

2. 프로젝트 구성 및 빌드 설정

메인 게임 프로젝트의 .csproj에서 다중 플랫폼 및 콘텐츠 복사를 설정합니다:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net9.0-windows</TargetFramework>
    <UseWindowsForms>true</UseWindowsForms>
    <Platforms>AnyCPU;x64;x86</Platforms>
  </PropertyGroup>
  <ItemGroup>
    <Content Include="Content\**\*.*">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
</Project>

NuGet 패키지 복원:

dotnet restore YourGame.Desktop.csproj -r win-x64
dotnet restore YourGame.Desktop.csproj -r win-x86

3. Visual Studio Publish 메뉴 상세 분석

WAP 프로젝트 우클릭 후 Publish 선택 시 제공되는 3가지 옵션:

  1. Associate App with the Store... (스토어와 앱 연결): 파트너 센터에 예약된 게임명을 선택하여 공식 Publisher ID와 패밀리 네임을 가져오고 Package.StoreAssociation.xml을 자동 생성합니다.
  2. Convert Content Group Map File (콘텐츠 그룹 맵 파일 변환): 대용량 게임(50GB 이상)의 스트리밍 분할 설치용 기능입니다. 인디 게임은 안전하게 건너뛰어도 됩니다.
  3. Create App Packages... (앱 패키지 만들기): 로컬 QA 테스트(Sideloading) 또는 스토어 업로드용 패키지(_bundle.appxupload)를 빌드하는 핵심 도구입니다.

4. 패키지 생성 마법사 설정

  • 배포 방식: 스토어 제출은 "Microsoft Store under a new or existing app name", 로컬 테스트는 "Sideloading" 선택.
  • 아키텍처: ☑️ x86 및 ☑️ x64 모두 선택 (Release 구성).
  • 앱 번들 생성: Generate app bundle: Always.
  • 버전 관리 규칙: Major.Minor.Build.Revision(예: 1.0.0.0). 스토어에 새로 업로드하는 패키지 버전은 스토어의 기존 버전보다 반드시 높아야 합니다. Automatically increment를 켜두면 매 빌드 시 리비전 번호가 자동 증가합니다.

5. Package.appxmanifest 핵심 설정

  • <rescap:Capability Name="runFullTrust" />: MonoGame은 DirectX 11 및 네이티브 하드웨어 후킹을 사용하므로, 샌드박스 제한 없이 실행될 수 있도록 데스크톱 전체 권한을 부여합니다.
  • InitialRotationPreference="landscape": ASUS ROG Ally, Lenovo Legion Go 등 휴대용 Windows 게이밍 UMPC를 위해 가로 모드로 화면을 고정합니다.

Warning

BadgeLogo 엄격 규칙: 잠금 화면 뱃지 아이콘(BadgeLogo)은 반드시 순백색(#FFFFFF) 픽셀과 투명 배경으로만 구성되어야 합니다. 색상 픽셀이 포함되면 WACK 명암비 검사에서 거부됩니다.


7. WACK 검증 및 문제 해결

  • "AppCert.exe wasn't found" 오류: Visual Studio Installer의 개별 구성 요소 탭에서 "Windows App Certification Kit"을 설치하십시오. 로컬 검사는 선택 사항이며, 스토어 업로드 시 마이크로소프트 클라우드에서 자동으로 전체 검사를 수행합니다.
  • MonoGame 바이너리 오탐 (Blocked Executable): 압축된 .xnb.ogg 데이터가 실행 파일 시그니처와 우연히 일치하여 경고가 뜰 수 있으나, 정적 게임 콘텐츠로 정상 승인됩니다.

8. 로컬 사이드로딩 테스트

AppPackages/YourGame_Test/ 폴더에서 PowerShell을 관리자 권한으로 실행:

Set-ExecutionPolicy RemoteSigned -Scope Process
.\Add-AppDevPackage.ps1

컨테이너 환경에서 게임패드 지원과 60FPS 구동 상태를 사전 검증할 수 있습니다.


9. Microsoft Partner Center 제출 체크리스트

  1. Pricing and availability: 전 세계 240개 시장 선택 및 달러 기준가 설정.
  2. Properties: 카테고리 Games 지정 및 개인정보 처리방침(Privacy Policy) URL 등록.
  3. Age ratings: IARC 설문 완료 (아케이드 게임은 대개 Everyone / PEGI 3 등급 부여).
  4. Store listings: 1920x1080 순수 PC 게임플레이 스크린샷 업로드.
  5. Packages: _bundle.appxupload 업로드 후 Submit to the Store 클릭.



Hiç yorum yok:

Yorum Gönder