Help us understand the problem. What is going on with this article?

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/

参考

tanoshim
モバイルゲームの企画、開発、運営およびソリューション事業を生業とした、Ruby on RailsとUnityな会社です。
https://www.tanoshim.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした