MSIX 앱에 대한 앱 패키지 요구 사항
요구 사항
Microsoft Store에 제출할 앱 패키지를 준비하려면 다음 지침을 따르세요.
Microsoft Store용으로 앱 패키지를 빌드하기 전에
Windows 앱 인증 키트를 사용해 앱을 테스트해야 합니다. 또한 다양한 유형의 하드웨어에서 앱을 테스트하는 것이 좋습니다. 앱을 인증하고 Microsoft Store에서 사용할 수 있도록 할 때까지 개발자 라이선스가 있는 컴퓨터에서만 앱을 설치하고 실행할 수 있습니다.
Microsoft Visual Studio를 사용해 앱 패키지 빌드
Microsoft Visual Studio를 개발 환경으로 사용한다면, 앱 패키지를 빠르고 쉽게 만들 수 있는 기본 제공 도구가 이미 포함되어 있습니다. 자세한 내용은 패키징 앱을 참조하세요.
참고 항목
모든 파일 이름에는 ANSI를 사용해야 합니다.
Visual Studio에서 패키지를 만들 때, 개발자 계정과 연결된 동일한 계정으로 로그인했는지 확인합니다. 패키지 매니페스트의 일부에는 계정과 관련된 특정 세부 정보가 있습니다. 이 정보는 자동으로 검색되고 추가됩니다. 매니페스트에 정보를 추가하지 않으면 패키지 업로드 오류가 발생할 수 있습니다.
앱의 UWP 패키지를 빌드할 때 Visual Studio는 .msix 또는 appx 파일이나 .msixupload 또는 .appxupload 파일을 만들 수 있습니다. UWP 앱의 경우 항상 패키지 페이지에서 .msixupload 또는 .appxupload 파일을 업로드하는 것이 좋습니다. Microsoft Store용 UWP 앱 패키징에 대한 자세한 내용은 Visual Studio를 사용하여 UWP 앱 패키징을 참조하세요.
앱의 패키지는 신뢰할 수 있는 인증 기관에 기반을 둔 인증서로 서명할 필요가 없습니다.
앱 번들
UWP 앱의 경우 Visual Studio는 앱 번들(.msixbundle 또는 .appxbundle)을 생성하여 사용자가 다운로드하는 앱의 크기를 줄일 수 있습니다. 이는 특정 버전의 Microsoft DirectX에 적용되는 언어별 자산, 다양한 이미지 크기 조정 자산 또는 리소스를 정의한 경우 유용합니다.
참고 항목
하나의 앱 번들에는 모든 아키텍처에 대한 패키지가 포함될 수 있습니다.
앱 번들을 사용하면 사용자는 가능한 모든 리소스 대신 관련 파일만 다운로드합니다. 앱 번들에 대한 자세한 내용은 앱 패키징 및 Visual Studio를 사용하여 UWP 앱 패키징을 참조하세요.
수동으로 앱 패키지 빌드
Visual Studio를 사용해 패키지를 생성하지 않는 경우, 패키지 매니페스트를 수동으로 생성해야 합니다.
전체 매니페스트 세부 정보 및 요구 사항은 앱 패키지 매니페스트 문서를 검토해야 합니다. 인증을 통과하기 위해 매니페스트는 패키지 매니페스트 스키마를 따라야 합니다.
매니페스트에는 계정과 앱에 대한 몇 가지 특정한 정보가 포함되어야 합니다. 대시보드에서 앱 개요 페이지의 제품 관리 섹션에서 앱 ID 세부 정보 보기를 확인하여 이 정보를 찾을 수 있습니다.
참고 항목
매니페스트의 값은 대/소문자를 구분합니다. 공백과 기타 문장 부호도 일치해야 합니다. 값을 신중하게 입력한 후 올바른지 검토해야 합니다.
앱 번들(.msixbundle 또는 .appxbundle)은 다른 매니페스트를 사용합니다. 앱 번들 매니페스트에 대한 세부 정보 및 요구 사항에 대한 번들 매니페스트 문서를 검토합니다. .msixbundle 또는 .appxbundle에서 포함된 각 패키지의 매니페스트는 Identity 요소의 ProcessorArchitecture 특성을 제외하고 동일한 요소와 특성을 사용해야 합니다.
팁
패키지를 제출하기 전에 반드시 Windows 앱 인증 키트를 실행합니다. 이렇게 하면 인증이나 제출 실패를 일으킬 수 있는 문제가 매니페스트에 있는지 확인할 수 있습니다.
패키지 형식 요구 사항
앱의 패키지는 이러한 요구 사항을 준수해야 합니다.
앱 패키지 속성 | 요건 |
---|---|
패키지 크기 | .msixbundle 또는 .appxbundle: 번들당 최대 25GB Windows 10 또는 Windows 11을 대상으로 하는 .msix 또는 .appx 패키지: 패키지당 최대 25GB |
블록 맵 해시 | SHA2-256 알고리즘 |
지원되는 버전
UWP 앱의 경우 모든 패키지는 스토어에서 지원하는 Windows 10 또는 Windows 11 버전을 대상으로 해야 합니다. 패키지에서 지원되는 버전은 앱 매니페스트의 TargetDeviceFamily 요소의 MinVersion 및 MaxVersionTested 특성에 나타나야 합니다.
StoreManifest XML 파일
StoreManifest.xml은 앱 패키지에 포함될 수 있는 선택적 구성 파일입니다. 이 구성 파일은 앱을 Microsoft Store 디바이스 앱으로 선언하거나 패키지를 디바이스에 적용하려면 필요한 요구 사항을 선언하는 등과 같이 패키지 매니페스트에서 다루지 않는 기능을 사용하도록 설정하기 위한 것입니다. 사용하는 경우 StoreManifest.xml은 앱 패키지와 함께 제출되며 앱 기본 프로젝트의 루트 폴더에 있어야 합니다. 자세한 내용은 StoreManifest 스키마를 참조하세요.
패키지 버전 번호 지정
제공하는 각 패키지에는 버전 번호가 있어야 합니다(앱 매니페스트에 있는 패키지/ID 요소의 버전 속성값으로 제공). Microsoft Store에서는 버전 번호와 관련 특정 규칙을 적용하며, 이는 OS 버전마다 약간 다르게 작동합니다.
참고 항목
이 항목에서는 "패키지"를 참조하지만 별도로 언급되지 않은 한 .msix/.appx 파일과 .msixbundle/.appxbundle 파일 모두에 동일한 버전 번호 규칙이 적용됩니다.
Windows 10 및 11 패키지의 버전 번호 매기기
Important
Windows 10 또는 Windows 11(UWP) 패키지의 경우, 버전 번호의 마지막(네 번째) 섹션은 스토어용으로 예약되어 있으므로 (스토어에서 이 섹션의 값을 변경할 수 있더라도) 패키지를 빌드할 때에는 0으로 놔둬야 합니다. 다른 섹션은 0에서 65535 사이의 정수로 설정해야 합니다(0일 수 없는 첫 번째 섹션 제외).
게시된 제출에서 UWP 패키지를 선택할 때, Microsoft Store는 항상 고객의 Windows 10 또는 Windows 11 장치에 적용할 수 있는 가장 높은 버전의 패키지를 사용합니다. 이렇게 하면 유연성이 향상되고 특정 장치 유형에서 고객에게 어떤 패키지가 제공될지 제어할 수 있습니다. 중요한 것은 이러한 패키지를 어떠한 순서로도 제출할 수 있다는 점입니다. 각 후속 제출에 반드시 더 높은 버전의 패키지를 제공해야 하는 제약이 없습니다.
동일한 버전 번호로 여러 UWP 패키지를 제공할 수 있습니다. 그러나 버전 번호를 공유하는 패키지들도 동일한 아키텍처를 가질 수는 없습니다. 스토어에서 각 패키지에 사용하는 전체 ID는 고유해야 하기 때문입니다. 자세한 내용은 ID를 참조하세요.
동일한 버전 번호를 사용하는 여러 UWP 패키지를 제공하는 경우, (스토어에서 고객의 장치에 제공할 패키지를 결정할 때) (x64, x86, Arm, 중립 순으로) 아키텍처를 사용해 더 높은 순위의 패키지를 결정합니다. 동일한 버전 번호를 사용하는 앱 번들의 순위를 지정하는 경우, 번들 내에서 가장 높은 아키텍처 순위가 고려됩니다. x64 패키지가 포함된 앱 번들은 x86 패키지만 포함된 앱 번들보다 순위가 높습니다.
이렇게 하면 시간이 흐르면서 앱을 발전시킬 수 있는 유연성을 많이 확보할 수 있습니다. 더 낮은 버전 번호를 사용하는 새 패키지를 업로드하고 제출해 이전에 지원하지 않던 Windows 10 또는 Windows 11 장치에 대한 지원을 추가하거나, 하드웨어나 OS 기능을 활용하기 위해 보다 엄격한 종속성을 가진 더 높은 버전의 패키지를 추가하거나, 기존의 일부 또는 전체 고객 기반에 대한 업데이트 역할을 하는 더 높은 버전의 패키지를 추가할 수 있습니다.
다음의 예제에서는 버전 번호 매기기를 관리함으로써 여러 제출을 통해 고객에게 의도한 패키지를 전달하는 방법을 보여 줍니다.
예: 여러 제출을 통해 단일 패키지로 이동
Windows 10을 사용하면 어디서나 실행되는 단일 코드베이스를 작성할 수 있습니다. 이렇게 하면 새로운 크로스 플랫폼 프로젝트를 훨씬 쉽게 시작할 수 있습니다. 하지만 여러 이유로 인해 지금 바로 기존 코드베이스를 병합해 단일 프로젝트를 만들고 싶지 않을 수 있습니다.
패키지 버전 관리 규칙을 사용해 고객을 유니버설 장치 제품군용 단일 패키지로 점진적으로 이동시키는 동시에, 특정 장치 제품군에 대한 여러 중간 업데이트(Windows 10 API를 이용한 업데이트 포함)를 전달할 수 있습니다. 아래 예제에서는 동일한 앱에 대한 일련의 제출에 대해 동일한 규칙이 일관되게 적용되는 방법을 보여 줍니다.
제출 | 콘텐츠 | 고객 환경 |
---|---|---|
1 | - 패키지 버전: 1.1.10.0 - 장치 제품군: Windows.Desktop, minVersion 10.0.10240.0 |
- Windows 10 및 11 Desktop 빌드 10.0.10240.0 이상의 디바이스는 1.1.10.0을 가져옵니다. - 다른 장치 제품군은 앱 구매와 설치를 할 수 없습니다. |
2 | - 패키지 버전: 1.1.10.0 - 장치 제품군: Windows.Desktop, minVersion 10.0.10240.0 - 패키지 버전: 1.0.0.0 - 장치 제품군: Windows.Universal, minVersion 10.0.10240.0 |
- Windows 10 및 11 Desktop 빌드 10.0.10240.0 이상의 디바이스는 1.1.10.0을 가져옵니다. - 다른(데스크톱이 아닌) 디바이스 패밀리가 도입되면 1.0.0.0을 받습니다. - 앱이 이미 설치된 데스크톱 디바이스에는 업데이트가 표시되지 않습니다(사용 가능한 최상의 버전 1.1.10.0이 있고 1.0.0.0보다 높기 때문). |
3 | - 패키지 버전: 1.1.10.0 - 장치 제품군: Windows.Desktop, minVersion 10.0.10240.0 - 패키지 버전: 1.1.5.0 - 장치 제품군: Windows.Universal, minVersion 10.0.10250.0 - 패키지 버전: 1.0.0.0 - 장치 제품군: Windows.Universal, minVersion 10.0.10240.0 |
- Windows 10 및 11 Desktop 빌드 10.0.10240.0 이상의 디바이스는 1.1.10.0을 가져옵니다. - 빌드 10.0.10250.0 이상에서 도입된 기타(데스크톱이 아닌) 디바이스 패밀리는 1.1.5.0을 받습니다. - 빌드 >=10.0.10240.0 및 10.010250.0과 < 함께 도입된 기타(데스크톱이 아닌) 디바이스 패밀리는 1.1.0.0을 가져옵니다. - 앱이 이미 설치된 데스크톱 디바이스에는 업데이트가 표시되지 않습니다(이미 사용 가능한 버전 1.1.10.0이 1.1.5.0 및 1.0.0.0보다 높기 때문). |
4 | - 패키지 버전: 2.0.0.0 - 장치 제품군: Windows.Universal, minVersion 10.0.10240.0 |
- Windows 10 및 11 빌드 v10.0.10240.0 이상의 모든 디바이스 패밀리에 있는 모든 고객은 패키지 2.0.0.0을 받습니다. |
참고 항목
모든 경우에 고객 디바이스는 가능한 가장 높은 적격 버전 번호의 패키지를 받게 됩니다. 예를 들어, 위의 세 번째 제출에서는 모든 데스크톱 장치가 OS 버전 10.0.10250.0 이상을 가지고 있기 때문에 v1.1.5.0을 수락할 수 있더라도 v1.1.10.0을 가져옵니다. 1.1.10.0이 이들에게 가용한 가장 높은 버전 번호이므로, 이 패키지를 얻게 됩니다.
신규 구입을 위해 버전 번호 매기기를 사용해 이전에 제공된 패키지로 롤백
패키지의 복사본을 보관하는 경우 릴리스에 문제가 있으면 스토어의 앱 패키지를 이전 Windows 10 패키지로 롤백할 수 있습니다. 이는 문제를 해결하는 동안 고객의 혼란을 최소화할 수 있는 임시 방편입니다.
이렇게 하려면 새 제출을 만듭니다. 문제가 있는 패키지를 제거한 후 스토어에서 제공하려는 이전의 패키지를 업로드합니다. (이전 패키지에는 이전 버전 번호가 있기 때문에) 롤백하려는 패키지를 이미 받은 고객은 문제가 있는 패키지를 계속 보유하게 됩니다. 그러나 이렇게 하면 다른 사람이 문제가 있는 패키지를 구입하는 것을 막을 수 있는 동시에 스토어에서 앱이 계속 가용한 상태가 됩니다.
문제가 있는 패키지를 이미 받은 고객에 대한 문제를 해결하려면 최대한 빨리 잘못된 패키지보다 버전 번호가 더 높은 새 Windows 10 패키지를 제출하면 됩니다. 해당 제출이 인증 프로세스를 거치면, 더 높은 버전 번호를 가지고 있기 때문에 모든 고객이 새 패키지로 업데이트됩니다.
지원되는 언어
100개 이상의 언어로 Microsoft Store에 앱을 제출할 수 있습니다.
앱의 언어 구성에 대한 자세한 내용은 세계화 및 지역화 및 사용자 프로필 언어 및 앱 매니페스트 언어 이해를 참조하세요. 또한 여러 언어를 지원하는 앱을 작성하는 데 도움이 되는 다국어 앱 도구 키트도 있습니다.
지원되는 언어 목록
다음은 Microsoft Store에서 지원하는 언어입니다. 앱은 다음 언어 중 하나 이상을 지원해야 합니다.
여기에 포함되지 않은 언어 코드는 스토어에서 지원하지 않습니다. 아래 나열된 언어 코드 이외의 언어 코드를 대상으로 하는 패키지는 포함하지 않는 것이 좋습니다. 이러한 패키지는 고객에게 배포되지 않으며 인증이 지연되거나 실패할 수 있습니다.
language_name | 지원되는 언어 코드 |
---|---|
아랍어 | ar, ar-sa, ar-ae, ar-bh, ar-dz, ar-eg, ar-iq, ar-jo, ar-kw, ar-lb, ar-ly, ar-ma, ar-om, ar-qa, ar-sy, ar-tn, ar-ye |
아프리칸스어 | af, af-za |
알바니아어 | sq, sq-al |
암하라어 | am, am-et |
아르메니아 | hy, hy-am |
아삼어 | as, as-in |
아제르바이잔어 | az-arab, az-arab-az, az-cyrl, az-cyrl-az, az-latn, az-latn-az |
바스크어(바스크) | eu, eu-es |
벨로루시어 | be, be-by |
벵골어 | bn, bn-bd, bn-in |
보스니아 헤르체고비나어 | bs, bs-cyrl, bs-cyrl-ba, bs-latn, bs-latn-ba |
불가리아어 | bg, bg-bg |
카탈로니아어 | ca, ca-es, ca-es-valencia |
체로키어 | chr-cher, chr-cher-us, chr-latn |
중국어(간체) | zh-Hans, zh-cn, zh-hans-cn, zh-sg, zh-hans-sg |
중국어(번체) | zh-Hant, zh-hk, zh-mo, zh-tw, zh-hant-hk, zh-hant-mo, zh-hant-tw |
크로아티아어 | hr, hr-hr, hr-ba |
체코어 | cs, cs-cz |
덴마크어 | da, da-dk |
다리어 | prs, prs-af, prs-arab |
네덜란드어 | nl, nl-nl, nl-be |
영어 | en, en-au, en-ca, en-gb, en-ie, en-in, en-nz, en-sg, en-us, en-za, en-bz, en-hk, en-id, en-jm, en-kz, en-mt, en-my, en-ph, en-pk, en-tt, en-vn, en-zw, en-053, en-021, en-029, en-011, en-018, en-014 |
에스토니아어 | et, et-ee |
필리핀어 | fil, fil-latn, fil-ph |
핀란드어 | fi, fi-fi |
프랑스어/French | fr, fr-be , fr-ca , fr-ch , fr-fr , fr-lu, fr-015, fr-cd, fr-ci, fr-cm, fr-ht, fr-ma, fr-mc, fr-ml, fr-re, frc-latn, frp-latn, fr-155, fr-029, fr-021, fr-011 |
갈리시아어 | gl, gl-es |
그루지야 문자 | ka, ka-ge |
독일어 | de, de-at, de-ch, de-de, de-lu, de-li |
그리스어 | el, el-gr |
구자라트어 | gu, gu-in |
하우사어 | ha, ha-latn, ha-latn-ng |
히브리어 | 그, 허일 |
힌디어 | hi, hi-in |
헝가리어 | hu, hu-hu |
아이슬란드어 | is, is-is |
이그보어 | ig-latn, ig-ng |
인도네시아어 | id, id-id |
이누크티투트어 (라틴어) | iu-cans, iu-latn, iu-latn-ca |
아일랜드어 | ga, ga-ie |
코사어 | xh, xh-za |
줄루어 | zu, zu-za |
이탈리아어 | it, it-it, it-ch |
일본어 | ja , ja-jp |
칸나다어 | kn, kn-in |
카자흐어 | kk, kk-kz |
크메르어 | km, km-kh |
키체어 | quc-latn, qut-gt, qut-latn |
키냐르완다어 | rw, rw-rw |
KiSwahili | sw, sw-ke |
코카니어 | kok, kok-in |
한국어 | ko, ko-kr |
쿠르드어 | ku-arab, ku-arab-iq |
키르기스어 | ky-kg, ky-cyrl |
라오스어 | lo, lo-la |
라트비아어 | lv, lv-lv |
리투아니아어 | lt, lt-lt |
룩셈부르크어 | lb, lb-lu |
마케도니아어 | mk, mk-mk |
말레이어 | ms, ms-bn, ms-my |
말라얄람어 | ml, ml-in |
몰타어 | mt, mt-mt |
마오리어 | mi, mi-latn, mi-nz |
마라티어 | mr, mr-in |
몽골어(키릴 자모) | mn-cyrl, mn-mong, mn-mn, mn-phag |
네팔어 | ne, ne-np |
노르웨이어 | nb, nb-no, nn, nn-no, no, no-no, |
오디아어 | 또는, 또는-in |
페르시아어 | fa, fa-ir |
폴란드어 | pl, pl-pl |
포르투갈어(브라질) | pt-br |
포르투갈어(포르투갈) | pt, pt-pt |
펀잡어 | pa, pa-arab, pa-arab-pk, pa-deva, pa-in |
케추아어 | quz, quz-bo, quz-ec, quz-pe |
루마니아어 | ro, ro-ro |
러시아어 | ru , ru-ru |
스코틀랜드 게일어 | gd-gb, gd-latn |
세르비아어(라틴 문자) | sr-Latn, sr-latn-cs, sr, sr-latn-ba, sr-latn-me, sr-latn-rs |
세르비아어(키릴 자모) | sr-cyrl, sr-cyrl-ba, sr-cyrl-cs, sr-cyrl-me, sr-cyrl-rs |
Sesotho sa Leboa | nso, nso-za |
세츠와나어 | tn, tn-bw, tn-za |
신디어 | sd-arab, sd-arab-pk, sd-deva |
싱할라어 | si, si-lk |
슬로바키아어 | sk, sk-sk |
슬로베니아어 | sl, sl-si |
스페인어 | es, es-cl, es-co, es-es, es-mx, es-ar, es-bo, es-cr, es-do, es-ec, es-gt, es-hn, es-ni, es-pa, es-pe, es-pr, es-py, es-sv, es-us, es-uy, es-ve, es-019, es-419 |
스웨덴어 | sv, sv-se, sv-fi |
타지크어(키릴 자모) | tg-arab, tg-cyrl, tg-cyrl-tj, tg-latn |
타밀어 | ta, ta-in |
타타르어 | tt-arab, tt-cyrl, tt-latn, tt-ru |
텔루구어 | te, te-in |
태국어 | th, th-th |
티그리냐어 | ti, ti-et |
터키어 | tr, tr-tr |
투르크멘어 | tk-cyrl, tk-latn, tk-tm, tk-latn-tr, tk-cyrl-tr |
우크라이나어 | uk, uk-ua |
우르두어 | your, your-pk |
위구르어 | ug-arab, ug-cn, ug-cyrl, ug-latn |
우즈베크어(라틴 문자) | uz, uz-cyrl, uz-latn, uz-latn-uz |
베트남어 | vi, vi-vn |
웨일스어 | cy, cy-gb |
월라프어 | wo, wo-sn |
요루바어 | yo-latn, yo-ng |
Windows developer