こんにちは、Unityエンジニアのオオバです。

本記事は前回からの続きに当たります。
UnityとObjective-Cのやりとり

Unityでネイティブプラグインを作る上でint型のやり取りは、すんなり成功したのですが、String型でハマってしまったのでメモ。

👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

やりたいこと

失敗コード

Unityネイティブプラグイン文字列やり取りの失敗例 · GitHub

この失敗コードを実機でビルドしてみると、、、以下の箇所で以下のエラーが出力されます。

inline void il2cpp_codegen_marshal_free(void* ptr)  
{
    il2cpp::vm::PlatformInvoke::MarshalFree(ptr);  
}

エラー内容

nativePlugin(976,0x1b1463b40) malloc: *** error for object 0x10083ffd5: pointer being freed was not allocated  

[Unity] il2cpp::vm::PlatformInvoke::MarshalFreeでSIGBARTで落ちる | script life 千夜一夜 プログラミング別館
似たようなトラブルの記事は見つかりますが、これではないんですね。

直訳すると、解放されたポインタが割り当てられなかったというエラーになります。

いろいろ調べた結果[Unity] C#とObjective-Cの連携まとめ - Qiita こちらの記事内容で解決しました。

文字列の場合は明示的にメモリを確保し、そこに文字列をコピーし、そのポインタを返さないといけない模様です。

成功コード

先のサイトを参考に修正したコードがコチラ。

BridgeCSharpToObjC.cs · GitHub

何かと躓くネイティブプラグイン先が長いです。

オススメ記事
検証環境