読者です 読者をやめる 読者になる 読者になる

ほげほげ(仮)

仮死状態

UnityのiOSビルド時にFrameworkを追加する

Xcode Unity

UnityのiOSビルド時に追加したいFrameworkを設定することが出来ないので、それ用のスクリプトを作りました。

毎回UnityでビルドしてXcode起動してFramework追加は面倒すぎます。

ググったら何個かあったのですが、広告SDK等で外部Frameworkを追加する処理が見つからなかったのと、何やってるかを理解しておきたかったので自分で作りました。

環境

  • Mac OS X Mavericks
  • Unity 4.3.4f1
  • xcodeproj 0.14.1

ビルド プレイヤー パイプライン

Unityには ビルド プレイヤー パイプライン / Build Player Pipeline というのがあります。

これはビルド時にsh等を実行できます。これ利用してXcodeのプロジェクトファイルをいじります。

今回はRubyスクリプトを実行するようにします。

事前準備

Xcodeprojのgemインストール

.xcodeproj の編集が簡単にできるgemです。

rbenv等を使ってる人はsystemのRubyに切り替えておいてください。UnityからはsystemのRubyが使われます。(ぼくはrbenv使ってるのでこれに気づかずだいぶハマりました。)

$ sudo gem install xcodeproj

スクリプト

下記のようなスクリプトを作成して、実行権限を付与しておきます。

作成したらAssets/Editor/PostprocessBuildPlayerに配置します。

UnityのiOSビルド時にFrameworkを追加する

このスクリプトでは次のことをやっています。

  • システムFramework追加
  • システムFramework(optional)を追加
  • 外部Framework(.frameworkファイル)を追加

最後の3つの関数呼び出しの箇所でFrameworkを指定しています。.framework拡張子なしで指定する必要があります。

外部Framework(.frameworkファイル)追加の補足

Assets/Plugins/iOS内に.frameworkファイルを配置してもビルド時にコピーされませんでした。

ですから、自分でコピーするスクリプトを書きました。

外部FrameworkはAssets/Libraries内に配置しておいて関数を呼び出すと自動でコピーするようにしました。その後XcodeプロジェクトへFrameworkとして追加しています。

Assets/StreamingAssetsに配置するとそのままコピーされるそうですが、目的が違う感じしますので独自にAssets/Librariesを使用しました。)

まとめ

ビルド プレイヤー パイプラインの仕組みを使えばビルド時に必要な処理が可能になります。

今度はUnityビルドと同時にTestFlightに登録が必要そうなのでそのうち作ります。