プログラムの素

スマートフォンアプリ開発に携わっているペーペープログラマのブログです

【Unity5】Xcode出力時にプリプロセッサマクロを登録する方法

Unity5からUnityEditor.iOS.Xcodeという名前空間が追加された模様です。

これはUnite Japan 2015でユニティ・ジャパンの伊藤さんの講演を受けた際に知ったのですが、どうもまだドキュメントがないらしいです。

UnityEditor.iOS.XcodeはUnityからiOSのプラットフォームを出力する際に、Xcodeのプロジェクトに対して、C#スクリプトから色々と操作が可能になっています。

とりあえず題名の通り、Xcode出力時にプリプロセッサマクロを登録することができたのでその方法を紹介したいと思います。

確認した環境はUnity5.0.1、Xcode6.1.1となっています。

using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;

public static class PostProcessBuildScript {

    [PostProcessBuild]
    public static void OnPostProcessBuild(BuildTarget buildTarget, string path) {

        if (buildTarget == BuildTarget.iOS) {

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

            PBXProject pbxProj = new PBXProject();
            pbxProj.ReadFromString(System.IO.File.ReadAllText(projPath));

            string target = pbxProj.TargetGuidByName("Unity-iPhone");
            string debugConfig = pbxProj.BuildConfigByName(target, "Debug");
            string releaseConfig = pbxProj.BuildConfigByName(target, "Release");
            pbxProj.AddBuildProperty(target, "GCC_PREPROCESSOR_DEFINITIONS", "PLATFORM_IOS=1");
            pbxProj.AddBuildPropertyForConfig(debugConfig, "GCC_PREPROCESSOR_DEFINITIONS", "DEBUG=1");
            pbxProj.AddBuildPropertyForConfig(releaseConfig, "GCC_PREPROCESSOR_DEFINITIONS", "RELEASE=1");

            System.IO.File.WriteAllText(projPath, pbxProj.WriteToString());
        }
    }
}

上記のスクリプトを/Assets/Editor/内に入れておき、出力されたXcodeを確認すると以下のようになりました。

f:id:famme_fatale:20150505194714p:plain