Unity公式のXcodeプロジェクト編集API「PBXProject」をUnity4でつかう

  • 9
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Unityを利用してiOSの開発をしていると、
ちょいちょい出力したXcodeプロジェクトに、Frameworkなどを追加する必要が出てきたりします。

毎回手動でやるのはめんどし、
Jenkinsなどと統合している場合は自動化しなければなりません。

ということで今まではPython製のmod-pbxprojやC#製でUnity用のXCodeEditor-for-Unityなど、外部のツールを利用して頑張るのが一般的でした。

しかしUnity5からPBXProjectというAPIがデフォルトでつかえます。
http://docs.unity3d.com/ScriptReference/iOS.Xcode.PBXProject.html

このAPIとPostProcessBuildアトリビュートと組み合わせて以下みたいに書くと、簡単にFrameworkとか追加できます。

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

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

        string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";

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

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

        proj.AddFrameworkToProject(target, "StoreKit.framework", false);

        proj.WriteToFile(projPath);
    }
}

FrameworkだけでなくOther Linker Flagの追加やファイルの追加などもできます。

すごく簡単!!

Unity4でつかう

しかし、PBXProjectはUnity5用です。
まだUnity4で運用しているプロジェクトがある中でそんなのずるい!
ということで、一応利用する方法はあります。

まず、Unity.appを右クリックしてメニューを表示し、
「パッケージの内容を表示」をクリックします。

そして、パスを辿り以下のファイルをUnityプロジェクトのEditorフォルダ以下にドラッグアンドドロップします。

/Applications/Unity4.6.9/Unity.app/Contents/PlaybackEngines/iossupport/UnityEditor.iOS.Extensions.Xcode

これで、PBXProjectの機能をUnity4でも使えるようになります。
じつはこのUnityEditor.iOS.Extensions.XcodeはUnity4.6あたりから、
含まれていたようです。

だたし、Unity5にバンドルされているバージョンとは少し異なるようで、
使えるAPIに差異があったりします。

Unity4/Unity5でPBXProjectの最新版・修正版を使う

さてPBXProjectは便利なのですが、
Unity4では最新版でなかったり、
バグがあったりdylibファイルの追加に対応していなかったりします。

そんな時は、PBXProjecリポジトリが
公式から公開されているため、それをインポートすることも可能です。
リポジトリ名はXcodeAPIになってます。

https://bitbucket.org/Unity-Technologies/xcodeapi

プロジェクトをダウンロード or Cloneしてきて、
Editor以下に配置すればOKです。
ただし、そのままだとUtils周りでエラーが出るため、
以下の修正が必要です。

Utils.*** => PBX.Utils.***

修正箇所が20箇所ぐらいありますが...なんとか置換でいけます。

また、かゆいところに手がとどかない...
みたいなところがあれば自分で機能を修正することも可能です。(自己責任ですが)

ちなみに、dylibの追加に対応していなかったので、
Forkして機能を追加し、Utilsの件も含めて修正してしまいました。
(こちらも利用するときは自己責任で)
https://bitbucket.org/mikito/xcodeapi/

参考