XRTK / com.xrtk.core

The Official Mixed Reality Framework for Unity
https://xrtk.io
MIT License
307 stars 34 forks source link

Error when building for oculus (Android) IL2CPP #908

Closed StephenHodgson closed 2 years ago

StephenHodgson commented 2 years ago

XRTK - Mixed Reality Toolkit Bug Report

Describe the bug

System.Exception: Interface XRTK.Interfaces.IMixedRealityService method System.String XRTK.Interfaces.IMixedRealityService::get_Name() not implemented on non-abstract class XRTK.Services.LocomotionSystem.LocomotionSystem

Your Setup

FejZa commented 2 years ago

What? This does not make any sense. I've been building IL2CPP for Oculus just fine for a long time. Also that property is inherited from the BaseService class which does provide a default implementation. I'll have to check this.

StephenHodgson commented 2 years ago

Just a reminder I only have core installed in this project. I upgraded xrtk from 0.3.0-preview.15 -> 0.3.0-preview.45 when I first noticed this error

StephenHodgson commented 2 years ago

A bit more info:

Exception: IL2CPP error for type '<PrivateImplementationDetails>/__StaticArrayInitTypeSize=176' in assembly '\Temp\StagingArea\assets\bin\Data\Managed\System.Data.dll'
System.Exception: Interface XRTK.Interfaces.IMixedRealityService method System.String XRTK.Interfaces.IMixedRealityService::get_Name() not implemented on non-abstract class XRTK.Services.LocomotionSystem.LocomotionSystem
 (at ?)
   at Unity.IL2CPP.Metadata.VTableBuilder.ValidateInterfaceMethodSlots(TypeDefinition typeDefinition, Dictionary`2 interfaceOffsets, List`1 slots)
   at Unity.IL2CPP.Metadata.VTableBuilder.VTableForType(ReadOnlyContext context, TypeDefinition typeDefinition, Dictionary`2 interfaceOffsets, Int32 currentSlot)
   at Unity.IL2CPP.Metadata.VTableBuilder.VTableFor(ReadOnlyContext context, TypeReference typeReference)
   at Unity.IL2CPP.AssemblyConversion.PrimaryCollection.Steps.PerAssembly.AssemblyCollection.CollectGenericMethodsFromVTableSlots(GlobalPrimaryCollectionContext context, AssemblyDefinition item)
   at Unity.IL2CPP.AssemblyConversion.PrimaryCollection.Steps.PerAssembly.AssemblyCollection.ProcessItem(GlobalPrimaryCollectionContext context, AssemblyDefinition item)
   at Unity.IL2CPP.AssemblyConversion.Steps.Base.ScheduledItemsStepFunc`5.WorkerWrapper(WorkItemData`3 workerData)
   at Unity.IL2CPP.Contexts.Scheduling.PhaseWorkScheduler`1.ContinueWithResultsWorkItem`4.InvokeWorker(Object context, Int32 uniqueId)
   at Unity.IL2CPP.Contexts.Scheduling.PhaseWorkScheduler`1.BaseContinueWorkItem`2.Invoke(Object context, Int32 uniqueId)
   at Unity.IL2CPP.Contexts.Scheduling.PhaseWorkScheduler`1.WorkerLoop(Object data)
StephenHodgson commented 2 years ago

I suspect this is because Unity is aggressively trying to strip the assemblies and the vtables are getting corrupted somehow

SimonDarksideJ commented 2 years ago

Yeah, tricky to diagnose in these case to be able to develop a Link.xml to kurb Unity's aggressive cleaning