Xamarin.iOSを用いたライブラリがUnityで使えない
Visual StudioでXamarin.iOSを利用したライブラリを作成しました。
using JavaScriptCore;
using Foundation;
namespace JSCore
{
public static class MyClass
{
public static int Test()
{
JSContext jsContext = new JSContext();
jsContext[new NSString("arg1")] = JSValue.From(2, jsContext);
jsContext[new NSString("arg2")] = JSValue.From(2, jsContext);
var jsResult = jsContext.EvaluateScript("arg1 + arg2;");
return jsResult.ToInt32();
}
}
}
ビルドで出来たJSCore.dll
とXamarin.iOS.dll
をUnityのPluginsフォルダに入れてC#スクリプトの方で呼び出しを行いました。
しかし、UnityでアプリをビルドするとConverting Managed assemblies to C++の段階でエラーが起きてビルド失敗します。エラー文は以下の通りです。
IL2CPP error for method 'System.Void ObjCRuntime.Runtime::set_UseAutoreleasePoolInThreadPool(System.Boolean)' in assembly '/Users/ユーザ名/Documents/JavaScriptRuntimeTest/Temp/StagingArea/Data/Managed/Xamarin.iOS.dll'
Additional information: Build a development build for more information. Object reference not set to an instance of an object.
エラー文を読んでみて恐らくライブラリが参照しているSystem.dll
とUnity側で利用しようとしているSystem.dll
が違うのかなと思い、ライブラリをビルドする時の出力に参照しているSystem.dll
を含ませてそれをそのままUnityに入れてみました。
案の定、バージョンが衝突を起こしているという旨のエラーが出たので、プラットフォームの選択でiOSを選ぶことでエラーは消せたのですが、またしてもビルド時に同様のエラーが起きてしまいます。
error CS1703: Multiple assemblies with equivalent identity have been imported
Xamarin.iOSで利用できるSystem.dll
が2.0.5.0で、Unity(Mono)が利用しているのが4.0.0.0なのは分かっています。
このエラーを回避する方法を知りたいです。
追記(2019/0.1/20): Unityは2018.3.0f2を使用。また、PlayerSettingsのAPI Compatibility Levelは.NET Standard 2.0に設定してあります。