LoginSignup
10
10

More than 5 years have passed since last update.

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

Posted at

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になってます。

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

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

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

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

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

参考

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10