Skip to content
This repository has been archived by the owner on Oct 6, 2023. It is now read-only.

Help: Error when building Unity project #65

Closed
gavinb80 opened this issue Aug 11, 2020 · 6 comments · Fixed by #72
Closed

Help: Error when building Unity project #65

gavinb80 opened this issue Aug 11, 2020 · 6 comments · Fixed by #72
Assignees
Milestone

Comments

@gavinb80
Copy link

gavinb80 commented Aug 11, 2020

Hi,

I've added the latest version of Json.net package (12.0.3) to my Unity project, but when I build the project to test on my iOS device I get the following error:

Exception: /Applications/2019.4.6f1/Unity.app/Contents/il2cpp/build/deploy/net471/UnityLinker.exe did not run properly!
UnityEditorInternal.Runner.RunProgram (UnityEditor.Utils.Program p, System.String exe, System.String args, System.String workingDirectory, UnityEditor.Scripting.Compilers.CompilerOutputParserBase parser) (at /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:128)
UnityEditorInternal.Runner.RunManagedProgram (System.String exe, System.String args, System.String workingDirectory, UnityEditor.Scripting.Compilers.CompilerOutputParserBase parser, System.Action`1[T] setupStartInfo) (at /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:71)
UnityEditorInternal.AssemblyStripper.RunAssemblyLinker (System.Collections.Generic.IEnumerable`1[T] args, System.String& out, System.String& err, System.String linkerPath, System.String workingDirectory) (at /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:166)
UnityEditorInternal.AssemblyStripper.StripAssembliesTo (System.String outputFolder, System.String& output, System.String& error, System.Collections.Generic.IEnumerable`1[T] linkXmlFiles, UnityEditorInternal.UnityLinkerRunInformation runInformation) (at /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:159)
UnityEditorInternal.AssemblyStripper.RunAssemblyStripper (UnityEditorInternal.UnityLinkerRunInformation runInformation) (at /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:301)
UnityEditorInternal.AssemblyStripper.StripAssemblies (System.String managedAssemblyFolderPath, UnityEditorInternal.BaseUnityLinkerPlatformProvider unityLinkerPlatformProvider, UnityEditorInternal.IIl2CppPlatformProvider il2cppPlatformProvider, UnityEditor.RuntimeClassRegistry rcr, UnityEditor.ManagedStrippingLevel managedStrippingLevel) (at /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:178)
UnityEditorInternal.IL2CPPBuilder.Run () (at /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:327)
UnityEditorInternal.IL2CPPUtils.RunIl2Cpp (System.String tempFolder, System.String stagingAreaData, UnityEditorInternal.IIl2CppPlatformProvider platformProvider, System.Action`1[T] modifyOutputBeforeCompile, UnityEditor.RuntimeClassRegistry runtimeClassRegistry) (at /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:65)
UnityEditor.iOS.PostProcessiPhonePlayer.CrossCompileManagedDlls (UnityEditor.iOS.PostProcessiPhonePlayer+BuildSettings bs, UnityEditor.iOS.PostProcessiPhonePlayer+ProjectPaths paths, UnityEditor.AssemblyReferenceChecker checker, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport buildReport) (at /Users/builduser/buildslave/unity/build/PlatformDependent/iPhonePlayer/Extensions/Common/BuildPostProcessor.cs:898)
UnityEditor.iOS.PostProcessiPhonePlayer.PostProcess (UnityEditor.iOS.PostProcessiPhonePlayer+BuildSettings bs, UnityEditor.iOS.PostProcessiPhonePlayer+ProjectPaths paths, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport buildReport) (at /Users/builduser/buildslave/unity/build/PlatformDependent/iPhonePlayer/Extensions/Common/BuildPostProcessor.cs:731)
UnityEditor.iOS.PostProcessiPhonePlayer.PostProcess (UnityEditor.iOS.PostProcessorSettings postProcessorSettings, UnityEditor.Modules.BuildPostProcessArgs args) (at /Users/builduser/buildslave/unity/build/PlatformDependent/iPhonePlayer/Extensions/Common/BuildPostProcessor.cs:679)
UnityEditor.iOS.iOSBuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args) (at /Users/builduser/buildslave/unity/build/PlatformDependent/iPhonePlayer/Extensions/Common/ExtensionModule.cs:45)
Rethrow as BuildFailedException: Exception of type 'UnityEditor.Build.BuildFailedException' was thrown.
UnityEditor.iOS.iOSBuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args) (at /Users/builduser/buildslave/unity/build/PlatformDependent/iPhonePlayer/Extensions/Common/ExtensionModule.cs:49)
UnityEditor.Modules.DefaultBuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args, UnityEditor.BuildProperties& outProperties) (at /Users/builduser/buildslave/unity/build/Editor/Mono/Modules/DefaultBuildPostprocessor.cs:27)
UnityEditor.PostprocessBuildPlayer.Postprocess (UnityEditor.BuildTargetGroup targetGroup, UnityEditor.BuildTarget target, System.String installPath, System.String companyName, System.String productName, System.Int32 width, System.Int32 height, UnityEditor.BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report) (at /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:340)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) (at /Users/builduser/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:197)

