패키지 매니페스트 만들기

소프트웨어 패키지를 Windows 패키지 관리자 커뮤니티 리포지토리에 제출하려면 먼저 패키지 매니페스트를 만듭니다. 매니페스트는 설치할 애플리케이션을 설명하는 YAML 파일입니다.

Windows 패키지 관리자 매니페스트 작성자, YAMLCreate PowerShell 스크립트를 사용하거나 아래 지침에 따라 수동으로 매니페스트를 만들 수 있습니다.

참고 항목

매니페스트, 패키지 및 버전을 설명하는 보다 일반적인 고급 정보는 아래 매니페스트 FAQ를 참조하세요.

매니페스트 만들기 옵션

WinGetCreate 유틸리티 사용

아래 명령을 사용하여 wingetcreate 유틸리티를 설치할 수 있습니다.

winget install wingetcreate

설치 후 wingetcreate new를 실행하여 새 패키지를 만들고 프롬프트를 채울 수 있습니다. WinGetCreate 프롬프트의 마지막 옵션은 매니페스트를 패키지 리포지토리에 제출하는 것입니다. 예를 선택하면 PR(끌어오기 요청)이 Windows 패키지 관리자 커뮤니티 리포지토리에 자동으로 제출됩니다.

YAMLCreate.ps1 사용

매니페스트 파일 작성을 돕기 위해 Windows 패키지 관리자 커뮤니티 리포지토리의 Tools 폴더에 YAMLCreate.ps1 powershell 스크립트가 있습니다. PC에서 리포지토리를 복제하여 스크립트를 사용하고 Tools 폴더에서 직접 스크립트를 실행할 수 있습니다. 스크립트는 설치 관리자의 URL을 입력하라는 메시지를 표시한 다음, 메타데이터를 입력하라는 메시지를 표시합니다. WinGetCreate를 사용하는 것과 마찬가지로 이 스크립트는 매니페스트를 자동으로 제출하는 옵션을 제공합니다.

YAML 기본 사항

다른 Microsoft 개발 도구와의 사용자 가독성 및 일관성에 대한 상대적 편의성으로 인해 YAML 형식이 패키지 매니페스트에 대해 선택되었습니다. YAML 구문에 익숙하지 않은 경우 Y분 내에 YAML 알아보기에서 기본 사항을 습득할 수 있습니다.

참고 항목

Windows 패키지 관리자에 대한 매니페스트는 현재 일부 YAML 기능을 지원하지 않습니다. 지원되지 않는 YAML 기능에는 앵커, 복합 키 및 세트가 포함됩니다.

규칙

이 문서에서 사용되는 규칙은 다음과 같습니다.

  • :의 왼쪽은 매니페스트 정의에 사용되는 리터럴 키워드입니다.
  • :의 오른쪽은 데이터 형식입니다. 데이터 형식은 string과 같은 기본 형식이거나 이 문서의 다른 곳에 정의된 다양한 구조체에 대한 참조일 수 있습니다.
  • [datatype] 표기법은 언급된 데이터 형식의 배열을 나타냅니다. 예를 들어 [ string ]은 문자열 배열입니다.
  • {datatype:datatype} 표기법은 한 데이터 형식과 다른 데이터 형식의 매핑을 나타냅니다. 예를 들어 { string: string }은 문자열에 대한 문자열의 매핑입니다.

매니페스트 내용

패키지 매니페스트는 필수 항목과, 소프트웨어를 설치하는 고객 환경을 향상시키는 데 도움이 되는 추가 선택 항목으로 구성됩니다. 이 섹션에서는 필수 매니페스트 스키마 및 전체 매니페스트 스키마에 대해 간략히 설명하고 각 스키마에 대한 예제를 제공합니다.

매니페스트 파일의 각 필드는 파스칼식 대/소문자 구분이어야 하며 중복될 수 없습니다.

매니페스트의 항목에 대한 전체 목록과 설명은 Windows 패키지 관리자 커뮤니티 리포지토리매니페스트 사양을 참조하세요.

최소 필수 스키마

싱글톤 JSON 스키마에 지정된 것처럼 특정 필드만 필요합니다. 지원되는 최소 YAML 파일은 다음 예와 같습니다. 싱글톤 형식은 설치 관리자와 로캘이 각각 하나씩 포함된 패키지에만 유효합니다. 설치 관리자나 로캘이 두 개 이상 제공되면 여러 YAML 파일 형식과 스키마를 사용해야 합니다.

GitHub의 UX를 사용하는 데 도움이 되도록 분할 스키마가 추가되었습니다. 하위 폴더가 수천 개 있는 폴더는 브라우저에서 제대로 렌더링되지 않습니다.

PackageIdentifier:  # Publisher.package format.
PackageVersion:     # Version numbering format.
PackageLocale:      # BCP 47 format (e.g. en-US)
Publisher:          # The name of the publisher.
PackageName:        # The name of the application.
License:            # The license of the application.
ShortDescription:   # The description of the application.
Installers: 
 - Architecture:    # Enumeration of supported architectures.
   InstallerType:   # Enumeration of supported installer types (exe, msi, msix, inno, wix, nullsoft, appx).
   InstallerUrl:    # Path to download installation file.
   InstallerSha256: # SHA256 calculated from installer.
ManifestType:       # The manifest file type
ManifestVersion: 1.6.0

여러 매니페스트 파일

최고의 사용자 환경을 제공하려면 메니페스트에 가능한 한 메타데이터가 많이 포함되어야 합니다. 설치 관리자 유효성 검사 및 지역화된 메타데이터 제공 문제를 구분하기 위해 매니페스트를 파일 여러 개로 분할해야 합니다. 이러한 종류의 매니페스트에 대한 최소 YAML 파일 수는 3개입니다. 또한 추가 로캘도 제공되어야 합니다.

