UnityからiOS用にXcodeのプロジェクトを出力できるが、プラグインなどで追加のフレームワークを使用している場合それらがBuild Phasesに登録されていないので、Xcodeでプロジェクトを開いて設定を編集する必要がある。しかし毎回手作業で編集するのは面倒。そこでUnityからの出力後に実行される PostprocessBuildPlayer という仕組みで自動的に編集する。
Mac OSXで動作確認しました
ビルド後に走らせるスクリプトファイルの決まり事
- ビルド プレイヤー パイプライン - Unity Manualに書かれているように、Unityのプロジェクトフォルダ以下の Assets/Editor/PostprocessBuildPlayer (拡張子なし)というファイルを作ると、Unityのメニュー File > Build Settings… > Build としたときに、そのファイルが実行される
- shebangを指定すればRubyでもなんでも書ける
- 実行権限は与えなくてもよいようだ
Rubyへのxcodeprojのインストール
PostprocessBuildPlayer はどんな言語でもよいみたいだけど、xcodeのプロジェクトを扱うxcodeprojというgemライブラリがあるのでRubyを使う。
sudo gem install xcodeproj
でインストールする(2014/12/09現在 バージョン0.20.2)- PostprocessBuildPlayerで呼び出されるRubyはシステムのRubyが使われるので、rbenvでRubyのバージョンを管理している場合には
rbenv global system
としてシステムのRubyに切り替えてからインストールを実行すること
- PostprocessBuildPlayerで呼び出されるRubyはシステムのRubyが使われるので、rbenvでRubyのバージョンを管理している場合には
xcodeprojを使ってプロジェクトを編集するRubyスクリプトの書き方
- 「PostprocessBuildPlayer xcodeproj」でググると出てくる A-Liaison BLOG: Unity の PostprocessBuildPlayer を使って Weak Framework を追加する方法 を参考にしようとしましたが、xcodeprojの現在の最新版(0.20.2)を使用したためかスクリプトはそのままでは動きませんでした
- UnityのiOSビルド時にFrameworkを追加する - ほげほげ(仮) でまさに望み通りにフレームワークの追加を自動的に行うことができました
- 別にプラットフォームがiOSの時にだけ実行されるわけではないので、他のプラットフォームへの出力時に動かないようにスクリプト内部でチェックする必要があるかも:(ARGV[1] == ‘iPhone’)
- 他の引数については上で示したリンク(ビルド プレイヤー パイプライン - Unity Manual)に記述あり(0:インストールパス、1:プレイヤーの種類、2:最適化、3:Name of Company、4:Name of Product、5:スクリーン幅、6:スクリーン高さ)