My class:

namespace TestGame
{

    using System.Globalization;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Converters;

    public partial class GameModel
    {
        [JsonProperty("playerTwoColor")]
        public string PlayerTwoColor { get; set; }

        [JsonProperty("tokens")]
        public Token[] Tokens { get; set; }

        [JsonProperty("playerOneColor")]
        public string PlayerOneColor { get; set; }

        [JsonProperty("isLocalPlayersTurn")]
        public bool IsLocalPlayersTurn { get; set; }

        [JsonProperty("gameGrid")]
        public long[][] GameGrid { get; set; }

        [JsonProperty("gridSize")]
        public long GridSize { get; set; }
    }

    public partial class Token
    {
        [JsonProperty("player")]
        public long Player { get; set; }

        [JsonProperty("coord")]
        public Coord Coord { get; set; }
    }

    public partial class Coord
    {
        [JsonProperty("x")]
        public long X { get; set; }

        [JsonProperty("y")]
        public long Y { get; set; }
    }

    public partial class GameModel
    {
        public static GameModel FromJson(string json) => JsonConvert.DeserializeObject<GameModel>(json, TestGame.Converter.Settings);
    }

    public static class Serialize
    {
        public static string ToJson(this GameModel self) => JsonConvert.SerializeObject(self, TestGame.Converter.Settings);
    }

    internal static class Converter
    {
        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
        {
            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
            DateParseHandling = DateParseHandling.None,
            Converters =
            {
                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
            },
        };
    }
}

Then from one of my game C# scripts I call:

        GameModel game;// = GameModel();

        if (match.Data != null)
        {
            var x = System.Text.Encoding.UTF8.GetString(match.Data);

            Debug.Log($"Data: {x}");
            game = GameModel.FromJson(x)
        }
        else
        {
            Debug.Log("New Game");
        }

The TestGame class was generated via https://app.quicktype.io and it seems to work ok in a small C# Console app via the standard Newtonsoft.Json library from Nuget.

Any help appreciated

@applejag
Copy link
Owner

Hi @gavinb80! Thanks for reporting this! I reformatted your description a little. I conclude from your error message that you're using Unity 2019.4.6.f1, but I cannot make any other informative guesses on what could be the cause here, sorry to say. I will try reproduce the issue and report back on my findings.

@applejag applejag self-assigned this Aug 12, 2020
@tsira
Copy link

tsira commented Nov 4, 2020

Two suggestions I have looking in a very cursory manner at the error @gavinb80:

  1. Look at the stripping level setting in the Project Settings, also if it is for specific classes being stripped out and add them to the link.xml to prevent that;
  2. Make sure you are using the AOT version of Newtonsoft for the iOS build.

cc: @jilleJr

@applejag
Copy link
Owner

applejag commented Nov 5, 2020

  1. Make sure you are using the AOT version of Newtonsoft for the iOS build.

If you're using the UPM package, or even importing the package as-is with it's entire content, then it should already be configured to automatically select the AOT compatible build on iOS. Good to double-check though!

@illyahorz
Copy link

If you have 2019.4.* Unity version, don`t use "jillejr.newtonsoft.json-for-unity": "12.0.301" , use "jillejr.newtonsoft.json-for-unity": "12.0.201" instead inside manifest.xml and it will build it sucessfully.

@trongcongdn2
Copy link

I got this error when build webgl on 12.0.301 version. On older I still build webgl success.
Fatal error in Unity CIL Linker System.ArgumentException: Member 'System.Void System.Runtime.CompilerServices.NullableAttribute::.ctor(System.Byte)'

@applejag
Copy link
Owner

@trongcongdn2 That error seems related to what's mentioned in #54. A fix for that can be found in #72 and is coming in v12.0.302

As for your sample @gavinb80, I was unable to reproduce it on both Low and Medium stripping level as it built successfully. On High stripping level issue #54 took precedence. That error may be the one you refered to here, but I'm unsure.

I will be including the following link.xml config just to make sure:

<linker>
	<assembly fullname="Newtonsoft.Json">
		<type fullname="Newtonsoft.Json.Converters.IsoDateTimeConverter" preserve="all"/>
	</assembly>
</linker>

I will close this issue via PR #72. Please don't refrain from reopening this or creating a new issue if any similar errors ever appear.

applejag added a commit that referenced this issue Jan 10, 2021
- Moved link.xml into Newtonsoft.Json.csproj as embedded resource

- Fixed LogicalName

- Added preservations for the NullableAttribute and NullableContextAttribute to resolve #54

- Added some more preservations for some converters to resolve #8 and #65

- Updated CHANGELOG.md
@applejag applejag added this to the 12.0.302 milestone Jan 10, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants