Enums as keys in dictionaries don't work - back again?

Issue #425 resolved
Andreas Podgurski created an issue

I have a strange occurance in my app. I have an enumeration called "ValidateInputFieldMessage". In a dictionary, I can add one or more of the enum values and assign a GameObject containing an error message, if the criteria of the associated enum value is not met. This works well in the editor and on Android and did before the 2.0 update as well on iOS. But now I'm getting:

Creating a serialization formatter for the type 'System.Collections.Generic.Dictionary<ValidateInputFieldMessage, GameObject> failed due to missing AOT support.

The enum is not discovered by the AOT collector and adding it manually doesn't change a thing. The log requests to add the dictionary type and GameObject as well, which is not possible.

Further in the log, there is a similar message for UnityEngine.Events.PersistentListenerMode.

I have problems with a dictionary, where a string is the key and a serialized object is the value as well since 2.0, but I'm not sure, if this is a followup problem only or something on its own. After starting on iOS, the dictionary is populated with one entry only, if error output is disabled and it is not initialized at all (null) if enabled. Thinking about it, the value object has a UnityEvent embedded, so this may be related the the PersistentListenerMode issue above.

This thing is kind of urgent, as I need to deploy an iOS version for the customer, so thanks in advance, if you can address this in a short term.

Comments (17)

  1. Tor Esa Vestergaard
    • changed status to open

    Can you provide a reproduction code sample or project, that we can use to test this?

  2. Andreas Podgurski reporter

    Will be hard to strip something down, as I'm normally developing on the PC and the mac is kind of special... Would a full log out of XCode be some help in the first place`?

    2018-09-13 02:15:03.391868+0200 drift[21730:10857064] [DYMTLInitPlatform] platform initialization successful
    2018-09-13 02:15:03.650912+0200 drift[21730:10856957] -> registered mono modules 0x1b59bd0
    -> applicationDidFinishLaunching()
    2018-09-13 02:15:04.428834+0200 drift[21730:10856957] Metal GPU Frame Capture Enabled
    2018-09-13 02:15:04.430253+0200 drift[21730:10856957] Metal API Validation Disabled
    -> applicationDidBecomeActive()
    Renderer: PowerVR SGX 543
    Vendor: Imagination Technologies
    Version: OpenGL ES 2.0 IMGSGX543-129
    GLES: 2
    GL_OES_depth_texture GL_OES_depth24 GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_mapbuffer GL_OES_packed_depth_stencil GL_OES_rgb8_rgba8 GL_OES_standard_derivatives L_OES_texture_float GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_vertex_array_object GL_EXT_blend_minmax GL_EXT_color_buffer_half_float GL_EXT_debug_label GL_EXT_debug_marker GL_EXT_discard_framebuffer GL_EXT_draw_instanced GL_EXT_instanced_arrays GL_EXT_map_buffer_range GL_EXT_occlusion_query_boolean GL_EXT_pvrtc_sRGB GL_EXT_read_format_bgra GL_EXT_separate_shader_objects GL_EXT_shader_framebuffer_fetch GL_EXT_shader_texture_lod GL_EXT_shadow_samplers GL_EXT_sRGB GL_EXT_texture_filter_anisotropic GL_EXT_texture_rg GL_EXT_texture_storage GL_APPLE_clip_distance GL_APPLE_color_buffer_packed_float GL_APPLE_copy_texture_levels GL_APPLE_framebuffer_multisample GL_APPLE_rgb_422 GL_APPLE_sync GL_APPLE_texture_format_BGRA8888 GL_APPLE_texture_max_level GL_APPLE_texture_packed_float GL_IMG_read_format GL_IMG_texture_comp

    ession_pvrtc
    OPENGL LOG: Creating OpenGL ES 2.0 graphics device ; Context level <OpenGL ES 2.0> ; Context handle 342523488
    Initialize engine version: 2017.4.9f1 (6d84dfc57ccf)
    OnLevelWasLoaded was found on Reporter
    This message has been deprecated and will be removed in a later version of Unity.
    Add a delegate to SceneManager.sceneLoaded instead to get notifications after scene loading has completed

    (Filename: Line: 375)

    WARNING: 0:4: extension 'GL_EXT_frag_depth' is not supported
    ERROR: 0:38: Use of undeclared identifier 'gl_FragDepthEXT'

    Note: Creation of internal variant of shader 'Hidden/Internal-MotionVectors' failed.
    WARNING: Shader Unsupported: 'Hidden/Internal-MotionVectors' - Pass '' has no vertex shader
    WARNING: Shader Unsupported: 'Hidden/Internal-MotionVectors' - Setting to default shader.
    WARNING: Shader Unsupported: 'Hidden/BlitToDepth' - Pass '' has no vertex shader
    WARNING: Shader Unsupported: 'Hidden/BlitToDepth' - Setting to default shader.
    WARNING: Shader Unsupported: 'Hidden/BlitToDepth_MSAA' - Pass '' has no vertex shader
    WARNING: Shader Unsupported: 'Hidden/BlitToDepth_MSAA' - Setting to default shader.
    WARNING: 0:4: extension 'GL_EXT_frag_depth' is not supported
    ERROR: 0:14: Use of undeclared identifier 'gl_FragDepthEXT'

    Note: Creation of internal variant of shader 'Hidden/BlitCopyWithDepth' failed.
    WARNING: Shader Unsupported: 'Hidden/BlitCopyWithDepth' - Pass '' has no vertex shader
    WARNING: Shader Unsupported: 'Hidden/BlitCopyWithDepth' - Setting to default shader.
    UnloadTime: 4.749916 ms
    Setting up 1 worker threads for Enlighten.
    Thread -> id: 402ab000 -> priority: 1
    Creating a serialization formatter for the type 'System.Collections.Generic.Dictionary<ValidateInputFieldMessage, GameObject>' failed due to missing AOT support.

    Please use Odin's AOT generation feature to generate an AOT dll before building, and MAKE SURE that all of the following types were automatically added to the supported types list after a can (if they were not, please REPORT AN ISSUE with the details of which exact types the scan is missing and ADD THEM MANUALLY):

    Sstem.Collections.Generic.Dictionary<ValidateInputFieldMessage, GameObject>
    ValidateInputFieldMessage
    UnityEngine.GameObject

    IF ALL THE TYPES ARE IN THE SUPPORT LIST AND YOU STILL GET THIS ERROR, PLEASE REPORT AN ISSUE.The exception contained the following message:
    Attempting to call method 'Sirenix.Serialization.DictionaryFormatter2[[ValidateInputFieldMessage, Assembly-CSharp, Version=1.0.0.0, Culture=, PublicKeyToken=null],[UnityEngine.GameObject, nityEngine.CoreModule, Version=0.0.0.0, Culture=, PublicKeyToken=null]]::.cctor' for which no ahead of time (AOT) code was generated. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object) UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[]) UnityEngine.Logger:Log(LogType, Object) UnityEngine.Debug:LogError(Object) Sirenix.Serialization.FormatterLocator:LogAOTError(Type, Exception) Sirenix.Serialization.FormatterLocator:GetFormatter(Type, ISerializationPolicy) Sirenix.Serialization.FormatterLocator:GetFormatter(ISerializationPolicy) Sirenix.Serialization.ComplexTypeSerializer1:ReadValue(IDataReader)
    Sirenix.Serialization.Serializer1:ReadValueWeak(IDataReader) Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, IDataReader) Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, Byte[]&, List1&, DataFormat, DeserializationContext)
    Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, SerializationData&, DeserializationContext, Boolean, List`1)
    Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, SerializationData&, DeserializationContext)
    Sirenix.OdinInspector.SerializedMonoBehaviour:UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize()

    (Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

    ExecutionEngineException: Attempting to call method 'Sirenix.Serialization.DictionaryFormatter2[[ValidateInputFieldMessage, Assembly-CSharp, Version=1.0.0.0, Culture=, ublicKeyToken=null],[UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, Culture=, PublicKeyToken=null]]::.cctor' for which no ahead of time (AOT) code was generated. at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters, System.Exception& exc) [0x00000] in <filename unknown>:0 at System.Reflection.MonoCMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) 0x00000] in <filename unknown>:0 at System.Reflection.MonoCMethod.Invoke (BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in filename unknown>:0 at System.Rflection.ConstructorInfo.Invoke (System.Object[] parameters) [0x00000] in <filename unknown>:0 at System.Activator.CreateInstance (System.Type type, Boolean nonPublic) [0x00000] in <filename unknown>:0 at System.Activator.CreateInstance (System.Type type) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatterInstance (System.Type type) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.CreateFormatter (System.Type type, ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter (System.Type type, ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter[T] (ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.ComplexTypeSerializer1[T].ReadValue (IDataReader reader) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.Serializer1[T].ReadValueWeak (IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, System.Byte[]& bytes, System.Collections.Generic.List1& referencedUnityObjects, ataFormat format, Sirenix.Serialization.DeserializationContext context) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context, oolean isPrefabData, System.Collections.Generic.List1 prefabInstanceUnityObjects) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context) 0x00000] in <filename unknown>:0 at Sirenix.OdinInspector.SerializedMonoBehaviour.UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize () [0x00000] in <filename unknown>:0 Rethrow as SerializationAbortException: AOT formatter support was missing for type 'System.Collections.Generic.Dictionary<ValidateInputFieldMessage, GameObject>'. at Sirenix.Serialization.FormatterLocator.LogAOTError (System.Type type, System.Exception ex) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter (System.Type type, ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter[T] (ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.ComplexTypeSerializer1[T].ReadValue (IDataReader reader) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.Serializer1[T].ReadValueWeak (IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, System.Byte[]& bytes, System.Collections.Generic.List1& referencedUnityObjects, ataFormat format, Sirenix.Serialization.DeserializationContext context) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context, oolean isPrefabData, System.Collections.Generic.List1 prefabInstanceUnityObjects) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context) 0x00000] in <filename unknown>:0 at Sirenix.OdinInspector.SerializedMonoBehaviour.UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize () [0x00000] in <filename unknown>:0 Rethrow as SerializationAbortException: Deserialization of type 'ValidateInputField' aborted. at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, System.Byte[]& bytes, System.Collections.Generic.List1& referencedUnityObjects, ataFormat format, Sirenix.Serialization.DeserializationContext context) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context, oolean isPrefabData, System.Collections.Generic.List`1 prefabInstanceUnityObjects) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context) 0x00000] in <filename unknown>:0
    at Sirenix.OdinInspector.SerializedMonoBehaviour.UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize () [0x00000] in <filename unknown>:0

    (Filename: currently not available on il2cpp Line: -1)

    Creating a serialization formatter for the type 'System.Collections.Generic.Dictionary<ValidateInputFieldMessage, GameObject>' failed due to missing AOT support.

    Please use Odin's AOT generation feature to generate an AOT dll before building, and MAKE SURE that all of the following types were automatically added to the supported types list after a can (if they were not, please REPORT AN ISSUE with the details of which exact types the scan is missing and ADD THEM MANUALLY):

    Sstem.Collections.Generic.Dictionary<ValidateInputFieldMessage, GameObject>
    ValidateInputFieldMessage
    UnityEngine.GameObject

    IF ALL THE TYPES ARE IN THE SUPPORT LIST AND YOU STILL GET THIS ERROR, PLEASE REPORT AN ISSUE.The exception contained the following message:
    Attempting to call method 'Sirenix.Serialization.DictionaryFormatter2[[ValidateInputFieldMessage, Assembly-CSharp, Version=1.0.0.0, Culture=, PublicKeyToken=null],[UnityEngine.GameObject, nityEngine.CoreModule, Version=0.0.0.0, Culture=, PublicKeyToken=null]]::.ctor' for which no ahead of time (AOT) code was generated. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object) UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[]) UnityEngine.Logger:Log(LogType, Object) UnityEngine.Debug:LogError(Object) Sirenix.Serialization.FormatterLocator:LogAOTError(Type, Exception) Sirenix.Serialization.FormatterLocator:GetFormatter(Type, ISerializationPolicy) Sirenix.Serialization.FormatterLocator:GetFormatter(ISerializationPolicy) Sirenix.Serialization.ComplexTypeSerializer1:ReadValue(IDataReader)
    Sirenix.Serialization.Serializer1:ReadValueWeak(IDataReader) Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, IDataReader) Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, Byte[]&, List1&, DataFormat, DeserializationContext)
    Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, SerializationData&, DeserializationContext, Boolean, List`1)
    Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, SerializationData&, DeserializationContext)
    Sirenix.OdinInspector.SerializedMonoBehaviour:UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize()

    (Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

    ExecutionEngineException: Attempting to call method 'Sirenix.Serialization.DictionaryFormatter2[[ValidateInputFieldMessage, Assembly-CSharp, Version=1.0.0.0, Culture=, ublicKeyToken=null],[UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, Culture=, PublicKeyToken=null]]::.ctor' for which no ahead of time (AOT) code was generated. at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters, System.Exception& exc) [0x00000] in <filename unknown>:0 at System.Reflection.MonoCMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) 0x00000] in <filename unknown>:0 at System.Reflection.MonoCMethod.Invoke (BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in filename unknown>:0 at System.Rflection.ConstructorInfo.Invoke (System.Object[] parameters) [0x00000] in <filename unknown>:0 at System.Activator.CreateInstance (System.Type type, Boolean nonPublic) [0x00000] in <filename unknown>:0 at System.Activator.CreateInstance (System.Type type) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatterInstance (System.Type type) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.CreateFormatter (System.Type type, ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter (System.Type type, ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter[T] (ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.ComplexTypeSerializer1[T].ReadValue (IDataReader reader) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.Serializer1[T].ReadValueWeak (IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, System.Byte[]& bytes, System.Collections.Generic.List1& referencedUnityObjects, ataFormat format, Sirenix.Serialization.DeserializationContext context) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context, oolean isPrefabData, System.Collections.Generic.List1 prefabInstanceUnityObjects) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context) 0x00000] in <filename unknown>:0 at Sirenix.OdinInspector.SerializedMonoBehaviour.UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize () [0x00000] in <filename unknown>:0 Rethrow as SerializationAbortException: AOT formatter support was missing for type 'System.Collections.Generic.Dictionary<ValidateInputFieldMessage, GameObject>'. at Sirenix.Serialization.FormatterLocator.LogAOTError (System.Type type, System.Exception ex) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter (System.Type type, ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter[T] (ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.ComplexTypeSerializer1[T].ReadValue (IDataReader reader) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.Serializer1[T].ReadValueWeak (IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, System.Byte[]& bytes, System.Collections.Generic.List1& referencedUnityObjects, ataFormat format, Sirenix.Serialization.DeserializationContext context) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context, oolean isPrefabData, System.Collections.Generic.List1 prefabInstanceUnityObjects) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context) 0x00000] in <filename unknown>:0 at Sirenix.OdinInspector.SerializedMonoBehaviour.UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize () [0x00000] in <filename unknown>:0 Rethrow as SerializationAbortException: Deserialization of type 'ValidateInputField' aborted. at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, System.Byte[]& bytes, System.Collections.Generic.List1& referencedUnityObjects, ataFormat format, Sirenix.Serialization.DeserializationContext context) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context, oolean isPrefabData, System.Collections.Generic.List`1 prefabInstanceUnityObjects) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context) 0x00000] in <filename unknown>:0
    at Sirenix.OdinInspector.SerializedMonoBehaviour.UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize () [0x00000] in <filename unknown>:0

    (Filename: currently not available on il2cpp Line: -1)

    Creating a serialization formatter for the type 'System.Collections.Generic.Dictionary<ValidateInputFieldMessage, GameObject>' failed due to missing AOT support.

    Please use Odin's AOT generation feature to generate an AOT dll before building, and MAKE SURE that all of the following types were automatically added to the supported types list after a can (if they were not, please REPORT AN ISSUE with the details of which exact types the scan is missing and ADD THEM MANUALLY):

    Sstem.Collections.Generic.Dictionary<ValidateInputFieldMessage, GameObject>
    ValidateInputFieldMessage
    UnityEngine.GameObject

    IF ALL THE TYPES ARE IN THE SUPPORT LIST AND YOU STILL GET THIS ERROR, PLEASE REPORT AN ISSUE.The exception contained the following message:
    Attempting to call method 'Sirenix.Serialization.DictionaryFormatter2[[ValidateInputFieldMessage, Assembly-CSharp, Version=1.0.0.0, Culture=, PublicKeyToken=null],[UnityEngine.GameObject, nityEngine.CoreModule, Version=0.0.0.0, Culture=, PublicKeyToken=null]]::.ctor' for which no ahead of time (AOT) code was generated. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object) UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[]) UnityEngine.Logger:Log(LogType, Object) UnityEngine.Debug:LogError(Object) Sirenix.Serialization.FormatterLocator:LogAOTError(Type, Exception) Sirenix.Serialization.FormatterLocator:GetFormatter(Type, ISerializationPolicy) Sirenix.Serialization.FormatterLocator:GetFormatter(ISerializationPolicy) Sirenix.Serialization.ComplexTypeSerializer1:ReadValue(IDataReader)
    Sirenix.Serialization.Serializer1:ReadValueWeak(IDataReader) Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, IDataReader) Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, Byte[]&, List1&, DataFormat, DeserializationContext)
    Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, SerializationData&, DeserializationContext, Boolean, List`1)
    Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, SerializationData&, DeserializationContext)
    Sirenix.OdinInspector.SerializedMonoBehaviour:UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize()

    (Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

    ExecutionEngineException: Attempting to call method 'Sirenix.Serialization.DictionaryFormatter2[[ValidateInputFieldMessage, Assembly-CSharp, Version=1.0.0.0, Culture=, ublicKeyToken=null],[UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, Culture=, PublicKeyToken=null]]::.ctor' for which no ahead of time (AOT) code was generated. at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters, System.Exception& exc) [0x00000] in <filename unknown>:0 at System.Reflection.MonoCMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) 0x00000] in <filename unknown>:0 at System.Reflection.MonoCMethod.Invoke (BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in filename unknown>:0 at System.Rflection.ConstructorInfo.Invoke (System.Object[] parameters) [0x00000] in <filename unknown>:0 at System.Activator.CreateInstance (System.Type type, Boolean nonPublic) [0x00000] in <filename unknown>:0 at System.Activator.CreateInstance (System.Type type) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatterInstance (System.Type type) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.CreateFormatter (System.Type type, ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter (System.Type type, ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter[T] (ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.ComplexTypeSerializer1[T].ReadValue (IDataReader reader) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.Serializer1[T].ReadValueWeak (IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, System.Byte[]& bytes, System.Collections.Generic.List1& referencedUnityObjects, ataFormat format, Sirenix.Serialization.DeserializationContext context) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context, oolean isPrefabData, System.Collections.Generic.List1 prefabInstanceUnityObjects) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context) 0x00000] in <filename unknown>:0 at Sirenix.OdinInspector.SerializedMonoBehaviour.UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize () [0x00000] in <filename unknown>:0 Rethrow as SerializationAbortException: AOT formatter support was missing for type 'System.Collections.Generic.Dictionary<ValidateInputFieldMessage, GameObject>'. at Sirenix.Serialization.FormatterLocator.LogAOTError (System.Type type, System.Exception ex) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter (System.Type type, ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter[T] (ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.ComplexTypeSerializer1[T].ReadValue (IDataReader reader) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.Serializer1[T].ReadValueWeak (IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, System.Byte[]& bytes, System.Collections.Generic.List1& referencedUnityObjects, ataFormat format, Sirenix.Serialization.DeserializationContext context) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context, oolean isPrefabData, System.Collections.Generic.List1 prefabInstanceUnityObjects) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context) 0x00000] in <filename unknown>:0 at Sirenix.OdinInspector.SerializedMonoBehaviour.UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize () [0x00000] in <filename unknown>:0 Rethrow as SerializationAbortException: Deserialization of type 'ValidateInputField' aborted. at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, System.Byte[]& bytes, System.Collections.Generic.List1& referencedUnityObjects, ataFormat format, Sirenix.Serialization.DeserializationContext context) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context, oolean isPrefabData, System.Collections.Generic.List`1 prefabInstanceUnityObjects) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context) 0x00000] in <filename unknown>:0
    at Sirenix.OdinInspector.SerializedMonoBehaviour.UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize () [0x00000] in <filename unknown>:0

    (Filename: currently not available on il2cpp Line: -1)

    Creating a serialization formatter for the type 'System.Collections.Generic.Dictionary<ValidateInputFieldMessage, GameObject>' failed due to missing AOT support.

    Please use Odin's AOT generation feature to generate an AOT dll before building, and MAKE SURE that all of the following types were automatically added to the supported types list after a can (if they were not, please REPORT AN ISSUE with the details of which exact types the scan is missing and ADD THEM MANUALLY):

    Sstem.Collections.Generic.Dictionary<ValidateInputFieldMessage, GameObject>
    ValidateInputFieldMessage
    UnityEngine.GameObject

    IF ALL THE TYPES ARE IN THE SUPPORT LIST AND YOU STILL GET THIS ERROR, PLEASE REPORT AN ISSUE.The exception contained the following message:
    Attempting to call method 'Sirenix.Serialization.DictionaryFormatter2[[ValidateInputFieldMessage, Assembly-CSharp, Version=1.0.0.0, Culture=, PublicKeyToken=null],[UnityEngine.GameObject, nityEngine.CoreModule, Version=0.0.0.0, Culture=, PublicKeyToken=null]]::.ctor' for which no ahead of time (AOT) code was generated. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object) UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[]) UnityEngine.Logger:Log(LogType, Object) UnityEngine.Debug:LogError(Object) Sirenix.Serialization.FormatterLocator:LogAOTError(Type, Exception) Sirenix.Serialization.FormatterLocator:GetFormatter(Type, ISerializationPolicy) Sirenix.Serialization.FormatterLocator:GetFormatter(ISerializationPolicy) Sirenix.Serialization.ComplexTypeSerializer1:ReadValue(IDataReader)
    Sirenix.Serialization.Serializer1:ReadValueWeak(IDataReader) Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, IDataReader) Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, Byte[]&, List1&, DataFormat, DeserializationContext)
    Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, SerializationData&, DeserializationContext, Boolean, List`1)
    Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, SerializationData&, DeserializationContext)
    Sirenix.OdinInspector.SerializedMonoBehaviour:UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize()

    (Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

    ExecutionEngineException: Attempting to call method 'Sirenix.Serialization.DictionaryFormatter2[[ValidateInputFieldMessage, Assembly-CSharp, Version=1.0.0.0, Culture=, ublicKeyToken=null],[UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, Culture=, PublicKeyToken=null]]::.ctor' for which no ahead of time (AOT) code was generated. at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters, System.Exception& exc) [0x00000] in <filename unknown>:0 at System.Reflection.MonoCMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) 0x00000] in <filename unknown>:0 at System.Reflection.MonoCMethod.Invoke (BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in filename unknown>:0 at System.Rflection.ConstructorInfo.Invoke (System.Object[] parameters) [0x00000] in <filename unknown>:0 at System.Activator.CreateInstance (System.Type type, Boolean nonPublic) [0x00000] in <filename unknown>:0 at System.Activator.CreateInstance (System.Type type) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatterInstance (System.Type type) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.CreateFormatter (System.Type type, ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter (System.Type type, ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter[T] (ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.ComplexTypeSerializer1[T].ReadValue (IDataReader reader) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.Serializer1[T].ReadValueWeak (IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, System.Byte[]& bytes, System.Collections.Generic.List1& referencedUnityObjects, ataFormat format, Sirenix.Serialization.DeserializationContext context) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context, oolean isPrefabData, System.Collections.Generic.List1 prefabInstanceUnityObjects) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context) 0x00000] in <filename unknown>:0 at Sirenix.OdinInspector.SerializedMonoBehaviour.UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize () [0x00000] in <filename unknown>:0 Rethrow as SerializationAbortException: AOT formatter support was missing for type 'System.Collections.Generic.Dictionary<ValidateInputFieldMessage, GameObject>'. at Sirenix.Serialization.FormatterLocator.LogAOTError (System.Type type, System.Exception ex) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter (System.Type type, ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter[T] (ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.ComplexTypeSerializer1[T].ReadValue (IDataReader reader) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.Serializer1[T].ReadValueWeak (IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, System.Byte[]& bytes, System.Collections.Generic.List1& referencedUnityObjects, ataFormat format, Sirenix.Serialization.DeserializationContext context) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context, oolean isPrefabData, System.Collections.Generic.List1 prefabInstanceUnityObjects) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context) 0x00000] in <filename unknown>:0 at Sirenix.OdinInspector.SerializedMonoBehaviour.UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize () [0x00000] in <filename unknown>:0 Rethrow as SerializationAbortException: Deserialization of type 'ValidateInputField' aborted. at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, System.Byte[]& bytes, System.Collections.Generic.List1& referencedUnityObjects, ataFormat format, Sirenix.Serialization.DeserializationContext context) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context, oolean isPrefabData, System.Collections.Generic.List`1 prefabInstanceUnityObjects) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context) 0x00000] in <filename unknown>:0
    at Sirenix.OdinInspector.SerializedMonoBehaviour.UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize () [0x00000] in <filename unknown>:0

    (Filename: currently not available on il2cpp Line: -1)

    Creating a serialization formatter for the type 'System.Collections.Generic.Dictionary<ValidateInputFieldMessage, GameObject>' failed due to missing AOT support.

    Please use Odin's AOT generation feature to generate an AOT dll before building, and MAKE SURE that all of the following types were automatically added to the supported types list after a can (if they were not, please REPORT AN ISSUE with the details of which exact types the scan is missing and ADD THEM MANUALLY):

    Sstem.Collections.Generic.Dictionary<ValidateInputFieldMessage, GameObject>
    ValidateInputFieldMessage
    UnityEngine.GameObject

    IF ALL THE TYPES ARE IN THE SUPPORT LIST AND YOU STILL GET THIS ERROR, PLEASE REPORT AN ISSUE.The exception contained the following message:
    Attempting to call method 'Sirenix.Serialization.DictionaryFormatter2[[ValidateInputFieldMessage, Assembly-CSharp, Version=1.0.0.0, Culture=, PublicKeyToken=null],[UnityEngine.GameObject, nityEngine.CoreModule, Version=0.0.0.0, Culture=, PublicKeyToken=null]]::.ctor' for which no ahead of time (AOT) code was generated. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object) UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[]) UnityEngine.Logger:Log(LogType, Object) UnityEngine.Debug:LogError(Object) Sirenix.Serialization.FormatterLocator:LogAOTError(Type, Exception) Sirenix.Serialization.FormatterLocator:GetFormatter(Type, ISerializationPolicy) Sirenix.Serialization.FormatterLocator:GetFormatter(ISerializationPolicy) Sirenix.Serialization.ComplexTypeSerializer1:ReadValue(IDataReader)
    Sirenix.Serialization.Serializer1:ReadValueWeak(IDataReader) Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, IDataReader) Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, Byte[]&, List1&, DataFormat, DeserializationContext)
    Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, SerializationData&, DeserializationContext, Boolean, List`1)
    Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, SerializationData&, DeserializationContext)
    Sirenix.OdinInspector.SerializedMonoBehaviour:UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize()

    (Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

    ExecutionEngineException: Attempting to call method 'Sirenix.Serialization.DictionaryFormatter2[[ValidateInputFieldMessage, Assembly-CSharp, Version=1.0.0.0, Culture=, ublicKeyToken=null],[UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, Culture=, PublicKeyToken=null]]::.ctor' for which no ahead of time (AOT) code was generated. at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters, System.Exception& exc) [0x00000] in <filename unknown>:0 at System.Reflection.MonoCMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) 0x00000] in <filename unknown>:0 at System.Reflection.MonoCMethod.Invoke (BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in filename unknown>:0 at System.Rflection.ConstructorInfo.Invoke (System.Object[] parameters) [0x00000] in <filename unknown>:0 at System.Activator.CreateInstance (System.Type type, Boolean nonPublic) [0x00000] in <filename unknown>:0 at System.Activator.CreateInstance (System.Type type) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatterInstance (System.Type type) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.CreateFormatter (System.Type type, ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter (System.Type type, ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter[T] (ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.ComplexTypeSerializer1[T].ReadValue (IDataReader reader) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.Serializer1[T].ReadValueWeak (IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, System.Byte[]& bytes, System.Collections.Generic.List1& referencedUnityObjects, ataFormat format, Sirenix.Serialization.DeserializationContext context) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context, oolean isPrefabData, System.Collections.Generic.List1 prefabInstanceUnityObjects) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context) 0x00000] in <filename unknown>:0 at Sirenix.OdinInspector.SerializedMonoBehaviour.UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize () [0x00000] in <filename unknown>:0 Rethrow as SerializationAbortException: AOT formatter support was missing for type 'System.Collections.Generic.Dictionary<ValidateInputFieldMessage, GameObject>'. at Sirenix.Serialization.FormatterLocator.LogAOTError (System.Type type, System.Exception ex) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter (System.Type type, ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter[T] (ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.ComplexTypeSerializer1[T].ReadValue (IDataReader reader) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.Serializer1[T].ReadValueWeak (IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, System.Byte[]& bytes, System.Collections.Generic.List1& referencedUnityObjects, ataFormat format, Sirenix.Serialization.DeserializationContext context) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context, oolean isPrefabData, System.Collections.Generic.List1 prefabInstanceUnityObjects) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context) 0x00000] in <filename unknown>:0 at Sirenix.OdinInspector.SerializedMonoBehaviour.UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize () [0x00000] in <filename unknown>:0 Rethrow as SerializationAbortException: Deserialization of type 'ValidateInputField' aborted. at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, System.Byte[]& bytes, System.Collections.Generic.List1& referencedUnityObjects, ataFormat format, Sirenix.Serialization.DeserializationContext context) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context, oolean isPrefabData, System.Collections.Generic.List`1 prefabInstanceUnityObjects) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context) 0x00000] in <filename unknown>:0
    at Sirenix.OdinInspector.SerializedMonoBehaviour.UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize () [0x00000] in <filename unknown>:0

    (Filename: currently not available on il2cpp Line: -1)

    Creating a serialization formatter for the type 'System.Collections.Generic.Dictionary<ValidateInputFieldMessage, GameObject>' failed due to missing AOT support.

    Please use Odin's AOT generation feature to generate an AOT dll before building, and MAKE SURE that all of the following types were automatically added to the supported types list after a can (if they were not, please REPORT AN ISSUE with the details of which exact types the scan is missing and ADD THEM MANUALLY):

    Sstem.Collections.Generic.Dictionary<ValidateInputFieldMessage, GameObject>
    ValidateInputFieldMessage
    UnityEngine.GameObject

    IF ALL THE TYPES ARE IN THE SUPPORT LIST AND YOU STILL GET THIS ERROR, PLEASE REPORT AN ISSUE.The exception contained the following message:
    Attempting to call method 'Sirenix.Serialization.DictionaryFormatter2[[ValidateInputFieldMessage, Assembly-CSharp, Version=1.0.0.0, Culture=, PublicKeyToken=null],[UnityEngine.GameObject, nityEngine.CoreModule, Version=0.0.0.0, Culture=, PublicKeyToken=null]]::.ctor' for which no ahead of time (AOT) code was generated. UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object) UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[]) UnityEngine.Logger:Log(LogType, Object) UnityEngine.Debug:LogError(Object) Sirenix.Serialization.FormatterLocator:LogAOTError(Type, Exception) Sirenix.Serialization.FormatterLocator:GetFormatter(Type, ISerializationPolicy) Sirenix.Serialization.FormatterLocator:GetFormatter(ISerializationPolicy) Sirenix.Serialization.ComplexTypeSerializer1:ReadValue(IDataReader)
    Sirenix.Serialization.Serializer1:ReadValueWeak(IDataReader) Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, IDataReader) Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, Byte[]&, List1&, DataFormat, DeserializationContext)
    Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, SerializationData&, DeserializationContext, Boolean, List`1)
    Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, SerializationData&, DeserializationContext)
    Sirenix.OdinInspector.SerializedMonoBehaviour:UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize()

    (Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

    ExecutionEngineException: Attempting to call method 'Sirenix.Serialization.DictionaryFormatter2[[ValidateInputFieldMessage, Assembly-CSharp, Version=1.0.0.0, Culture=, ublicKeyToken=null],[UnityEngine.GameObject, UnityEngine.CoreModule, Version=0.0.0.0, Culture=, PublicKeyToken=null]]::.ctor' for which no ahead of time (AOT) code was generated. at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters, System.Exception& exc) [0x00000] in <filename unknown>:0 at System.Reflection.MonoCMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) 0x00000] in <filename unknown>:0 at System.Reflection.MonoCMethod.Invoke (BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in filename unknown>:0 at System.Rflection.ConstructorInfo.Invoke (System.Object[] parameters) [0x00000] in <filename unknown>:0 at System.Activator.CreateInstance (System.Type type, Boolean nonPublic) [0x00000] in <filename unknown>:0 at System.Activator.CreateInstance (System.Type type) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatterInstance (System.Type type) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.CreateFormatter (System.Type type, ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter (System.Type type, ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter[T] (ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.ComplexTypeSerializer1[T].ReadValue (IDataReader reader) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.Serializer1[T].ReadValueWeak (IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, System.Byte[]& bytes, System.Collections.Generic.List1& referencedUnityObjects, ataFormat format, Sirenix.Serialization.DeserializationContext context) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context, oolean isPrefabData, System.Collections.Generic.List1 prefabInstanceUnityObjects) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context) 0x00000] in <filename unknown>:0 at Sirenix.OdinInspector.SerializedMonoBehaviour.UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize () [0x00000] in <filename unknown>:0 Rethrow as SerializationAbortException: AOT formatter support was missing for type 'System.Collections.Generic.Dictionary<ValidateInputFieldMessage, GameObject>'. at Sirenix.Serialization.FormatterLocator.LogAOTError (System.Type type, System.Exception ex) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter (System.Type type, ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.FormatterLocator.GetFormatter[T] (ISerializationPolicy policy) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.ComplexTypeSerializer1[T].ReadValue (IDataReader reader) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.Serializer1[T].ReadValueWeak (IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, System.Byte[]& bytes, System.Collections.Generic.List1& referencedUnityObjects, ataFormat format, Sirenix.Serialization.DeserializationContext context) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context, oolean isPrefabData, System.Collections.Generic.List1 prefabInstanceUnityObjects) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context) 0x00000] in <filename unknown>:0 at Sirenix.OdinInspector.SerializedMonoBehaviour.UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize () [0x00000] in <filename unknown>:0 Rethrow as SerializationAbortException: Deserialization of type 'ValidateInputField' aborted. at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, System.Byte[]& bytes, System.Collections.Generic.List1& referencedUnityObjects, ataFormat format, Sirenix.Serialization.DeserializationContext context) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context, oolean isPrefabData, System.Collections.Generic.List`1 prefabInstanceUnityObjects) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context) 0x00000] in <filename unknown>:0
    at Sirenix.OdinInspector.SerializedMonoBehaviour.UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize () [0x00000] in <filename unknown>:0

    (Filename: currently not available on il2cpp Line: -1)

    The referenced script on this Behaviour (Game Object 'progressbar') is missing!

    (Filename: Line: 1758)

    No AOT serializer was pre-generated for the type 'UnityEngine.Events.PersistentListenerMode'. Please use Odin's AOT generation feature to generate an AOT dll before building, and ensure that UnityEngine.Events.PersistentListenerMode' is in the list of supported types after a scan. If it is not, please report an issue and add it to the list manually.
    UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    UnityEngine.Logger:Log(LogType, Object)
    UnityEngine.Debug:LogError(Object)
    Sirenix.Serialization.Serializer:LogAOTError(Type, ExecutionEngineException)
    Sirenix.Serialization.Serializer:Create(Type)
    Sirenix.Serialization.Serializer:Get(Type)
    Sirenix.Serialization.ReflectionFormatter1:DeserializeImplementation(T&, IDataReader) Sirenix.Serialization.BaseFormatter1:Deserialize(IDataReader)
    Sirenix.Serialization.ComplexTypeSerializer1:ReadValue(IDataReader) Sirenix.Serialization.ListFormatter1:DeserializeImplementation(List1&, IDataReader) Sirenix.Serialization.BaseFormatter1:Deserialize(IDataReader)
    Sirenix.Serialization.ComplexTypeSerializer1:ReadValue(IDataReader) Sirenix.Serialization.Serializer1:ReadValueWeak(IDataReader)
    Sirenix.Serialization.ReflectionFormatter1:DeserializeImplementation(T&, IDataReader) Sirenix.Serialization.BaseFormatter1:Deserialize(IDataReader)
    Sirenix.Serialization.ComplexTypeSerializer1:ReadValue(IDataReader) Sirenix.Serialization.Serializer1:ReadValueWeak(IDataReader)
    Sirenix.Serialization.ReflectionFormatter1:DeserializeImplementation(T&, IDataReader) Sirenix.Serialization.BaseFormatter1:Deserialize(IDataReader)
    Sirenix.Serialization.ComplexTypeSerializer1:ReadValue(IDataReader) Sirenix.Serialization.Serializer1:ReadValueWeak(IDataReader)
    Sirenix.Serialization.ReflectionFormatter1:DeserializeImplementation(T&, IDataReader) Sirenix.Serialization.BaseFormatter1:Deserialize(IDataReader)
    Sirenix.Serialization.ComplexTypeSerializer1:ReadValue(IDataReader) Sirenix.Serialization.DictionaryFormatter2:DeserializeImplementation(Dictionary2&, IDataReader) Sirenix.Serialization.BaseFormatter1:Deserialize(IDataReader)
    Sirenix.Serialization.ComplexTypeSerializer1:ReadValue(IDataReader) Sirenix.Serialization.Serializer1:ReadValueWeak(IDataReader)
    Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, IDataReader)
    Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, Byte[]&, List1&, DataFormat, DeserializationContext) Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, SerializationData&, DeserializationContext, Boolean, List1)
    Sirenix.Serialization.UnitySerializationUtility:DeserializeUnityObject(Object, SerializationData&, DeserializationContext)
    Sirenix.OdinInspector.SerializedMonoBehaviour:UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize()

    (Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

    SerializationAbortException: The following error was logged during serialization or deserialization: Data layout mismatch; skipping past node boundary when exiting array.
    at Sirenix.Serialization.DebugContext.LogError (System.String message) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.BinaryDataReader.ExitArray () [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.DictionaryFormatter2[TKey,TValue].DeserializeImplementation (System.Collections.Generic.Dictionary2& value, IDataReader reader) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.BaseFormatter1[T].Deserialize (IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.ComplexTypeSerializer1[T].ReadValue (IDataReader reader) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.Serializer1[T].ReadValueWeak (IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, System.Byte[]& bytes, System.Collections.Generic.List1& referencedUnityObjects, ataFormat format, Sirenix.Serialization.DeserializationContext context) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context, oolean isPrefabData, System.Collections.Generic.List1 prefabInstanceUnityObjects) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context) 0x00000] in <filename unknown>:0 at Sirenix.OdinInspector.SerializedMonoBehaviour.UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize () [0x00000] in <filename unknown>:0 Rethrow as SerializationAbortException: Deserialization of type 'Drift.UI.PopupUpdateFirmware' aborted. at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, IDataReader reader) [0x00000] in <filename unknown>:0 at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, System.Byte[]& bytes, System.Collections.Generic.List1& referencedUnityObjects, ataFormat format, Sirenix.Serialization.DeserializationContext context) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context, oolean isPrefabData, System.Collections.Generic.List`1 prefabInstanceUnityObjects) [0x00000] in <filename unknown>:0
    at Sirenix.Serialization.UnitySerializationUtility.DeserializeUnityObject (UnityEngine.Object unityObject, SerializationData& data, Sirenix.Serialization.DeserializationContext context) 0x00000] in <filename unknown>:0
    at Sirenix.OdinInspector.SerializedMonoBehaviour.UnityEngine.ISerializationCallbackReceiver.OnAfterDeserialize () [0x00000] in <filename unknown>:0

    (Filename: currently not available on il2cpp Line: -1)

    Unloading 6 Unused Serialized files (Serialized files now loaded: 0)
    UnloadTime: 3.125625 ms
    BLE Initialize:
    UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    UnityEngine.Logger:Log(LogType, Object)
    UnityEngine.Debug:Log(Object)
    Drift.Globals:LogInfo(String, String)
    Drift.BLE_IOS:Initialize(Action, Action`1)
    Drift.BluetoothManager:TryInitialize()
    Drift.BluetoothManager:RecreateBLEInterface()
    Drift.BluetoothManager:Awake()

    (Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

    Post
    UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    UnityEngine.Logger:Log(LogType, Object)
    UnityEngine.Debug:Log(Object)
    Drift.<Post>c__Iterator3:MoveNext()
    UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)
    UnityEngine.MonoBehaviour:StartCoroutine_Auto_Internal(IEnumerator)
    UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)
    AppVersionManager:QueryAppVersion()
    AppVersionManager:Awake()

    (Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

    HandleExceptions
    UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    UnityEngine.Logger:Log(LogType, Object)
    UnityEngine.Debug:Log(Object)
    Drift.<HandleExceptions>c__Iterator1:MoveNext()
    UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)
    UnityEngine.MonoBehaviour:StartCoroutine_Auto_Internal(IEnumerator)
    UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)
    AppVersionManager:QueryAppVersion()
    AppVersionManager:Awake()

    (Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

    HandleResponse
    UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    UnityEngine.Logger:Log(LogType, Object)
    UnityEngine.Debug:Log(Object)
    Drift.<HandleResponse>cIterator0:MoveNext()
    Drift.<HandleExceptions>c
    Iterator1:MoveNext()
    UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)
    UnityEngine.MonoBehaviour:StartCoroutine_Auto_Internal(IEnumerator)
    UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)
    AppVersionManager:QueryAppVersion()
    AppVersionManager:Awake()

    (Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

    Send
    UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    UnityEngine.Logger:Log(LogType, Object)
    UnityEngine.Debug:Log(Object)
    Drift.<HandleResponse>cIterator0:MoveNext()
    Drift.<HandleExceptions>c
    Iterator1:MoveNext()
    UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)
    UnityEngine.MonoBehaviour:StartCoroutine_Auto_Internal(IEnumerator)
    UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)
    AppVersionManager:QueryAppVersion()
    AppVersionManager:Awake()

    (Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

    DontDestroyOnLoad only work for root GameObjects or components on root GameObjects.
    UnityEngine.Object:DontDestroyOnLoad(Object)
    GameAnalyticsSDK.GameAnalytics:Awake()

    [ line 485]
    (Filename: Line: 485)

    Custom id is enabled. Initialize is delayed until custom id has been set.
    UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    UnityEngine.Logger:Log(LogType, Object)
    UnityEngine.Debug:Log(Object)
    GameAnalyticsSDK.GameAnalytics:Initialize()
    GameAnalyticsSDK.GameAnalytics:Awake()

    (Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

    DFUManager:Awake for DFUManager.
    UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    UnityEngine.Logger:Log(LogType, Object)
    UnityEngine.Debug:Log(Object)
    Drift.Globals:LogInfo(String, String)
    Drift.DFUManager:Awake()

    (Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)

    Scene main is loaded
    UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
    UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    UnityEngine.Logger:Log(LogType, Object)
    UnityEngine.Debug:Log(Object)
    Reporter:OnLevelWasLoaded()

    (Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/DebugBindings.gen.cpp Line: 51)
    2018-09-13 02:19:51.559712+0200 drift[21730:10857930] Info/GA/Analytics: Event queue: 1 events sent.

  3. Andreas Podgurski reporter

    The enum itself:

    // Potential checks for the InputField.
    public enum ValidateInputFieldMessage {
        ContentTooShort,
        ContentTooLong,
        ContentInvalid,
        ContentNotEqual,
    }
    

    And the dictionary:

    [RequireComponent(typeof(InputField))]
    public class ValidateInputField : SerializedMonoBehaviour, IValidatePanel {
        public Dictionary<ValidateInputFieldMessage, GameObject> ValidateMessages = new Dictionary<ValidateInputFieldMessage, GameObject>();
    }
    
  4. Andreas Podgurski reporter

    The other case:

        [Serializable]
        public class PUFState {
            public bool Ok;
            public bool ProgressBar;
            public bool Cancel;
            public bool Hourglass;
            public string LocaleKey;
            public UnityEvent UpdateEvent;
        }
    
    public class PopupUpdateFirmware : SerializedMonoBehaviour {
        public Dictionary<string, PUFState> PUFStates;
    }
    
  5. Tor Esa Vestergaard

    Thank you - I'll be taking a look at this tomorrow once I get to work. We are already pushing a hotfix 2.0.4 today, so this won't make that, but I will let you know once I have a fix and see if I can get it sent to you.

  6. Tor Esa Vestergaard

    I've so far been unable to replicate this. The enum is picked up by the scan, I had a peek at the IL of the generated AOT support dll and it looked fine, and an AOT build to WebGL worked fine as well. I'm not actually able to do iOS builds here, but I think it seems unlikely that the platform is at fault, from your description.

    Here's what I did, step by step - perhaps you can identify some difference in approach:

    • I made a ValidateInputField script and added an OnGUI method to display the dictionary data when the scene is loaded:
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using Sirenix.OdinInspector;
    
    public class ValidateInputField : SerializedMonoBehaviour
    {
        public Dictionary<ValidateInputFieldMessage, GameObject> ValidateMessages = new Dictionary<ValidateInputFieldMessage, GameObject>();
    
        private void OnGUI()
        {
            if (ValidateMessages == null)
            {
                GUILayout.Label("NULL");
                return;
            }
    
            foreach (var entry in ValidateMessages)
            {
                GUILayout.Label(entry.Key + " - " + entry.Value);
            }
        }
    }
    
    public enum ValidateInputFieldMessage
    {
        ContentTooShort,
        ContentTooLong,
        ContentInvalid,
        ContentNotEqual,
    }
    
    • I made a scene, added it to the build settings, added the component to an object, populated the dictionary with some test data (all possible enum values used as keys), saved the scene, and ran the scene in play mode - all good and working.

    • I went to Tools -> Odin Inspector -> Preferences -> AOT Generation, scanned the project to see if all required types showed up (they did), generated a test dll and inspected it with ILSpy, it all looked fine. The supported types were: Dictionary<ValidateInputFieldMessage, GameObject>, EnumEqualityComparer<ValidateInputFieldMessage>, GameObject, ValidateInputFieldMessage

    • I enabled the "Automate for platforms" option and made sure WebGL was in the list (as it's the only AOT platform I've installed support for at the moment). From your described problems, it shouldn't make a difference, I think.

    • I make a build, make coffee and finish drinking my coffee while it builds (gee, WebGL builds do take a while...), and finally run the build. All works.

    Perhaps you can point out where my approach differs from yours, or perhaps try out the steps yourself and see if you still experience the issue with my exact steps and platform. If you don't, it should be straightforward enough to narrow it down to the relevant factor that's breaking things, and we can proceed from there.

  7. Andreas Podgurski reporter

    Thanks for the efforts so far!
    I don't think it is the final build at all - ValidateInputFieldMessage is simply not recognized at all. I tried to move the declaration behind the class (Sometimes this fixes things for Unity recognizing a call at all), but no difference.
    ValidateInputFieldMessage is not present in the AOT Generation list. But if I add in manually, I get a "modified" as status.
    Same is the case for UnityEngine.GameObject
    Dictionary and EnumEqualityComparer can't be added manually, they receive the status "Missing", even with correct namespace paths.
    I think that's the point where we need to start - is there any caching, I can invalidate or something...?
    I don't get any of the four types descibed by you automatically.

  8. Andreas Podgurski reporter

    Update: Deleting Odin and reimporting it completely made no difference, still only 54 types visible.

  9. Tor Esa Vestergaard

    The scan works by scanning all scenes that are included in the build, all assets referenced by those scenes (recursively, including assets referenced by those assets, and so on), and all Resources. Is your data perhaps part of an asset bundle, or something similar - such that the scan might pass it by, given the criteria I list?

  10. Andreas Podgurski reporter

    No, definitely not. I have a single scene, as our app is primarly a UI to the user (running a physical simulation in the background). The scripts are in a Scripts named directory directly below assets and are referenced in panels of the UI.

  11. Andreas Podgurski reporter

    Ok - just found the problem - the screens and popups are disabled by default to be invisible. This was not a problem before 2.0 it seems, but now the referenced classes are ignored. Activating them results in finding them within the AOT generator, I now have 57 types, the Dictionary, the enum and the EqualityComparer. Doing this with the firmware update popup as well results in 68 found classes.

    From my understanding, this should be a bug, as enabling and disabling GameObjects is a valid technique in Unity, isn't it?
    Update: Works in both directions, hiding the firmware popup again results in loosing the references in the AOT generator.

  12. Tor Esa Vestergaard

    It is indeed a valid thing to do, and you're correct that the scan should find disabled objects in scenes, that would seem to be an oversight on my part. I'll make sure to get a fix in for this, and if you send me your Odin invoice ID at tor@sirenix.net, I'll send you the fix once I've got it! Cheers for figuring it out :)

  13. Andreas Podgurski reporter

    Thanks for the quick fix - looks very good, worked on PC and Mac in the editor and ran fine again on the device! Ready to roll out :)

  14. Log in to comment