Windows 데스크톱 브리지 앱 테스트
데스크톱 브리지 앱(코드에서 MSIX 패키지 빌드하기 참조)은 데스크톱 브리지를 사용하여 UWP(Universal Windows Platform) 앱으로 변환된 Windows 데스크톱 앱입니다. 변환 후에는 Windows 데스크톱 애플리케이션이 Windows 10 데스크톱을 대상으로 하는 UWP 앱 패키지(.appx 또는 .appxbundle)의 형태로 패키징되고, 서비스되고, 배포됩니다.
필수 테스트와 선택적 테스트
Windows 데스크톱 브리지 앱의 선택적 테스트는 정보만을 제공하며 Microsoft Store 온보딩 시 앱을 평가하는 데 사용되지 않습니다. 더 우수한 품질의 앱을 만들려면 이러한 테스트 결과를 조사하는 것이 권장됩니다. Store 온보딩에 대한 전반적인 성공/실패는 이러한 선택적 테스트가 아닌 필수 테스트에 의해 결정됩니다.
현재 선택적 테스트
1. 디지털 서명된 파일 테스트
백그라운드
이 테스트는 모든 PE(이식 가능한 실행 파일) 파일에 유효한 서명이 포함되어 있는지 확인합니다. 디지털 서명된 파일이 있으면 사용자가 해당 소프트웨어가 정품인지 알 수 있습니다.
테스트 세부 정보
이 테스트는 패키지의 모든 PE 파일을 검색하고 서명에 대한 파일의 헤더를 검사합니다. 모든 PE 파일을 디지털로 서명하는 것이 좋습니다. PE 파일이 서명되지 않으면 경고가 생성됩니다.
수정 작업
항상 파일을 디지털로 서명하는 것이 좋습니다. 자세한 정보는 코드 서명 소개를 참조하세요.
2. 파일 연결 동사
백그라운드
이 테스트는 패키지 레지스트리를 검색하여 파일 연결 동사가 등록되어 있는지 검사합니다.
테스트 세부 정보
변환된 데스크톱 앱을 광범위한 Windows 런타임 API를 사용하여 향상시킬 수 있습니다. 이 테스트는 앱의 UWP 바이너리에서 비-Windows 런타임 API를 호출하지 않는지 검사합니다. UWP 바이너리에는 AppContainer 플래그 설정이 있습니다.
수정 작업
이러한 확장에 대한 설명과 올바르게 사용하는 방법은 Desktop에서 UWP Bridge로: 앱 확장을 참조하세요.
3. 디버그 구성 테스트
이 테스트는 .msix 또는 .appx가 디버그 빌드가 아닌지 확인합니다.
백그라운드
Microsoft Store용으로 인증을 받으려면 앱이 디버그용으로 컴파일되지 않아야 하고 실행 파일의 디버그 버전을 참조하면 안 됩니다. 또한 앱에 최적화된 코드를 빌드해야 이 테스트를 통과할 수 있습니다.
테스트 세부 정보
앱을 테스트하여 디버그 빌드가 아니고 디버그 프레임워크에 링크되지 않았는지 확인합니다.
수정 작업
- 앱을 릴리스 빌드로 빌드한 후 Microsoft Store에 제출합니다.
- 올바른 버전의 .NET Framework를 설치했는지 확인합니다.
- 앱이 디버그 버전의 프레임워크에 연결되어 있지 않은지, 릴리스 버전으로 빌드되고 있는지 확인합니다. 이 앱에 .NET 구성 요소가 포함되어 있을 경우 올바른 버전의 .NET Framework를 설치했는지 확인합니다.
4. 패키지 온전성 테스트
4.1 보관 파일 사용량
백그라운드
이 테스트는 Windows 10 S 머신에서 실행되는 보다 나은 데스크톱 브리지 앱을 만드는 데 도움이 됩니다.
테스트 세부 정보
이 테스트는 보관된 파일 또는 자동 압축 풀기 콘텐츠 내의 모든 실행 파일을 검사합니다. 이러한 형식의 콘텐츠에 포함된 실행 파일은 Windows Store에 온보딩 시 서명되지 않으며, 앱이 Windows 10 S 시스템에서 예상대로 실행되지 않을 수 있습니다.
수정 작업
- 테스트에서 플래그가 지정된 파일을 평가하여 Windows 10 S 환경에서 앱을 실행하는 데 영향이 있는지 파악하는 것이 좋습니다.
- 앱에 영향이 있다면 보관된 파일에서 실행 파일을 제거하고, 디스크에 실행 파일을 배치할 때 자동 압축 풀기 보관 파일을 사용하지 마세요. 이렇게 하면 앱 기능이 손상되는 것을 방지할 수 있습니다.
4.2 차단된 실행 파일
백그라운드
이 테스트는 Windows 10 S 머신에서 실행되는 보다 나은 데스크톱 브리지 앱을 만드는 데 도움이 됩니다.
테스트 세부 정보
이 테스트는 앱이 Windows 10 S 시스템에서 제한된 실행 파일을 시작하려고 시도하는지 검사합니다. 이 기능을 사용하는 앱은 Windows 10 S 시스템에서 예상대로 실행되지 않을 수 있습니다.
수정 작업
- 테스트에서 플래그가 지정된 항목 중 앱의 일부가 아닌 실행 파일을 시작하려는 호출을 파악하고, 이러한 호출을 제거합니다.
- 플래그가 지정된 파일이 애플리케이션의 일부인 경우 경고를 무시해도 됩니다.
현재 필수 테스트
1. 앱 기능 테스트(특수한 사용 기능)
백그라운드
특수 사용 기능은 특정 시나리오를 위한 것입니다. 회사 계정만 이러한 기능을 사용할 수 있습니다.
테스트 세부 정보
앱이 아래의 기능 중 하나를 선언하는지를 검사합니다.
- EnterpriseAuthentication
- SharedUserCertificates
- DocumentsLibrary
이러한 기능 중 하나라도 선언된 경우, 테스트는 사용자에게 경고를 표시합니다.
수정 작업
특수 사용 기능은 앱에 필요하지 않은 경우 제거하는 것이 좋습니다. 또한 이 기능을 사용할 때 추가 온보딩 정책 검토가 적용됩니다.
2. 앱 매니페스트 리소스 테스트
2.1 앱 리소스 유효성 검사
앱의 매니페스트에 선언된 문자열 또는 이미지가 잘못된 경우 앱이 제대로 설치되지 않을 수 있습니다. 앱을 설치할 때 이러한 오류가 발생하면 앱의 로고나 기타 이미지가 올바르게 표시되지 않을 수 있습니다.
테스트 세부 정보
앱 매니페스트에 정의된 리소스를 검사하여 리소스가 있고 유효한지 확인합니다.
수정 작업
다음의 테이블을 지침으로 사용합니다.
오류 메시지 | 의견 |
---|---|
{image name} 이미지는 Scale 및 TargetSize 한정자를 정의합니다. 한 번에 하나의 한정자만 정의할 수 있습니다. | 이미지를 서로 다른 해상도로 사용자 지정할 수 있습니다. 실제 메시지에서는 오류가 있는 이미지 이름이 {image name}에 포함됩니다. 각 이미지에서 Scale 또는 TargetSize를 한정자로 정의하는지 확인합니다. |
{image name} 이미지에서 크기 제한에 실패했습니다. | 모든 앱 이미지가 적절한 크기 제한을 준수하는지 확인합니다. 실제 메시지에서는 오류가 있는 이미지 이름이 {image name}에 포함됩니다. |
{image name} 이미지가 패키지에서 누락되었습니다. | 필요한 이미지가 누락되었습니다. 실제 메시지에서는 누락된 이미지 이름이 {image name}에 포함됩니다. |
{image name} 이미지가 유효한 이미지 파일이 아닙니다. | 모든 앱 이미지가 적절한 파일 형식 제한을 준수하는지 확인합니다. 실제 메시지에서는 유효하지 않은 이미지 이름이 {image name}에 포함됩니다. |
"BadgeLogo" 이미지의 (x, y) 위치에 유효하지 않은 ABGR 값 {value}이(가) 있습니다. 픽셀은 흰색(##FFFFFF) 또는 투명(00######)이어야 합니다. | 배지 로고는 잠금 화면에서 앱을 식별하기 위해 배지 알림 옆에 표시되는 이미지입니다. 이 이미지는 단색이어야 합니다. 즉, 흰색 및 투명 픽셀만 포함할 수 있습니다. 실제 메시지에서는 유효하지 않은 이미지의 색상 값이 {value}에 포함됩니다. |
"BadgeLogo" 이미지의 (x, y) 위치에 고대비 흰색 이미지에 유효하지 않은 ABGR 값 {value}이(가) 있습니다. 픽셀은 (##2A2A2A)보다 어둡거나 투명(00######)이어야 합니다. | 배지 로고는 잠금 화면에서 앱을 식별하기 위해 배지 알림 옆에 표시되는 이미지입니다. 배지 로고는 흰색 배경에 표시되므로 고대비 흰색일 경우 일반적인 배지 로고의 어두운 버전이어야 합니다. 고대비 흰색에서 배지 로고에는 (##2A2A2A)보다 어둡거나 투명인 픽셀만 포함될 수 있습니다. 실제 메시지에서는 유효하지 않은 이미지 색 값이 {value}에 포함됩니다. |
이미지에서 TargetSize 한정자를 사용하지 않고 둘 이상의 변형을 정의해야 합니다. 이미지에서 Scale 한정자를 정의하거나 Scale 및 TargetSize를 지정하지 않은 상태로 유지하여 기본값 Scale-100으로 설정해야 합니다. | 자세한 정보는 반응형 디자인 및 앱 리소스에 대한 가이드를 참조하세요. |
패키지에 "resources.pri" 파일이 누락되었습니다. | 앱 매니페스트에 지역화 가능한 콘텐츠가 있는 경우 앱 패키지에 유효한 resources.pri 파일이 있는지 확인합니다. |
"resources.pri" 파일에는 패키지 이름 {package full name}과(와) 일치하는 이름을 사용하는 리소스 맵이 있어야 합니다. | 매니페스트가 변경되어 resources.pri의 리소스 맵 이름이 매니페스트의 패키지 이름과 더 이상 일치하지 않는 경우 이 오류가 발생할 수 있습니다. 실제 메시지에서는 {package full name}에 resources.pri에 포함되어야 하는 패키지 이름이 포함됩니다. 이 오류를 해결하려면 resources.pri를 다시 빌드해야 하며, 앱 패키지를 다시 빌드하는 것으로 이 작업을 가장 간단하게 수행할 수 있습니다. |
"resources.pri" 파일에서 자동 병합을 사용할 수 있도록 설정해서는 안 됩니다. | MakePRI.exe는 AutoMerge라는 옵션을 지원합니다. 기본적으로 AutoMerge는 사용되지 않습니다. 이 옵션을 사용하면 AutoMerge에서 런타임에 앱의 언어 팩 리소스를 단일 resources.pri에 병합합니다. 이 옵션은 Microsoft Store를 통해 배포하려는 앱에는 권장되지 않습니다. Microsoft Store를 통해 배포되는 앱의 resources.pri는 앱 패키지의 루트에 있어야 하며 앱에서 지원하는 모든 언어 참조를 포함해야 합니다. |
{string} 문자열에서 {number}자의 최대 길이 제한을 준수하지 못했습니다. | 앱 패키지 요구 사항을 참조하세요. 실제 메시지에서는 {string}이(가) 오류가 있는 문자열로 바뀌고 {number}에는 최대 길이가 포함됩니다. |
{string} 문자열에는 선행/후행 공백이 없어야 합니다. | 앱 매니페스트에 있는 요소에 대한 스키마는 선행 또는 후행 공백 문자를 허용하지 않습니다. 실제 메시지에서는 {string}이(가) 오류가 있는 문자열로 바뀝니다. resources.pri에 있는 매니페스트 필드의 지역화된 값에 선행 또는 후행 공백 문자가 없는지 확인합니다. |
문자열은 비어 있으면 안 되며 길이가 0보다 커야 합니다. | 자세한 정보는 앱 패키지 요구 사항을 참조하세요. |
"resources.pri" 파일에 지정된 기본 리소스가 없습니다. | 자세한 정보는 앱 리소스에 대한 가이드를 참조하세요. 기본 빌드 구성에서 Visual Studio는 번들을 생성할 때 앱 패키지에 scale-200 이미지 리소스만 포함하고 다른 리소스는 리소스 패키지에 배치합니다. scale-200 이미지 리소스를 포함하거나 갖고 있는 리소스를 포함하도록 프로젝트를 구성해야 합니다. |
"resources.pri" 파일에 지정된 리소스 값이 없습니다. | 앱 매니페스트의 resources.pri에 유효한 리소스가 정의되어 있는지 확인합니다. |
{filename} 이미지 파일은 204800바이트보다 작아야 합니다. | 표시된 이미지의 크기를 줄입니다. |
{filename} 파일에는 리버스 맵 섹션이 없어야 합니다. | Visual Studio 'F5 디버깅' 중 makepri.exe를 호출할 때 리버스 맵이 생성된 경우에는 pri 파일을 생성할 때 /m 매개 변수 없이 makepri.exe를 실행하여 제거할 수 있습니다. |
2.2 브랜딩 유효성 검사
백그라운드
데스크톱 브리지 앱의 모든 기능이 완벽하게 작동해야 합니다. 템플릿 또는 SDK 샘플의 기본 이미지를 사용하는 앱은 부적절한 사용자 환경을 제공하며 저장소 카탈로그에서 쉽게 식별할 수 없습니다.
테스트 세부 정보
이 테스트는 앱에서 사용하는 이미지가 SDK 샘플 또는 Visual Studio의 기본 이미지가 아닌지 검사합니다.
수정 작업
기본 이미지를 보다 개성적이고 앱을 잘 나타내는 이미지로 바꿉니다.
3. 패키지 규정 준수 테스트
3.1 앱 매니페스트
앱 매니페스트의 내용을 테스트하여 내용이 올바른지 확인합니다.
백그라운드
앱에는 올바른 형식의 앱 매니페스트가 있어야 합니다.
테스트 세부 정보
앱 매니페스트를 검사하여 콘텐츠가 앱 패키지 요구 사항에 설명된 것처럼 올바른지 확인합니다. 다음 검사가 이 테스트에서 수행됩니다.
- 파일 확장명 및 프로토콜
앱에서 연결 가능한 파일 형식을 선언할 수 있습니다. 일반적이지 않은 파일 형식을 많이 선언하면 사용자 환경의 편의성이 저하됩니다. 이 테스트에서는 앱을 연결할 수 있는 파일 확장명 수를 제한합니다. - 프레임워크 종속성 규칙
이 테스트에서는 앱이 UWP에 대한 적절한 종속성을 선언하는 요구 사항을 적용합니다. 부적절한 종속성이 있으면 이 테스트가 실패합니다. 앱의 대상인 OS 버전과 프레임워크 종속성 간에 불일치가 있으면 테스트가 실패합니다. 또한 앱이 프레임워크 dll의 "미리 보기" 버전을 참조하는 경우에도 테스트가 실패합니다. - IPC(프로세스 간 통신) 확인
이 테스트에서는 데스크톱 브리지 앱이 앱 컨테이너 외부에서 데스크톱 구성 요소와 통신하지 않는 요구 사항을 적용합니다. 프로세스 간 통신은 병렬 로드된 앱만을 대상으로 합니다.DesktopApplicationPath
와 동일한 이름으로 ActivatableClassAttribute를 지정하는 앱은 이 테스트에 실패합니다.
수정 작업
앱의 매니페스트가 앱 패키지 요구 사항에 설명된 요구 사항에 맞는지 검토합니다.
3.2 애플리케이션 수
이 테스트는 앱 패키지(.appx, 앱 번들)에 애플리케이션이 하나 포함되어 있는지 확인합니다.
백그라운드
이 테스트는 Microsoft Store 정책에 따라 구현됩니다.
테스트 세부 정보
이 테스트는 번들에서 .appx 패키지의 총 개수가 512개 미만이며 번들에 "기본" 패키지가 하나 있는지 확인합니다. 또한 번들 버전의 수정 버전 번호가 0으로 설정되어 있는지 확인합니다.
수정 작업
테스트 정보에 언급된 앱 패키지 및 번들이 요구 사항을 충족하는지 확인합니다.
3.3 레지스트리 검사
백그라운드
이 테스트는 애플리케이션에서 새 서비스 또는 드라이버를 설치하거나 업데이트하는지 검사합니다.
테스트 세부 정보
이 테스트는 registry.dat 파일 내에서 새로운 서비스 또는 등록되는 드라이버를 나타내는 특정 레지스트리 위치로의 업데이트를 찾습니다. 앱이 드라이버나 서비스를 설치하려고 시도한다면 테스트는 실패합니다.
수정 작업
오류를 검토하고, 문제가 있는 것으로 의심되는 서비스 또는 드라이버가 필요하지 않은 경우 제거합니다. 앱에서 이러한 서비스 또는 드라이버를 사용하므로 Microsoft Store에 꼭 온보딩해야 하는 경우에는 앱을 수정해야 합니다.
4. 플랫폼에 적절한 파일 테스트
혼합된 이진 파일을 설치하는 앱은 사용자 프로세서 아키텍처에 따라 크래시가 발생하거나 올바르게 실행되지 않을 수 있습니다.
백그라운드
이 테스트는 앱 패키지의 바이너리에서 아키텍처 충돌을 검사합니다. 앱 패키지는 매니페스트에 지정된 프로세서 아키텍처에 사용할 수 없는 이진 파일을 포함하면 안 됩니다. 지원되지 않는 이진 파일을 포함하면 앱 충돌이 일어나거나 앱 패키지 크기가 불필요하게 증가할 수 있습니다.
테스트 세부 정보
앱 패키지 매니페스트 프로세서 아키텍처 선언과 상호 참조될 때 이식 가능한 실행 파일 헤더의 각 파일 "비트 수"가 적절한지 확인합니다.
수정 작업
다음의 지침을 따라 앱 패키지가 앱 매니페스트에 지정된 아키텍처에서 지원되는 파일만 포함하고 있는지 확인합니다.
- 앱의 대상 프로세서 아키텍처가 중립 프로세서 종류인 경우 앱 패키지는 x86, x64 또는 Arm 바이너리나 이미지 형식 파일을 포함할 수 없습니다.
- 앱의 대상 프로세서 아키텍처가 x86 프로세서 형식인 경우 앱 패키지는 x86 이진 파일이나 이미지 형식 파일만 포함해야 합니다. x64 또는 Arm 바이너리나 이미지 형식이 포함된 패키지는 테스트에 실패합니다.
- 앱의 대상 프로세서 아키텍처가 x64 프로세서 형식인 경우 앱 패키지는 x64 이진 파일 또는 이미지 형식 파일을 포함해야 합니다. 이 경우에는 패키지가 x86 파일도 포함할 수 있지만, 기본 앱 환경은 x64 이진 파일을 이용해야 합니다. 패키지에 Arm 바이너리나 이미지 형식 파일이 포함되었거나 x86 바이너리나 이미지 형식 파일만 포함된 경우 테스트에 실패합니다.
- 앱의 대상 프로세서 아키텍처가 Arm 프로세서 종류인 경우 앱 패키지는 Arm 바이너리나 이미지 형식 파일만 포함해야 합니다. x64 또는 x86 이진 파일나 이미지 형식 파일이 포함된 패키지는 테스트에 실패합니다.
5. 지원되는 API 테스트
앱에서 비규격 API를 사용하는지 검사합니다.
백그라운드
데스크톱 브리지 앱은 최신 API(UWP 구성 요소)와 함께 일부 레거시 Win32 API를 활용할 수 있습니다. 테스트는 지원되지 않는 API를 사용하여 관리되는 이진 파일을 식별합니다.
테스트 세부 정보
다음과 같이 이 테스트는 앱의 모든 UWP 구성 요소를 검사합니다.
- 이진 파일의 가져오기 주소 테이블을 검사하여 앱 패키지 내의 각 관리형 이진 파일이 UWP 앱 개발에 지원되지 않는 Win32 API에 종속되지 않는지 확인합니다.
- 앱 패키지 내의 각 관리되는 이진 파일이 승인된 프로필 외부의 함수에 종속하지 않는지 확인합니다.
수정 작업
앱이 디버그 빌드가 아닌 릴리스 빌드로 컴파일된 것을 확인하여 수정할 수 있습니다.
참고
앱에서 UWP 앱용 API만 사용하더라도 앱의 디버그 빌드는 이 테스트에 실패합니다. 오류 메시지를 검토하여 현재 API가 허용되는 UWP 앱용 API가 아닌지 확인하세요.
참고
구성에 UWP 앱용 Windows SDK의 API만 사용하는 경우에도 디버그 구성에서 빌드된 C++ 앱은 이 테스트에 실패합니다. 자세한 정보를 보려면 UWP 앱의 Windows API 대안을 참조하세요.
6. UAC(사용자 계정 컨트롤) 테스트
백그라운드
앱이 런타임에 사용자 계정 컨트롤을 요청하지 않는지 확인합니다.
테스트 세부 정보
Microsoft Store 정책에 따라 앱에서 관리자 권한 상승 또는 UIAccess를 요청할 수 없습니다. 승격된 보안 권한이 지원되지 않습니다.
수정 작업
앱이 대화형 사용자로 실행되어야 합니다. 자세한 정보는 UI 자동화 보안 개요를 참조하세요.
7. Windows 런타임 메타데이터 유효성 검사
백그라운드
앱에 포함된 구성 요소가 UWP 형식 시스템을 준수하는지 확인합니다.
테스트 세부 정보
이 테스트는 적절한 형식 사용과 관련된 다양한 플래그를 throw합니다.
수정 작업
- ExclusiveTo 특성
UWP 클래스가 다른 클래스에 ExclusiveTo로 표시된 인터페이스를 구현하지 않는지 확인합니다. - 일반 메타데이터 수정
사용 중인 형식을 생성하는 컴파일러가 최신 UWP 사양으로 업데이트되었는지 확인합니다. - 속성
UWP 클래스의 모든 속성이get
메서드를 갖고 있는지 확인합니다(set
메서드는 선택 사항). 모든 속성에 대해get
메서드가 반환하는 형식이set
메서드 입력 매개 변수 형식과 일치하는지 확인합니다. - 형식 위치
모든 UWP 형식에 대한 메타데이터가 앱 패키지에서 네임스페이스와 일치하는 가장 긴 이름을 가진 winmd 파일에 있는지 확인합니다. - 형식 이름 대/소문자 구분
모든 UWP 형식에 앱 패키지 내 고유한 대/소문자가 구분된 이름이 있는지 확인합니다. 또한 UWP 이름이 앱 패키지 내에서 네임스페이스 이름으로도 사용되지 않았는지 확인합니다. - 형식 이름 수정
글로벌 네임스페이스 또는 Windows 최상위 네임스페이스에 UWP 형식이 없는지 확인합니다.
8. Windows 보안 기능 테스트
기본 Windows 보안 보호 기능을 변경하면 고객이 더 큰 위험에 노출될 수 있습니다.
8.1 금지된 파일 분석기
백그라운드
특정 파일이 중요한 보안, 안정성 또는 기타 향상된 기능으로 업데이트되었습니다. 오래된 버전은 위험에 노출될 수 있으므로 Windows 데스크톱 브리지 앱은 최신 버전의 파일을 포함해야 합니다. Windows 앱 인증 키트는 모든 앱에서 현재 버전을 사용하도록 이러한 파일을 차단합니다.
테스트 세부 정보
Windows 앱 인증 키트에서 금지된 파일 검사는 현재 다음의 파일을 검사합니다.
- Bing.Maps.JavaScript\js\veapicore.js
이 검사는 앱이 최신 공식 릴리스 대신 "Release Preview" 버전의 파일을 사용하는 경우 일반적으로 실패합니다.
수정 작업
이 문제를 해결하려면 최신 버전의 UWP 앱용 Bing Maps SDK를 사용합니다.
8.2 프라이빗 코드 서명
앱 패키지 내에 프라이빗 코드 서명 이진이 있는지 테스트합니다.
백그라운드
프라이빗 코드 서명 파일은 손상될 경우 악의적인 용도로 사용될 수 있으므로 비공개로 보관해야 합니다.
테스트 세부 정보
앱 패키지 내에서 프라이빗 서명 키가 포함되었음을 나타내는 .pfx 또는 .snk 확장명을 사용하는 파일을 검사합니다.
수정 작업
패키지에서 프라이빗 코드 서명 키(예: .pfx 및 .snk 파일)를 제거합니다.