다음 예에서는 다양한 선택적 메타데이터 필드와 여러 로캘을 보여줍니다. 기본 로캘에는 추가 로캘보다 요구 사항이 더 많습니다. show 명령은 추가 로캘에 제공되지 않는 필수 필드에 기본 로캘의 필드가 표시됩니다.

경로: manifests / m / Microsoft / WindowsTerminal / 1.6.10571.0 / Microsoft.WindowsTerminal.yaml

PackageIdentifier: "Microsoft.WindowsTerminal"
PackageVersion: "1.6.10571.0"
DefaultLocale: "en-US"
ManifestType: "version"
ManifestVersion: "1.6.0"

참고 항목

설치 관리자가 .exe이고 Nullsoft 또는 Inno를 사용하여 빌드된 경우 해당 값을 대신 지정할 수 있습니다. Nullsoft 또는 Inno를 지정하면 클라이언트는 설치 프로그램의 진행률 설치 동작을 통해 silent and silent를 자동으로 설정합니다.

설치 관리자 스위치

종종 명령줄에서 -?를 설치 관리자에 전달하여 설치 관리자에 사용할 수 있는 자동 Switches를 확인할 수 있습니다. 다음은 다양한 설치 관리자 유형에 사용할 수 있는 일반적인 자동 Switches입니다.

설치 관리자 Command 설명서
MSI /q MSI 명령줄 옵션
InstallShield /s InstallShield 명령줄 매개 변수
Inno 설정 /SILENT or /VERYSILENT Inno 설정 설명서
Nullsoft /S Nullsoft 자동 설치 관리자/제거 프로그램

팁 및 모범 사례

  • 패키지 식별자는 고유해야 합니다. 동일한 패키지 식별자를 사용하는 제출이 여러 개 있을 수 없습니다. 패키지 버전당 끌어오기 요청 하나만 허용됩니다.
  • 여러 게시자 폴더를 만들지 않습니다. 예를 들어 "Contoso" 폴더가 이미 있으면 "Contoso Ltd."를 만들지 않습니다.
  • 모든 도구는 자동 설치를 지원해야 합니다. 자동 설치를 지원하지 않는 실행 파일이 있으면 Microsoft는 이때 해당 도구를 제공할 수 없습니다.
  • 가능한 한 많은 필드를 제공합니다. 더 많은 메타데이터를 제공하면 사용자 환경이 더욱 우수해집니다. 경우에 따라 Windows 패키지 관리자 클라이언트(winget.exe)에서 아직 필드를 지원하지 않을 수 있습니다. 예를 들어 AppMoniker 필드는 선택 사항입니다. 그러나 이 필드를 포함하는 경우 search 명령을 수행하면 Moniker 값과 관련된 결과가 표시됩니다(예: Visual Studio Code의 경우 vscode). 지정된 Moniker 값의 앱이 하나만 있으면 고객은 정규화된 패키지 식별자가 아닌 모니커를 지정하여 애플리케이션을 설치할 수 있습니다.
  • 이 사양의 문자열 길이는 줄바꿈 앞에서 100문자로 제한되어야 합니다.
  • PackageName은 매니페스트와의 상관 관계에서 exportupgrade를 지원하는 데 도움이 되도록 프로그램 추가/제거에서 만든 항목과 일치해야 합니다.
  • Publisher은 매니페스트와의 상관 관계에서 exportupgrade를 지원하는 데 도움이 되도록 프로그램 추가/제거에서 만든 항목과 일치해야 합니다.
  • MSI 형식의 패키지 설치 관리자는 제품 코드를 사용하여 고유하게 애플리케이션을 식별합니다. 지정된 패키지 버전의 제품 코드는 최상의 upgrade 환경을 보장하는 데 도움이 되도록 매니페스트에 포함되어야 합니다.
  • 지정한 버전의 패키지에 대해 설치 관리자 유형이 둘 이상 있는 경우 InstallerType의 인스턴스를 각 Installers 아래에 배치할 수 있습니다.

매니페스트 FAQ

매니페스트란?

매니페스트는 Windows 운영 체제에 소프트웨어를 설치하고 업그레이드하기 위해 Windows 패키지 관리자에서 사용하는 메타데이터를 포함하는 YAML 파일입니다. GitHub의 winget-pkgs 리포지토리에 있는 매니페스트 디렉터리 아래에 분할된 수천 개의 파일이 있습니다. 매니페스트를 검색할 때 사이트에서만큼 스크롤할 필요가 없도록 Windows 패키지 관리자 디렉터리 구조를 분할해야 했습니다.

패키지란?

패키지를 애플리케이션 또는 소프트웨어 프로그램으로 간주합니다. Windows 패키지 관리자는 "PackageIdentifier"를 사용하여 고유한 패키지를 나타냅니다. 일반적으로 Publisher.Package 형식입니다. 경우에 따라 두 번째 기간으로 구분된 추가 값이 표시될 수 있습니다.

버전이란?

패키지 버전은 특정 릴리스와 연결됩니다. 어떤 경우에는 완벽하게 구성된 의미 체계 버전 번호가 표시되고 다른 경우에는 다른 것을 볼 수 있습니다. 이러한 문자는 날짜 기반이거나 패키지별 의미가 있는 다른 문자가 있을 수 있습니다. 패키지 버전의 YAML 키는 "PackageVersion"입니다.

디렉터리 구조를 이해하고 첫 번째 매니페스트를 만드는 방법에 대한 자세한 내용은 GitHub의 winget-pkgs 리포지토리에서 매니페스트 작성을 참조하세요.