この記事でのバージョン
Unity 5.1.0f3 Personal
はじめに
Unity5から追加されたXcodeAPIを使っていると、
Could not load file or assembly UnityEditor.iOS.Extensions.Xcode
というエラーが発生する事があります。
今回はそれの対処法です。
発生状況
根本的な原因は分かってないのですが、エラーが発生する状況は以下の通りで、
private static void OnPostprocessBuild(BuildTarget buildTarget, string buildPath) { //Xcodeプロジェクトの読み込み string pbxProjPath = PBXProject.GetPBXProjectPath(buildPath); PBXProject pbxProject = new PBXProject(); pbxProject.ReadFromString(File.ReadAllText(pbxProjPath)); //pbxProjectを引数で渡すとエラーが発生 Method(pbxProject); //他のクラスへ渡してもエラーが発生 //HogeClass.Method(pbxProject); } private static void Method(PBXProject pbxProject){ //pbxProjectになんか処理 }
PBXProjectのインスタンスを他のメソッドに渡す時に発生します。
これが仕様なのか、バグなのかは分かりません……。
対処法
対処法は簡単で、新たにXcodeAPIを導入する事です。
実はこのエラー、Unity4にXcodeAPIを導入した場合には発生しません。
なので、Xcode5でも新たにXcodeAPIを導入してみた所、エラーが発生しなくなりました。
導入方法はまずここのダウンロードページから
Download repositoryを選択しXcodeAPIを取得。
解凍したディレクトリをUnityに突っ込み、Unity.iOS.Extensions.XCode.csprojを削除。
PBXProject.csのGetPBXProjectPathにあるパスを
Unity-iPhone/project.pbxproj から Unity-iPhone.xcodeproj/project.pbxproj に変更し、
PBXProject.csでUtilsでエラーが出る場合は、UnityEditor.iOS.Xcode.PBX.Utilsに変換しましょう。
public static string GetPBXProjectPath(string buildPath){ //修正前 //return Utils.CombinePaths(buildPath, "Unity-iPhone/project.pbxproj"); //修正後 return UnityEditor.iOS.Xcode.PBX.Utils.CombinePaths(buildPath, "Unity-iPhone.xcodeproj/project.pbxproj"); }
その場しのぎな感じがありますが、とりあえずこれでエラーは発生しなくなります。