Search Unity

  1. We are looking for your feedback about Templates! Tell us about your experiences by taking our survey.
    Dismiss Notice
  2. Curious about what's going to be in 2021.1? Have a look at the 2021.1 beta blog post.
    Dismiss Notice
  3. Want to see 2021.1b in action? Sign up for our 2021.1 Beta Webinar on February 25 for a live presentation and a Q&A session with guests from R&D.
    Dismiss Notice

MeshInstanceRenderer not Rendering on iOS

Discussion in 'Data Oriented Technology Stack' started by Srokaaa, Dec 2, 2018.

  1. Srokaaa

    Srokaaa

    Joined:
    Sep 18, 2018
    Posts:
    142
    I get a following stacktraces whenever I try to run my game on iOS:


    Code (CSharp):
    1. (Filename: currently not available on il2cpp Line: -1)
    2.  
    3. MissingMethodException: Constructor on type 'Unity.Rendering.MeshInstanceRendererSystem' not found.
    4.   at System.RuntimeType.CreateInstanceImpl (System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, System.Object[] args, System.Globalization.CultureInfo culture, System.Object[] activationAttributes, System.Threading.StackCrawlMark& stackMark) [0x00000] in <00000000000000000000000000000000>:0
    5.   at System.Activator.CreateInstance (System.Type type, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, System.Object[] args, System.Globalization.CultureInfo culture, System.Object[] activationAttributes) [0x00000] in <00000000000000000000000000000000>:0
    6.   at System.Activator.CreateInstance (System.Type type, System.Object[] args) [0x00000] in <00000000000000000000000000000000>:0
    7.   at Unity.Entities.World.CreateManagerInternal (System.Type type, System.Object[] constructorArguments) [0x00000] in <00000000000000000000000000000000>:0
    8.   at Unity.Entities.World.GetOrCreateManagerInternal (System.Type type) [0x00000] in <00000000000000000000000000000000>:0
    9.   at Unity.Entities.World.GetOrCreateManager[T] () [0x00000] in <00000000000000000000000000000000>:0
    10.   at Systems.Inputs.ArInputSystem.OnUpdate (Unity.Jobs.JobHandle inputDeps) [0x00000] in <00000000000000000000000000000000>:0
    11.   at Unity.Entities.JobComponentSystem.InternalUpdate () [0x00000] in <00000000000000000000000000000000>:0
    12.   at Unity.Entities.ScriptBehaviourManager.Update () [0x00000] in <00000000000000000000000000000000>:0
    13.   at Unity.Entities.ScriptBehaviourUpdateOrder+DummyDelagateWrapper.TriggerUpdate () [0x00000] in <00000000000000000000000000000000>:0
    14.   at UnityEngine.Experimental.LowLevel.PlayerLoopSystem+UpdateFunction.Invoke () [0x00000] in <00000000000000000000000000000000>:0
    When I run it on Android everything works perfectly fine
     
  2. tertle

    tertle

    Joined:
    Jan 25, 2011
    Posts:
    2,758
    It's being stripped due to IL2CPP. If you used IL2CPP on android you'd have the same issue (actually this is why I promote using IL2CPP for android/iOS, it makes it so you have the same issues on both platforms rather than running into 2 separate set of issues you have to deal wtih.)

    Either make a direct reference or setup a link.xml
    https://docs.unity3d.com/Manual/IL2CPP-BytecodeStripping.html

    (This is something I hope Unity addresses and fixes because having to deal with 3rd party libraries being stripped is very annoying.)
     
  3. 5argon

    5argon

    Joined:
    Jun 10, 2013
    Posts:
    1,514
    I wonder how to make the constructor not stripped? You have to `new` them all at some point with all possible overloads? (becuase system code is not supposed to be new-ed at any point, using manual world also uses activator for the create instance)

    *also you can use [Preserve] on a per system basis https://docs.unity3d.com/ScriptReference/Scripting.PreserveAttribute.html
     
  4. Srokaaa

    Srokaaa

    Joined:
    Sep 18, 2018
    Posts:
    142
    @tertle @5argon Thank you! That was the cause. I now switched to IL2CPP also on Android to not have any differences between platforms.

    For now I just added this rule to link.xml:
    Code (CSharp):
    1.     <assembly fullname="Unity.Rendering.Hybrid" preserve="all"/>
    2.  
    Is there any way to look up the final classes present after IL2CPP stripping? Professionally I work as an Android dev and we often run into similar issues with proguard there. On Android I am able to easily check what classes are in the final .apk file though
     
unityunity