리소스 패키지

리소스 패키지는 언어를 분할하거나 특정 자산을 사용자 컴퓨터 구성에 따라 Windows 자동으로 다운로드되는 별도의 패키지로 확장하여 사용자 디스크 공간을 줄이는 좋은 방법을 제공합니다. 사용자가 지역 언어 설정의 OS 언어 목록에 새 언어를 추가하거나 디스플레이 구성을 변경하는 경우 자동 스토어 업데이트에서 OS는 디바이스에 설치된 모든 앱에 적용 가능한 리소스 패키지를 가져옵니다.

Windows SDK 10.0.17095.0 AddResourcePackageAsync API를 사용하면 개발자가 요청 시 앱용 리소스 패키지를 설치할 수 있습니다.

AddResourcePackageAsync API를 사용하는 방법

  • AddResourcePackageAsync는 애플리케이션의 PackageFamilyName 및 다운로드하려는 리소스 패키지를 고유하게 식별하는 리소스 ID를 받습니다. 리소스 ID는 리소스 패키지의 AppxManifest.xmlResourceId 요소에 해당합니다.

  • 애플리케이션에서 사용할 수 있는 모든 리소스의 병합된 보기를 얻으려면 애플리케이션을 다시 시작해야 합니다. API는 애플리케이션을 다시 시작하기 위해 전달할 수 있는 ForceTargetApplicationShutdown 옵션을 제공합니다.

  • 리소스 패키지를 다운로드할 때 애플리케이션에 사용할 수 있는 업데이트가 있는 경우 이전 버전의 앱을 더 이상 사용할 수 없으면 API가 실패합니다. ApplyUpdateIfAvailable 플래그를 전달하면 API가 앱을 업데이트하고 요청된 리소스 패키지를 동일한 다운로드의 일부로 받습니다.

  • API는 애플리케이션에 표시할 수 있는 다운로드 진행률을 반환합니다. 또한 스토어에 게시된 앱의 경우 리소스 패키지 획득이 Microsoft Store 다운로드 및 업데이트 페이지에 표시되고 애플리케이션에 대한 업데이트로 표시됩니다. 최종 사용자는 Microsoft Store 리소스 패키지 다운로드를 일시 중지하거나 취소하도록 선택할 수 있습니다.

예제

 private async void DownloadGermanResourcePackage(object sender, RoutedEventArgs e)
{            
    // ResourceId that is unique to the resource package
    string resourceId = "split.language-de";
    // Warn user that application will need to restart.
    // To take update if available pass in the ApplyUpdateIfAvailable flag
    var packageCatalog = PackageCatalog.OpenForCurrentPackage();
    PackageCatalogAddResourcePackageResult result = await packageCatalog.AddResourcePackageAsync("29270depappf.CaffeMacchiato_gah1vdar1nn7a", resourceId, 
        AddResourcePackageOptions.ApplyUpdateIfAvailable | AddResourcePackageOptions.ForceTargetApplicationShutdown)
        .AsTask<PackageCatalogAddResourcePackageResult, PackageInstallProgress>(new Progress
        (progress =>;
        {
                // Draw progress
        }));

        if (result.ExtendedError != null)
        {
                //Display error or retry if needed
        }
}

유효성 검사

로컬 유효성 검사를 위해 개발자는 .msixbundle 또는 .appxbundle을 만들고 로컬 드라이브, 네트워크 공유 또는 웹 서버에서 설치할 수 있습니다. 앱이 AddResourcePackageAsync API를 호출하면 Windows 원래 애플리케이션이 설치된 위치에서 리소스 패키지를 획득합니다. 이렇게 하면 유효성 검사가 간단해집니다. 이 작업이 완료되면 앱을 배포할 준비가 된 것입니다.

리소스 패키지 제거

앱은 RemoveResourcePackageAsync API를통해 다운로드한 리소스 패키지를 제거하도록 선택할 수 있습니다. 그러나 사용자 또는 디바이스 전체에 적용할 수 있는 리소스 패키지는 제거될 수 없습니다.

예제

 private async void RemoveResourcePackage(object sender, RoutedEventArgs e)
{            
    var packageCatalog = PackageCatalog.OpenForCurrentPackage();
    List resourcePackagesToRemove = new List();
    resourcePackagesToRemove.Add("split.language-de");
    //Warn user that application will be restarted
    var removePackageResult = await packageCatalog.RemoveResourcePackagesAsync(resourcePackagesToRemove);
    if (removePackageResult.ExtendedError != null)
    {
        // display error
    }
}