コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】Unity4.3.4で出力したiOS版のWWWでメモリリークが発生する問題の対策

http://terasur.blog.fc2.com/blog-entry-719.html

Unity4.3.4でiOS版を作成すると、
WWWクラスを使用した場合にメモリが正しく解放されない不具合が存在します

なので、シェルを使って上記の問題を解決する方法を書き残しておきます

1.Macのターミナルを起動する
2.下記のコマンドを実行してgnu-sedをインストールする

brew install gnu-sed

3.下記のコマンドを実行してgsedコマンドのエイリアスとしてsedを登録する

alias sed='gsed'

これらの手順を行わないと次のコマンドの実行時に下記のエラーが出力されてしまいます

extra characters after \ at the end of i command

4.UnityでiOSビルドを行い、Xcodeプロジェクトを出力したら下記のコマンドを実行する

sed -i -e "259i\    [delegate.data release];" "【Xcodeプロジェクトのパス】/Classes/Unity/WWWConnection.mm"

5.「【Xcodeプロジェクトのパス】/Classes/Unity/WWWConnection.mm」を開いて
259行目に「[delegate.data release];」が追加されていれば成功です

extern "C" void UnityDestroyWWWConnection(void* connection)
{
    UnityWWWConnectionDelegate* delegate = (UnityWWWConnectionDelegate*)connection;

    [delegate.connection cancel];
    delegate.connection = nil;
    [delegate.data release]; // この一行が追加されていればOK
    [delegate release];
}

JenkinsでiOSビルドを自動化している場合は
上記のようなシェルを実行するようにしておくと良いかなと