Lottie-Windows icon indicating copy to clipboard operation
Lottie-Windows copied to clipboard

Loading Lottie library causes the app to crash when it is installed from the Microsoft Store

Open atiyka opened this issue 3 years ago • 0 comments

I'm building a WPF application and using Lottie in an Xaml Islands custom component.

When packaging the desktop bridge project, I receive an App manifest validation error with the following content:

Validation error. error 80080204: App manifest validation error: Line 315, Column 27, Reason: The field "*[local-name()='Extensions']/*[local-name()='Extension']/*[local-name()='InProcessServer']/*[local-name()='ActivatableClass']" with value "Microsoft.Toolkit.Uwp.UI.Lottie.LottieVisualSource" must only be declared once. A duplicate exists on Line 64, Column 27.

The mentioned lines and the corresponding tag in the AppxManifest has the following content:

<Extension Category="windows.activatableClass.inProcessServer">
  <InProcessServer>
    <Path>UILibrary.dll</Path>
*64*    <ActivatableClass ActivatableClassId="Microsoft.Toolkit.Uwp.UI.Lottie.LottieVisualSource" ThreadingModel="both" />
    <ActivatableClass ActivatableClassId="Microsoft.UI.Xaml.Markup.ReflectionXamlMetadataProvider" ThreadingModel="both" />
  </InProcessServer>
</Extension>
...
<Extension Category="windows.activatableClass.inProcessServer">
  <InProcessServer>
    <Path>CLRHost.dll</Path>
*315*    <ActivatableClass ActivatableClassId="Microsoft.Toolkit.Uwp.UI.Lottie.LottieVisualSource" ThreadingModel="both" />
  </InProcessServer>
</Extension>

From this workaround, I added the following lines to the .wapproj file:

<Target Name="_RemoveWinMDFromAppxManifest" BeforeTargets="_GenerateCurrentProjectAppxManifest">
    <ItemGroup>
      <_AppxWinmdFilesToHarvest Remove="@(_AppxWinmdFilesToHarvest)" />
    </ItemGroup>
  </Target>

With this, I could achieve to not to duplicate these dependencies in the AppxManifest.xaml when creating the build, so the issue has gone and I could create the package for the Store submission.

I could upload to the store, it is published, but when I install it from the store, the app crashes when it should display a lottie animation with the following exception:

* When the Lottie is initalized from Xaml:
(0x80004005): Error HRESULT E_FAIL has been returned from a call to a COM component.
   at Windows.UI.Xaml.UIElement.Measure(Size availableSize)
   at Microsoft.Toolkit.Uwp.UI.Controls.WrapPanel.MeasureOverride(Size availableSize)

* Exception, when it is initialized from the code behind:
Cannot create instance of type 'Microsoft.Toolkit.Uwp.UI.Lottie.LottieVisualSource' [Line: 0 Position: 0]

The interesting part is that the animation is played when I install the exact same build from the local package. So, seemingly the Store modifies the package during the publish procedure, but what can I do other way?

I'm using Lottie version 7.1.1

atiyka avatar Jan 09 '23 13:01 atiyka