UnityのPBXProjectでXcode7プロジェクトに.tbdを追加する

  • 4
    Like
  • 0
    Comment
More than 1 year has passed since last update.

Xcode7ではdylibファイルがtbdファイルに切り替わったことがあり、
Unityでもその対応が必要になりそうです。

実際UnityからXcodeをビルドすると
libiconv.2.dylibがミッシングになっています。

こちらビルドは正常に通るみたいですが、
気になるのでPostProcessBuildとPBXProjectを使って自動置き換えを試みました。
(のちのち他のtbdを追加することもありそうですし...)

ちょっとさわってわかったのですが、
そもそも現状のPBXProjectはdylibファイルの追加も対応してないみたいです。
AddFrameworkToProjectやAddFileToBuildだと、
ProjectのヒエラルキーにはでるけどBuild Phasesには表示されないなどへんな感じです。

PBXProjectはソースが公開されているため確認すると、たしかにFrameworkのことしか考慮されていないもよう。

とういうことで、tbdを含めてLibraryを扱う機能を追加してみました。
https://bitbucket.org/mikito/xcodeapi/branch/feature/tbd

改造版PBXProjectの導入方法はこちら
http://qiita.com/mikito/items/0a1f14c6d9d573c1ab27

以下のようなコードで修正や追加を実行します。

Editor/FixIconvPostprocessBuildPlayer.cs
using UnityEngine;
using System.Collections;
using System.IO;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;

public class FixIconvPostprocessBuildPlayer
{
    [PostProcessBuild]
    public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
    {
        if (buildTarget != BuildTarget.iPhone) return;

        string projPath = PBXProject.GetPBXProjectPath(path);

        PBXProject proj = new PBXProject();
        proj.ReadFromFile(projPath);

        string target = proj.TargetGuidByName("Unity-iPhone");

        proj.RemoveLibraryFromProject(target, "libiconv.2.dylib");       
        proj.AddLibraryToProject(target, "libiconv.2.tbd", false);

        proj.WriteToFile(projPath);
    }
}

Unityが公式に対応するまでは、
こんな感じでやってくしかなさそうです。