Microsoft Store (Windows)
Flutter Windows 앱의 이름을 파트너 센터에서 예약하고, 제품 ID 를 넣어 스토어용 MSIX 로 패키징한 뒤 인증을 거쳐 출시하는 순서를 안내합니다. 버전 규칙과 정책 7.20 의 변경, EXE/MSI 설치 파일로 올리는 경로와 MSIX 의 차이도 정리했습니다.
목차
Flutter 앱을 Microsoft Store 에 올리는 순서를 안내합니다. 파트너 센터(Partner Center)에서 앱 이름을 예약하고, 스토어가 정해 준 패키지 ID 를 msix 패키지 설정에 글자 그대로 옮겨 스토어용 MSIX 를 만든 뒤, 제출 항목을 채워 인증(certification)을 받고 출시하는 흐름입니다. MSIX 는 인증을 통과한 뒤 스토어가 Microsoft 인증서로 서명하므로 코드 서명 인증서를 따로 사지 않아도 됩니다. 설치 파일(EXE/MSI)을 그대로 올리는 경로도 있으며, 요건과 MSIX 와의 차이는 아래 「MSIX 와 EXE/MSI 경로 비교」에 정리했습니다.
참고
이 페이지의 파일 위치는 Flutter 가 기본으로 만드는 프로젝트(windows/) 기준입니다. Cocode IDE 로 만든 프로젝트도 Flutter 프로젝트라 같은 절차를 따르지만, windows/ 폴더가 어떻게 있는지, 패키징과 버전 설정을 CI 가 대신하는지는 프로젝트마다 다를 수 있으니 프로젝트의 README 와 CI 설정을 확인하세요.
주의
Microsoft Store 의 요건과 정책은 바뀝니다. 이 페이지의 날짜와 수치는 「마지막 확인」 날짜 기준이고, 다르면 Microsoft 의 공식 문서가 우선합니다. 파트너 센터 화면은 로그인이 필요해 직접 확인하지 못했으므로, 메뉴와 버튼 이름 · 각 단계의 성공 판정(화면에 보이는 상태)은 Microsoft Learn 문서의 설명을 따랐습니다. 이름은 한국어판 Learn 문서에서 확인한 것을 「한글(영문)」으로 적었고, 확인하지 못한 이름은 영문으로 적었습니다. 한국어판은 번역이라 실제 화면과 다를 수 있고, 앱 상태 이름은 Learn 문서끼리도 표기가 조금 달라 화면에 보이는 이름과 다를 수 있습니다.
준비물
- 파트너 센터 개발자 계정 — 개인 또는 회사 계정입니다.
storedeveloper.microsoft.com의 새 가입 흐름에서는 개인 · 회사 모두 등록비가 없습니다(2026-10-09 확인). 개인은 정부 발급 신분증과 셀피로 신원을 확인하고, 회사는 D-U-N-S 번호(권장) 또는 공식 사업 서류와 조직 도메인의 업무용 이메일로 확인합니다. 개인 계정을 회사 계정으로 바꿀 수는 없고, 조직 · 사업과 관련해 활동하면 회사 계정을 써야 한다는 정책(10.14)도 있으니 종류를 처음에 정하세요. 서류와 비용은 개발자 계정을 보세요. - Windows PC 와 Visual Studio — Flutter 3.47 지원 플랫폼 표는 Windows 10 · 11 을 지원 대상으로 적습니다. Visual Studio 의 「Desktop development with C++」 워크로드를 설치하고
flutter doctor -v로 확인합니다. - Windows 앱 인증 키트(Windows App Certification Kit, WACK) — Windows SDK 에 들어 있는 점검 도구입니다. 제출 전에 패키지를 미리 검사하는 데 씁니다.
- 정해 둔 식별자와 버전 — 식별자와 버전의 Microsoft Store 항목을 먼저 읽어 두세요. 패키지 ID 는 스토어가 부여합니다.
- 스토어 등록정보 자료 — 로고 · 스크린샷 · 설명을 아이콘 · 스플래시 · 스크린샷의 규격대로 준비합니다.
- 개인정보 처리방침 주소 — 개인정보와 권한에서 정리한 방침 URL 입니다. 정책 10.5.1 은 Desktop Bridge 와 Win32 제품이 개인정보에 접근할 수 있다고 보고 늘 방침을 요구하므로, Win32 창을 쓰는 Flutter 앱은 방침 URL 을 준비해 두는 편이 안전합니다.
- (로그인이 있는 앱) 인증용 테스트 계정 — 정책 10.3.1 은 로그인 정보가 필요한 제품이 「인증 참고 사항(Notes for certification)」 칸에 작동하는 데모 계정을 알려 주라고 정합니다. 서버가 필요하면 인증하는 동안 켜져 있어야 합니다(10.3.2).
프로젝트에서 바꿀 항목
아래 파일 위치와 기본값은 flutter create --platforms=windows 로 만든 Flutter 3.47.6 기본 프로젝트에서 확인한 것입니다(2026-10-09). msix_config 항목은 msix 3.18.0 의 pub.dev 설명과 패키지 소스(lib/src/configuration.dart 등)에서 확인했습니다. 프로젝트마다 다를 수 있으니 직접 열어 확인하세요.
| 항목 | 어디서 바꾸나 | 기본값과 메모 |
|---|---|---|
| 실행 파일 이름 | windows/CMakeLists.txt 의 set(BINARY_NAME "my_app") |
기본은 프로젝트 이름이고 빌드한 .exe 파일 이름이 됩니다. 바꾸면 파일 속성에 보이는 windows/runner/Runner.rc 의 OriginalFilename 도 새 이름에 맞춰 두면 일관됩니다(권장) |
| 창 제목 | windows/runner/main.cpp 의 window.Create(L"my_app", origin, size) |
기본 제목은 프로젝트 이름이고 처음 창 크기는 1280 × 720 입니다 |
| 회사 · 제품 정보 | windows/runner/Runner.rc 의 StringFileInfo 블록(CompanyName · FileDescription · InternalName · LegalCopyright · OriginalFilename · ProductName) |
CompanyName 과 LegalCopyright 는 flutter create 의 --org 값(기본 com.example)으로 채워지고 나머지는 프로젝트 이름입니다. 파일 속성 대화 상자에 보이는 값이니 앱 · 회사 이름에 맞게 바꿉니다 |
| 앱 아이콘 | windows/runner/resources/app_icon.ico 를 교체 |
파일 이름을 바꿨다면 Runner.rc 의 IDI_APP_ICON 경로도 고칩니다. 스토어용 MSIX 의 로고는 msix_config 의 logo_path(최소 400 × 400 px 권장)로 따로 정합니다 |
| 패키지 식별 정보 | pubspec.yaml 의 msix_config: 아래 identity_name · publisher · publisher_display_name |
기본 템플릿에는 msix_config 가 없습니다. 스토어용 빌드(--store)는 세 값이 모두 필요하고 파트너 센터 「제품 ID」의 값과 글자 그대로 같아야 합니다 |
| 표시 이름 | msix_config 의 display_name |
패키지 안의 앱 이름이 됩니다. 정하지 않으면 프로젝트 이름에서 밑줄을 뺀 값을 쓰고 256자를 넘을 수 없습니다. 스토어에 올리는 패키지는 이 이름이 파트너 센터에서 예약한 이름과 글자 그대로 같아야 하니 기본값에 맡기지 말고 예약한 이름을 적습니다 |
| 버전 | pubspec.yaml 의 version: 1.0.0+1 과 msix_config 의 msix_version |
pubspec.yaml 의 버전은 실행 파일의 파일 · 제품 버전에 들어갑니다. 스토어 패키지의 버전은 msix_version(a.b.c.d 꼴)이 따로 정하고 네 번째 자리는 0 이어야 합니다(4단계) |
| 기능 선언 | msix_config 의 capabilities |
앱이 쓰는 기능만 선언합니다(정책 10.6). msix 3.18.0 은 runFullTrust 를 항상 더하고 이 기능은 제출에서 사유를 입력해야 합니다(10단계) |
| 지원 아키텍처 · 최소 OS | msix_config 의 architecture · os_min_version |
기본은 x64(arm64 선택 가능)와 10.0.17763.0 입니다. 템플릿의 windows/runner/runner.exe.manifest 는 Windows 10 · 11 을 지원 OS 로 선언합니다 |
| 패키지 언어 | msix_config 의 languages |
정하지 않으면 en-us 입니다. 스토어는 지원하는 언어 코드 목록 안의 언어를 하나 이상 요구합니다 |
MSIX 와 EXE/MSI 경로 비교
Microsoft Store 는 MSIX 를 권장 형식으로 안내하고, 2021년 6월부터 EXE/MSI 설치 파일도 받습니다. 이 페이지의 단계는 MSIX 경로입니다. 설치 파일로 올리려는 경우 아래 차이를 먼저 확인하세요(2026-10-09 확인).
| 항목 | MSIX (이 페이지의 단계) | EXE/MSI 설치 파일 |
|---|---|---|
| 호스팅 | Microsoft 가 무료로 제공합니다 | 게시자가 호스팅하고 비용을 부담합니다. 설치 파일의 HTTPS 다운로드 주소(패키지 URL)를 제출합니다 |
| 코드 서명 | 필요 없습니다. 인증을 통과하면 스토어가 Microsoft 인증서로 서명합니다 | 게시자가 직접 서명합니다. 설치 파일과 그 안의 모든 PE 파일을 Microsoft Trusted Root Program 에 속한 CA 가 발급한 인증서 체인으로 서명해야 합니다 |
| 업데이트 | OS 가 24시간마다 업데이트를 확인합니다 | 앱이 자체 업데이트를 책임집니다. 스토어는 기존 사용자에게 업데이트를 자동이나 수동으로 제공하지 않고, 새 사용자가 최신 버전을 받게 할 뿐입니다 |
| 제출 화면 | 「패키지(Packages)」 페이지에 .msix 를 올립니다 |
「패키지」 페이지에 패키지 URL · 아키텍처 · 설치 프로그램 매개변수 · 언어 · 앱 유형(EXE 또는 MSI)을 입력합니다. 스토어 목록의 「적용 가능한 사용 조건(Applicable license terms)」도 필수입니다 |
| 패키지 플라이트(특정 고객군에만 먼저 배포) · 비공개 게시 · 단계적 출시 | 쓸 수 있습니다(단계적 출시는 업데이트에만) | 쓸 수 없습니다 |
| 상거래 | Microsoft Store 상거래 플랫폼 또는 자체 · 제3자 플랫폼 | 자체 · 제3자 플랫폼만 쓸 수 있습니다 |
| S 모드 | 지원합니다 | 지원하지 않습니다 |
EXE/MSI 로 올릴 때 지켜야 하는 요건은 정책 10.2.9 에 있고, 「MSI/EXE 앱의 패키지 요건」 문서가 그중 대부분을 같은 항목으로 적습니다. 정책 10.2.9 는 여기에 게임이 아닌 제품(non-gaming)만 이 경로를 쓸 수 있다는 조건과 PC 에만 제공할 수 있다는 조건도 정합니다. Flutter 게임이면 MSIX 경로를 쓰세요.
- 설치 파일은
.msi나.exe뿐이고, 설치 파일과 그 안의 모든 PE 파일은 Microsoft Trusted Root Program 에 속한 CA 가 발급한 코드 서명 인증서 체인으로 서명해야 합니다. - 파트너 센터에 버전이 붙은 다운로드 주소를 제출하고, 그 주소가 가리키는 파일은 제출 뒤에 바뀌면 안 됩니다. 새 설치 파일을 배포할 때마다 새 버전 주소를 제출합니다.
- 설치할 때 설치 화면이 보이면 안 되고(무인(silent) 설치 필수, UAC 대화 상자는 허용), 설치 프로그램은 다운로드 스텁이 아닌 독립 실행형 오프라인 설치 프로그램이어야 하며 PC 에만 제공할 수 있습니다.
- 인증은 표준 사용자 계정으로 설치되는지, 시작 메뉴와 프로그램 목록에 항목이 생기는지, 제품 이름 · 게시자 · 버전 정보가 「프로그램 추가/제거」에 보이는지, 깨끗이 제거되는지, 사용자가 원하지 않은 다른 앱을 함께 설치하지 않는지를 봅니다.
- 서명은 문서마다 표현이 다릅니다. 정책 10.2.9 와 패키지 요건 문서는 서명을 해야 한다(must)고 적고, MSI/EXE 인증 문서는 강하게 권장한다(highly recommended)고 적습니다. 둘을 모두 만족하려면 서명하세요.
Flutter 앱으로 EXE 설치 파일을 만들려면 릴리스 폴더(실행 파일 · .dll 파일 · data 폴더)를 Inno Setup 이나 WiX 같은 설치 프로그램 도구에 담습니다. 그 설치 프로그램이 위 요건(무인 설치 · 서명 · 오프라인)을 만족하는지는 따로 확인하세요. Flutter 문서는 Visual C++ 재배포 가능 패키지도 챙기라고 안내하고, 앱 폴더에 함께 두는 방식이면 msvcp140.dll · vcruntime140.dll · vcruntime140_1.dll 을 복사하라고 합니다. Flutter 문서는 Microsoft Store 로 꼭 내야 하는 것은 아니라고도 밝힙니다.
스토어 정책 7.20 (2026-10-22 시행)
Microsoft Store 정책 7.20 은 2026-09-15 에 게시되었고 2026-10-22 부터 시행됩니다(2026-10-09 확인). 그 전까지는 7.19(2025-10-14 시행)가 적용됩니다. 이 가이드와 관련된 변경은 둘입니다.
- 연령 등급(11.11) — 7.20 의 11.11.2 는 2026-10-22 부터 제품의 연령 등급 정보를 제품 수명 주기 내내 정확하고 최신으로 유지하라고 정합니다. 다른 등급 기관에서 새 등급을 받거나 등급 정보가 바뀌면 파트너 센터에 바로 반영해야 합니다.
- 사용자 생성 콘텐츠(11.12) — 사용자가 올린 콘텐츠를 다른 사용자가 볼 수 있는 제품의 기본 의무(약관 또는 콘텐츠 지침 공개, 신고 수단 또는 선제 탐지, Microsoft 가 요청하면 제거 · 비활성화)는 7.19 에도 있었습니다. 7.20 의 11.12 는 2026-10-22 부터 이를 강화해, 약관 · 행동 강령 · 콘텐츠 지침(중 해당하는 것)을 제품 안과 웹사이트 양쪽에서 볼 수 있게 하고(7.19 는 제품 안 또는 웹사이트), 사용자 안전 · 보호자 · 콘텐츠 권한 설정을 존중하라고 정합니다. 제3자 게임 모드나 UGC 플랫폼과 연동하면 그쪽 신고 수단과 연동하고 중재 의무를 지키며, 개발자가 만들거나 게시하거나 가져온 콘텐츠가 아니라는 사실을 사용자에게 알려야 합니다.
업데이트 때의 점검은 업데이트와 단계적 출시에서, 거절 사유는 심사 거절 대응에서 이어집니다. 정책 번호와 문구는 제출 직전에 정책 페이지의 현재 버전으로 다시 확인하세요.
단계
-
파트너 센터에서 앱 이름을 예약합니다. 파트너 센터의 「앱 및 게임(Apps and games)」 페이지에서 「새 제품(New product)」 → 「MSIX 또는 PWA 앱(MSIX or PWA app)」(게임이면 「게임(Game)」)을 고르고, 사용할 이름을 입력해 「가용성 확인(Check availability)」을 누릅니다. 사용할 수 있으면 「제품 이름 예약(Reserve product name)」을 누릅니다. 이름은 스토어 안에서 유일해야 합니다. 이름은 256자까지 쓸 수 있지만 표시 공간이 좁아 짧게 짓는 편이 낫고, 상표가 걸린 이름 · 이모지 · 이름 끝에 붙인 버전이나 날짜는 피하세요. 예약은 게시 준비가 되기 최대 3개월 전부터 할 수 있고, 3개월 안에 쓰지 않으면 예약이 사라집니다. 스토어에 그 이름의 앱이 보이지 않는데도 예약되지 않으면 다른 개발자가 예약만 해 두고 아직 제출하지 않은 경우일 수 있습니다.
성공 판정 — 이름 옆에 녹색 확인 표시가 보이고, 「제품 이름 예약」을 누르면 앱의 애플리케이션 개요(application overview) 페이지로 이동합니다.
-
제품 ID(Product identity)를 확인합니다. 앱 개요 페이지의 「제품 관리(Product management)」에서 「제품 ID」를 열어 패키지 ID 이름(package identity name) · 게시자(publisher) · 게시자 표시 이름(publisher display name) 세 값을 복사합니다. Learn 문서에는 이 값들이
Package/Identity/Name·Package/Identity/Publisher·Package/Properties/PublisherDisplayName로 적혀 있고, 순서대로identity_name·publisher·publisher_display_name에 넣습니다. 한국어판 Learn 문서는 이 화면을 「앱 ID 세부 정보」라고도 부릅니다. 앱에 아직 ID 가 없으면 만들 수 있는 선택지가 보이고, ID 를 만들려면 이름을 예약해야 합니다. Microsoft 는 매니페스트의 값이 대소문자를 구분하고 공백과 문장 부호까지 같아야 한다고 안내하니 손으로 옮겨 적지 말고 붙여 넣으세요.성공 판정 — 제품 ID 페이지에 세 값이 모두 보입니다.
-
msix패키지를 더하고msix_config를 채웁니다. Flutter 문서가 MSIX 를 만드는 가장 쉬운 방법으로 안내하는msix패키지(pub.dev, kremer.software 게시)를 개발 의존성으로 더합니다. Flutter 가 아닌 외부 게시자가 관리하는 패키지이고 2026-10-09 기준 최신은 3.18.0 입니다.flutter pub add --dev msixpubspec.yaml에msix_config:를 더합니다. 꺾쇠 괄호(< >)는 넣지 않고 1단계에서 예약한 이름과 2단계에서 복사한 값으로 바꿉니다.msix_config: display_name: <파트너 센터에서 예약한 앱 이름 그대로> identity_name: <제품 ID 의 패키지 ID 이름> publisher: <제품 ID 의 게시자> publisher_display_name: <제품 ID 의 게시자 표시 이름> msix_version: 1.0.0.0 logo_path: <로고 PNG 파일 경로>pub.dev 설명은 스토어에 올리는 앱이라면
publisher_display_name·identity_name·msix_version·publisher를 모두 정하고 파트너 센터에 등록된 값과 맞추라고 합니다. 패키지 안의 앱 이름이 되는display_name도 파트너 센터에서 예약한 이름과 글자 그대로 같아야 합니다(아래 「자주 겪는 문제」의 이름 오류 참고). 스토어용 빌드는 5단계처럼 명령줄의--store로 만들고, 이 모드에서identity_name·publisher_display_name·publisher가 비어 있으면msix3.18.0 은 오류를 내며 멈춥니다. 같은 값을 명령줄 인자(--identity-name·--publisher·--publisher-display-name)로 줄 수도 있습니다.msix는 같은 일을 하는store: true설정도 받지만,pubspec.yaml에 적어 두면 명령줄에서 끌 수 없어(--store를 빼거나--no-store를 써도 스토어용으로 만들어집니다) 이 페이지는 쓰지 않습니다.성공 판정 —
flutter pub get이 끝나고pubspec.yaml의 세 값이 제품 ID 페이지의 값과,display_name이 예약한 이름과 글자 그대로 같습니다. -
버전을 정합니다. 패키지 버전은
a.b.c.d네 자리입니다. Microsoft 는 Windows 10 · 11 패키지에서 네 번째 자리를 스토어가 쓰도록 예약해 두었으니 패키지를 만들 때 0 으로 두라고 하고(스토어가 값을 바꿀 수 있습니다), 나머지 자리는 0 에서 65535 사이의 정수이며 첫 자리는 0 이 될 수 없다고 안내합니다. Flutter 문서도 스토어 앱의 마지막 자리는 모든 릴리스에서 0 이어야 한다고 적습니다.msix3.18.0 은 패키지 버전을--version옵션 →msix_config의msix_version→pubspec.yaml의x.y.z뒤에.0을 붙인 값의 순서로 정하고,pubspec.yaml의+뒤 빌드 번호는 버립니다. 그래서 업데이트에는msix_version(또는pubspec.yaml의x.y.z)을 직접 올려야 합니다. 스토어는 기기에 맞는 가장 높은 버전의 패키지를 배포합니다.성공 판정 —
msix_version이a.b.c.0꼴이고 첫 자리가 0 이 아니며, 이미 올린 패키지가 있다면 그 버전보다 높습니다. -
스토어용 MSIX 를 만듭니다. Windows PC 에서 프로젝트 폴더로 이동해 실행합니다.
dart run msix:create --store이 명령은 먼저
flutter build windows를 실행하고(기본값build_windows: true) 그 결과로.msix파일을 만듭니다. 기본 아키텍처는 x64 입니다.--store로 만들 때는 이 도구가 서명 단계를 건너뛰고, 스토어가 인증 뒤에 서명합니다.참고
--store로 만든 패키지는 서명하지 않은 제출용입니다. 이 PC 에 설치해 직접 써 보려면--store없이 테스트 빌드를 따로 만드세요(pubspec.yaml에store: true를 적어 두었다면 그 줄을 지워야 합니다 —--store를 빼거나--no-store를 써도 스토어용으로 만들어집니다). 기본 설정은 자체 서명 테스트 인증서로 서명하고, 그 인증서가 이 PC 에 아직 없으면 설치할지 묻습니다(설치하려면 관리자 권한이 필요하고--install-certificate false로 건너뜁니다. CI 같은 비대화형 환경에서는 이 옵션을 함께 주세요). 테스트 빌드는 스토어에 올리지 않습니다.성공 판정 — 명령이
msix created:줄과.msix파일 경로를 출력하며 끝나고 그 경로에 파일이 있습니다. -
Windows 앱 인증 키트로 패키지를 점검합니다. 인증의 기술 규정 준수 시험이 이 키트로 이루어지므로 먼저 돌려 봅니다. 시작 메뉴에서 「Windows App Cert Kit」을 열고, 5단계에서 만든
.msix를 고른 뒤 시험 보고서를 저장할 위치를 정합니다. Learn 의 키트 문서는 점검할 앱을 컴퓨터에 배포해 둔 것을 전제로 적고, 배포하지 않은 패키지는 명령줄(appcert.exe test -appxpackagepath <패키지 경로> -reportoutputpath <보고서 이름>)로 열 수 있다고 안내합니다. 서명하지 않은--store패키지를 키트가 받는지는 공식 문서에 설명이 없고 이 가이드는 Windows PC 에서 직접 확인하지 못했으니, 열리지 않으면--store없이 만든 테스트 빌드로 먼저 점검하세요. 테스트 빌드는 게시자 값이 테스트 인증서의 것으로 바뀌어 스토어 제출본과 다르므로 그 값에 관한 결과는 다를 수 있습니다. Flutter 문서는 보고서가 통과한 경우에도 중요한 경고와 정보를 담을 수 있다고 안내하니 끝까지 읽으세요.성공 판정 — HTML 과 XML 보고서가 만들어지고, 실패한 시험이 없으며, 경고는 읽고 판단했습니다.
-
제출을 만들고 가격 · 속성 · 연령 등급을 채웁니다. 앱 개요 페이지의 「제품 릴리스(Product release)」에서 「제출 시작(Start submission)」을 누르면 초안 상태의 제출이 생기고 채울 단계가 모두 나옵니다. 순서는 정해져 있지 않습니다.
- 가격 책정 및 가용성(Pricing and availability) — 시장(기본은 가능한 모든 시장) · 청중(기본은 퍼블릭) · 발견 가능성(기본은 스토어에서 검색 가능) · 일정(기본은 가능한 한 빨리) · 기본 가격(무료 포함)이 필수입니다.
- 속성(Properties) — 카테고리가 필수입니다. 앱이 개인정보에 접근 · 수집 · 전송하는지 표시하고, 그렇다면 개인정보 처리방침 URL 이 필수입니다. 그렇지 않다고 답해도 패키지가 선언한 기능 때문에 Microsoft 가 방침을 요구할 수 있고, 필요한 방침이 빠지면 인증이 실패할 수 있습니다. 회사 계정은 연락처 세부 정보도 필수입니다.
- 연령 등급(Age ratings) — 처음 제출할 때 IARC 설문의 모든 질문에 정확히 답합니다. 다른 스토어에서 받은 IARC 등급 ID 가 있으면 그 ID 를 줄 수 있습니다. 설문을 마치고 「저장 및 생성(Save and generate)」을 누르면 앱에 할당된 등급이 표시됩니다. 이 과정에서 게시자 표시 이름과 이메일 주소가 IARC 에 공유됩니다.
한 번 받은 등급은 이후 업데이트에도 쓰이고, 업데이트의 내용이 등급에 영향을 주면 「편집(Edit)」으로 설문을 다시 합니다. 정책 7.20 의 11.11.2 는 2026-10-22 부터 등급 정보를 계속 정확하게 유지하라고 정합니다.
성공 판정 — 연령 등급 페이지에 앱에 할당된 등급이 표시되고 계속 제출을 이어 갈 수 있습니다.
-
패키지를 올립니다. 「패키지(Packages)」 페이지의 업로드 칸에 5단계의
.msix파일을 끌어다 놓거나 찾아보기로 고릅니다. 패키지는 하나 이상 필요합니다. Learn 은 Windows 10 이상에서는.msix보다.msixupload를 올리라고 권하는데, 이 파일은 Visual Studio 로 패키징하면 만들어지고 충돌 분석용 심볼 파일(.appxsym)을 담습니다. 심볼 파일을 빼면 그 앱의 충돌 분석 · 디버깅 정보를 볼 수 없다고 Microsoft 는 밝힙니다.msix3.18.0 소스에서는.msixupload를 만드는 코드를 찾지 못했지만 업로드 칸은.msix도 받습니다. 검증하다 오류가 있으면 이유가 표시되고, 패키지를 지운 뒤 고쳐서 다시 올려야 합니다. 경고는 제출을 막지 않습니다. 「The name found in the package is not one of your reserved app names」 오류는 패키지 안의 이름이 예약한 이름과 다르다는 뜻이니 아래 「자주 겪는 문제」를 보세요.성공 판정 — 패키지가 「유효성 검사됨(Validated)」으로 표시되고, 패키지 섹션이 더는 「불완전(Incomplete)」으로 표시되지 않습니다.
-
스토어 목록(Store listings)을 채웁니다. 지원하는 언어 중 한 언어의 목록은 필수이고 모든 언어로 채우기를 권장합니다. 설명이 필수이고 스크린샷은 한 장 이상이 필요하며 네 장 이상을 권장합니다. 스토어 로고는 일부 OS 버전에서 필수이고 Flutter 문서는 300 × 300 px 로고를 올리라고 안내합니다. 규격은 아이콘 · 스플래시 · 스크린샷을 보세요. 올린 이미지는 다음 제출에도 유지됩니다.
성공 판정 — 설명과 스크린샷이 채워졌고, 다음 단계에서 제출할 때 파트너 센터가 빠진 항목을 알리지 않습니다.
-
제출 옵션을 채우고 인증을 위해 제출합니다. 「제출 옵션(Submission options)」 페이지를 채웁니다.
- 게시 보류 옵션(Publishing hold options) — 기본은 인증을 통과하면 바로 게시입니다. 「지금 게시를 선택할 때까지 이 제출을 게시하지 않도록 선택(Don't publish this submission until I select Publish now)」 옵션으로 직접 게시하거나, 24시간 이상 뒤의 날짜를 정해 그날 이후에 게시할 수 있습니다.
- 인증 참고 사항(Notes for certification) — 필수는 아니지만 테스트 계정 · 숨은 기능에 닿는 방법 · 업데이트에서 바뀐 내용을 적어 두면 인증 테스터가 앱을 제대로 시험하는 데 도움이 됩니다. 시험을 끝까지 할 수 없으면 인증에 실패할 수 있습니다. 사람이 읽으니 짧고 정중하게 쓰세요.
- 제한된 기능(Restricted capabilities) —
msix가 항상 더하는runFullTrust는 제한된 기능입니다. 패키지에서 이 기능이 발견되면 앱이 왜 필요로 하는지 이 페이지에 설명해야 승인되고, 인증 시간이 늘 수 있습니다. 승인받지 못하면 인증이 실패합니다. 이미 승인받은 기능은 일반적으로(Microsoft 표현: generally) 업데이트마다 다시 받지 않지만 기능을 더하면 다시 받습니다.
모두 채웠으면 앱 개요 페이지의 「인증을 위해 제출(Submit for certification)」을 누릅니다. 파트너 센터가 빠진 항목을 알려 줍니다.
성공 판정 — 제출이 접수되어 앱 상태가 「인증 중(In certification)」으로 표시됩니다.
-
인증을 기다리고 출시합니다. 인증은 영업일 기준 최대 3일이 걸릴 수 있습니다. 보안 시험(악성코드 검사), 기술 규정 준수 시험(Windows 앱 인증 키트), 콘텐츠 준수 시험 순으로 이루어집니다. 통과하면 기본 설정에서는 바로 게시가 시작되고, 게시는 몇 분이 걸리며 평균 15분 안에 고객이 스토어에서 앱을 볼 수 있습니다. 게시 단계가 시작되면 제출을 취소하거나 출시일을 바꿀 수 없습니다. 통과하지 못하면 인증 보고서가 어떤 시험이 실패했거나 어떤 정책을 지키지 못했는지 알려 주고, 고친 뒤 새 제출을 만들어 다시 인증을 받습니다. 거절 사유별 대응은 심사 거절 대응에 있습니다.
성공 판정 — 앱 상태가 「In the Store」(Learn 의 다른 곳에는 「In the Microsoft Store」, 한국어판에는 「스토어」)로 바뀌고 Microsoft Store 에서 앱 목록 페이지가 열립니다.
-
업데이트를 올립니다. 앱 개요 페이지의 「제품 릴리스」 오른쪽 「업데이트 시작(Start update)」을 누르면 이전 제출의 정보로 새 제출이 만들어집니다. 4단계대로
msix_version을 올려 5단계로 다시 패키징하고, 패키지 페이지에서 새 패키지를 올린 뒤 「인증을 위해 제출」을 누릅니다. 업데이트가 등급에 영향을 줄 수 있다면 연령 등급 설문도 다시 확인합니다. 설명 · 스크린샷 · 카테고리 · 가격만 바꾸는 변경은 새 패키지 없이 같은 방식으로 제출하고, 이 변경도 인증을 거칩니다. MSIX 앱의 업데이트는 일부 고객에게만 먼저 내보내는 단계적 출시(gradual rollout)를 쓸 수 있고, 진행 중인 롤아웃이 있으면 새 제출을 만들기 전에 마무리하거나 중단해야 합니다. CI 로 자동화하는 방법과 출시 중단은 업데이트와 단계적 출시에서 이어집니다.성공 판정 — 새 제출이 인증을 통과해 앱 상태가 다시 「In the Store」가 되고, 기존 사용자가 스토어를 통해 새 버전을 받습니다.
확인
- 패키지 식별 정보:
pubspec.yaml의identity_name·publisher·publisher_display_name이 파트너 센터 「제품 ID」의 값과,display_name이 예약한 이름과 글자 그대로 같습니다. - 버전: 패키지 버전의 네 번째 자리가 0 이고, 업데이트라면 이전에 올린 버전보다 높습니다.
- 빌드:
dart run msix:create --store가.msix파일 경로를 출력했고, Windows 앱 인증 키트 보고서에 실패한 시험이 없습니다. - 제출: 연령 등급이 할당됐고, 개인정보 처리방침 URL 이 필요한 앱이면 입력했으며,
runFullTrust사유를 제한된 기능 칸에 적었습니다. - 출시: 앱 상태가 「In the Store」이고 Microsoft Store 에서 앱 페이지가 열립니다.
자주 겪는 문제
「The name found in the package is not one of your reserved app names」 오류가 납니다
패키지 안의 이름이 파트너 센터에서 예약한 이름과 다르다는 뜻입니다. 패키지에 넣은 앱 이름(msix_config 의 display_name)이 예약한 이름과 글자 그대로 같은지 먼저 보세요. display_name 을 정하지 않으면 프로젝트 이름에서 밑줄을 뺀 값이 들어가 예약한 이름과 다를 수 있습니다. 이어서 앱의 「제품 ID」 페이지(제품 관리 아래)에서 앱에 ID 가 할당됐는지 확인하고 identity_name 과 publisher 도 그 값과 글자 그대로 같은지 비교하세요. ID 가 아직 없으면 만들 수 있고, 만들려면 이름을 예약해야 합니다. 패키지에서 쓰려는 이름을 아직 예약하지 않았다면 「제품 관리」의 「앱 이름 예약 관리(Manage app name reservations)」에서 이름을 입력하고 「앱 이름 예약(Reserve app name)」을 누릅니다. 이름을 쓸 수 없으면 다른 앱이 이미 예약했을 수 있으니, 이미 그 이름으로 게시했거나 권리가 있다고 생각되면 Microsoft 지원에 문의하세요.
버전 때문에 패키지를 올릴 수 없습니다
스토어용 패키지는 버전의 네 번째 자리가 0 이어야 합니다. msix_version 의 마지막 숫자를 0 으로 되돌리세요. 첫 자리는 0 일 수 없고 각 자리는 0 에서 65535 사이여야 합니다. pubspec.yaml 의 버전이 0. 으로 시작하면 msix_version 을 직접 정하세요.
새 패키지를 올렸는데 오류가 나거나 기존 사용자가 새 버전을 받지 못합니다
스토어는 기기에 맞는 가장 높은 버전의 패키지를 배포합니다. pubspec.yaml 의 + 뒤 빌드 번호만 올리면 msix 3.18.0 이 만드는 패키지 버전은 바뀌지 않습니다. 스토어가 각 패키지를 구별하는 전체 ID 는 유일해야 하고 같은 버전의 패키지는 같은 아키텍처를 가질 수 없다고 Learn 이 밝히니, 이미 올린 패키지와 버전과 아키텍처가 같으면 올릴 수 없거나 새 버전으로 인정되지 않을 수 있습니다. msix_version 의 앞 세 자리를 올려 다시 패키징하세요. 단계적 출시를 켰다면 정한 비율의 고객에게만 먼저 나갑니다.
runFullTrust 때문에 인증이 오래 걸리거나 실패합니다
runFullTrust 는 제한된 기능이라 제출 옵션에서 사유를 설명해야 승인되고, 승인 과정에서 인증이 더 걸릴 수 있습니다. 승인되지 않으면 인증이 실패하고 인증 보고서에 피드백이 담깁니다. 사유는 앱이 이 기능으로 무엇을 하는지 가능한 한 구체적으로 적으세요. 정책 10.6 은 선언하는 기능이 제품의 기능과 정당하게 관련돼야 한다고 정합니다.
개인정보 처리방침을 넣지 않았다고 인증이 실패했습니다
속성 페이지에서 개인정보에 접근 · 수집 · 전송하지 않는다고 답해도 Microsoft 는 패키지가 선언한 기능에 따라 방침을 요구할 수 있고, 필요한 방침이 빠지면 인증이 실패할 수 있습니다. 정책 10.5.1 은 Win32 제품이 개인정보에 접근하는 제품 유형이라 항상 방침이 있어야 한다고 정합니다. 방침 URL 을 속성 페이지에 입력하고 새 제출로 다시 인증을 받으세요. 방침에 담을 내용은 개인정보와 권한을 보세요.
스토어용으로 만든 패키지가 이 PC 에 설치되지 않습니다
--store 는 서명하지 않은 제출용 패키지를 만듭니다. msix 3.18.0 은 --store 일 때 서명 단계를 건너뛰고, 스토어가 인증을 통과한 패키지에 서명합니다. 이 PC 에서 직접 써 보려면 --store 없이 테스트 빌드를 만드세요. pubspec.yaml 에 store: true 를 적어 두었다면 그 줄부터 지워야 합니다 — --store 를 빼거나 --no-store 를 써도 스토어용으로 만들어집니다. 기본 설정은 자체 서명 테스트 인증서로 서명합니다.
Flutter 문서가 말하는 「Microsoft Partner Network」에 가입해야 하나요?
Flutter 의 Windows 배포 문서는 Microsoft Partner Network 에 가입해야 제출할 수 있다고 적지만, Microsoft Learn 의 개발자 계정 안내에는 그 단계가 없습니다. Learn 문서는 storedeveloper.microsoft.com 에서 개인 또는 회사 개발자 계정을 만들면 파트너 센터로 이어진다고 안내합니다. 이 가이드는 Learn 문서를 따랐습니다.
MSIX 로도 EXE/MSI 로도 올릴 수 있나요?
Microsoft 는 개발자의 필요에 따라 두 형식을 모두 스토어에 제출할 수 있다고 안내합니다. 위 「MSIX 와 EXE/MSI 경로 비교」의 차이(서명 · 호스팅 · 업데이트)를 확인하고 고르세요.
다음 단계
제출 직전에는 제출 전 체크리스트의 Microsoft Store 항목으로 한 번 더 점검하세요. 출시한 뒤의 업데이트와 단계적 출시와 심사 거절 대응은 출시 후 운영에서 이어집니다. 같은 Flutter 앱을 다른 스토어에도 낸다면 Google Play 편을 보고, 그 밖의 스토어는 스토어별 안내에서 고르세요.
출처
- learn.microsoft.com/en-us/windows/apps/publish/partner-center/open-a-developer-account
- learn.microsoft.com/en-us/windows/apps/publish/whats-new-individual-developer
- learn.microsoft.com/en-us/windows/apps/publish/publish-your-app/msix/reserve-your-apps-name
- learn.microsoft.com/ko-kr/windows/apps/publish/publish-your-app/msix/reserve-your-apps-name
- learn.microsoft.com/en-us/windows/apps/publish/publish-your-app/msix/create-app-submission
- learn.microsoft.com/ko-kr/windows/apps/publish/publish-your-app/msix/create-app-submission
- learn.microsoft.com/en-us/windows/apps/publish/publish-your-app/msix/app-package-requirements
- learn.microsoft.com/ko-kr/windows/apps/publish/publish-your-app/msix/app-package-requirements
- learn.microsoft.com/en-us/windows/apps/publish/publish-your-app/msix/upload-app-packages
- learn.microsoft.com/en-us/windows/apps/publish/publish-your-app/msix/price-and-availability
- learn.microsoft.com/en-us/windows/apps/publish/publish-your-app/msix/enter-app-properties
- learn.microsoft.com/en-us/windows/apps/publish/publish-your-app/msix/age-ratings
- learn.microsoft.com/en-us/windows/apps/publish/publish-your-app/msix/manage-submission-options
- learn.microsoft.com/en-us/windows/apps/publish/publish-your-app/msix/app-certification-process
- learn.microsoft.com/en-us/windows/apps/publish/publish-your-app/msix/resolve-submission-errors
- learn.microsoft.com/ko-kr/windows/apps/publish/publish-your-app/msix/resolve-submission-errors
- learn.microsoft.com/en-us/windows/apps/publish/publish-your-app/msix/publish-update-to-your-app-on-store
- learn.microsoft.com/ko-kr/windows/apps/publish/publish-your-app/msix/publish-update-to-your-app-on-store
- learn.microsoft.com/en-us/windows/apps/publish/store-policies
- learn.microsoft.com/en-us/windows/apps/publish/store-policies-change-history
- learn.microsoft.com/en-us/windows/apps/package-and-deploy/app-capability-declarations
- learn.microsoft.com/en-us/windows/apps/distribute-through-store/how-to-distribute-your-win32-app-through-microsoft-store
- learn.microsoft.com/en-us/windows/apps/publish/publish-your-app/msi/app-package-requirements
- learn.microsoft.com/en-us/windows/apps/publish/publish-your-app/msi/create-app-submission
- learn.microsoft.com/en-us/windows/apps/publish/publish-your-app/msi/app-certification-process
- learn.microsoft.com/en-us/windows/apps/publish/publish-your-app/msi/publish-update-to-your-app-on-store
- learn.microsoft.com/en-us/windows/uwp/debug-test-perf/windows-app-certification-kit
- docs.flutter.dev/deployment/windows
- docs.flutter.dev/platform-integration/windows/building
- docs.flutter.dev/platform-integration/windows/setup
- docs.flutter.dev/reference/supported-platforms
- pub.dev/packages/msix
- pub.dev/api/archives/msix-3.18.0.tar.gz
- learn.microsoft.com/en-us/windows/apps/publish/gradual-package-rollout
- learn.microsoft.com/en-us/windows/apps/publish/store-policy-archive/store-policy-7-19
- learn.microsoft.com/en-us/windows/apps/publish/view-app-identity-details
- learn.microsoft.com/ko-kr/windows/apps/publish/publish-your-app/msi/create-app-submission
- learn.microsoft.com/ko-kr/windows/apps/publish/publish-your-app/msix/age-ratings
- learn.microsoft.com/ko-kr/windows/apps/publish/publish-your-app/msix/manage-submission-options
- learn.microsoft.com/ko-kr/windows/apps/publish/publish-your-app/msix/app-certification-process