Skip to content

Instantly share code, notes, and snippets.

@keijiro
Last active April 6, 2022 07:26
Show Gist options
  • Save keijiro/975b8439d25d58bf62ce to your computer and use it in GitHub Desktop.
Save keijiro/975b8439d25d58bf62ce to your computer and use it in GitHub Desktop.
About Xcode Manipulation API in Unity

Unity から出力される Xcode プロジェクトをカスタマイズする方法 - Xcode Manipulation API

Unity 5 には Xcode Manipulation API が標準で搭載されており、これを使うことで、Unity の出力する Xcode プロジェクトを比較的簡単にカスタマイズすることができます。

ここでは例として、Unity から出力される Xcode プロジェクトの Info.plist ファイルを書き換えてみます。

下にある XcodeProjectUpdater.cs がそれです。このファイルを Editor ディレクトリ下に放り込んでおきます。すると、ビルド時に Info.plist を書き換えて、“TestEntry” というキーに “Hello” という値を設定します。見たそのまんまのシンプルな内容です。

鍵となるのは UnityEditor.iOS.Xcode に用意されている PlistDocument と PBXProject です。これらのクラスを使うことで、plist ファイルや Xcode プロジェクトファイルの書き換えが簡単に行えるわけです。

残念ながらこれらのクラスの詳細なドキュメントは用意されていません。ほんとすみませんって感じですが、PlistDocument については簡単な key-value pair ですし、PBXProject については BitBucket の方にもう少し凝ったことをやっているサンプルがありますので、とりあえず目を通してもらえるとよろしいかと。

using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
using System.IO;
public class XcodeProjectUpdater
{
[PostProcessBuild]
static void OnPostprocessBuild(BuildTarget buildTarget, string path)
{
if (buildTarget != BuildTarget.iOS) return;
var plistPath = Path.Combine(path, "Info.plist");
var plist = new PlistDocument();
plist.ReadFromFile(plistPath);
plist.root.SetString("TestEntry", "Hello");
plist.WriteToFile(plistPath);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment