読者です 読者をやめる 読者になる 読者になる

(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

Could not load file or assembly UnityEditor.iOS.Extensions.Xcode【Unity】【XcodeAPI】【トラブルシューティング】


このエントリーをはてなブックマークに追加

この記事でのバージョン
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を取得。


f:id:kan_kikuchi:20151005133329j:plain


解凍したディレクトリをUnityに突っ込み、Unity.iOS.Extensions.XCode.csprojを削除


f:id:kan_kikuchi:20151005133649p:plain


PBXProject.csGetPBXProjectPathにあるパスを

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");
}


その場しのぎな感じがありますが、とりあえずこれでエラーは発生しなくなります。