Windows 앱 SDK 앱용 패키지 확장 만들기

패키지 확장은 패키지 간에 더 광범위한 콘텐츠 공유를 허용하여 앱 확장 모델을 확장합니다. 패키지 확장 호스트는 모든 패키지의 확장을 수락할 수 있으므로 플랫폼 수준 확장성 시나리오에 적합합니다.

메모

패키지 확장은 Windows 11 네임스페이스를 uap17 사용해야 합니다. 이전 버전과 호환되는 방식을 보려면 uap3를 사용하는 앱 확장을 참고하세요.

패키지 확장 vs. app 확장

특징 앱 확장(uap3) 패키지 확장(uap17)
최소 OS Windows 10 1607 윈도우 11
Scope 애플리케이션별 패키지당
콘텐츠 공유 공용 폴더만 전체 패키지 콘텐츠 액세스
매니페스트 네임스페이스 uap3:AppExtension uap17:PackageExtension

패키지 확장 호스트 선언

PackageExtensionHost 호스트 앱의 매니페스트에 선언을 추가합니다.

<Package xmlns:uap17="http://schemas.microsoft.com/appx/manifest/uap/windows10/17" ...>
  <Applications>
    <Application ...>
      <Extensions>
        <uap17:Extension Category="windows.packageExtensionHost">
          <uap17:PackageExtensionHost>
            <uap17:Name>com.example.myplatform.extensions</uap17:Name>
          </uap17:PackageExtensionHost>
        </uap17:Extension>
      </Extensions>
    </Application>
  </Applications>
</Package>

패키지 확장 선언

확장 패키지의 매니페스트에서:

<Package xmlns:uap17="http://schemas.microsoft.com/appx/manifest/uap/windows10/17" ...>
  <Applications>
    <Application ...>
      <Extensions>
        <uap17:Extension Category="windows.packageExtension">
          <uap17:PackageExtension Name="com.example.myplatform.extensions"
                                   Id="MyExtension"
                                   DisplayName="My Extension"
                                   Description="Adds features to the platform">
            <uap17:Properties>
              <ExtensionType>content</ExtensionType>
              <Version>1.0</Version>
            </uap17:Properties>
          </uap17:PackageExtension>
        </uap17:Extension>
      </Extensions>
    </Application>
  </Applications>
</Package>

패키지 확장 검색

동일한 AppExtensionCatalog API를 사용하여 런타임에 패키지 확장을 검색합니다. 호스트 이름은 매니페스트에 Name 선언된 이름과 일치합니다.

var catalog = AppExtensionCatalog.Open("com.example.myplatform.extensions");
var extensions = await catalog.FindAllAsync();

foreach (var ext in extensions)
{
    System.Diagnostics.Debug.WriteLine(
        $"Found extension: {ext.DisplayName} ({ext.Id})");

    // Read custom properties
    var properties = await ext.GetExtensionPropertiesAsync();
    // Access properties as needed
}

모범 사례

  • 확장 이름(예 com.company.app.extensions: )에 역방향 도메인 명명 규칙을 사용합니다.
  • 호스트 앱이 이전 및 새 확장 형식을 처리할 수 있도록 확장 프로토콜의 버전을 지정합니다.
  • 확장 콘텐츠를 사용하기 전에 유효성을 검사합니다. 확장은 다른 패키지에서 제공되며 맹목적으로 신뢰할 수 없어야 합니다.