друг и я создали игру с использованием Unity3D, мы используем библиотеку SignalR для связи между сервером и клиентом. Он хорошо работает на ПК, Android и MAC, но не на iOS. В ходе нашего исследования мы пришли к выводу, что SignalR имеет зависимость Newtonsoft.Json, которая использует System.Reflection.Emit, которая не поддерживается в IL2CPP, потому что она генерирует код на лету.
Xcode создает приложение и открывает его, но все, что связано с взаимодействием между сервером и клиентом, не работает и возвращает тот же тип ошибки.
В скриптовых опциях серверной части Unity3D вы можете изменить опции на Mono, которые поддерживают генерацию кода на лету, но не больше, потому что Mono не поддерживается в iOS 11 или выше.
Кто-нибудь знает, как это можно исправить или избежать, все еще используя SignalR в качестве решения сервер / клиент?
Мы попытались протестировать это даже на самом простом примере (подключение к серверу через клиента), и он вернул ошибку, из-за которой генерация кода во время выполнения не поддерживается.
Это простой пример кода, который не будет работать:
ServerConnection = "insert_your_server_name_here";
connection = new HubConnection(ServerConnection, true);
proxy = connection.CreateHubProxy("name_of_proxy");
connection.Start().Wait();
Это возвращает ошибку с:
/Users/builduser/buildslave/unity/build/Tools/il2cpp/il2cpp/libil2cpp/icalls/mscorlib/System.Reflection.Emit/DynamicMethod.cpp(20) : Unsupported internal call for IL2CPP:DynamicMethod::create_dynamic_method - System.Reflection.Emit is not supported.