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

More than 3 years have passed since last update.

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/


参考