naichi's lab

3日後の自分(他人)への書き置き

【Unity】iOS向けビルドで必要なframeworkのインポートやビルド設定の変更を自動化する

f:id:naichilab:20150917124702p:plain

環境

やりたいこと概要

UnityエディタでiOSビルドしたあとに、Xcode側で設定する内容を自動化したい。

ローカルPC上でのビルドなら手動でやってもいいが、Unity Cloud Buildにビルドさせたいため自動化が必須となった。

この記事では具体的に下記項目を扱います。

  • 広告SDKに含まれている .framework ファイルのインポート処理
  • Build Settings の変更

やりたいこと詳細

Google Developersに従ってAdMobを実装しました。

Unityエディタ側での設定を完了し、いざXcodeへ出力して実機へ転送しようとすると下記エラーが発生

f:id:naichilab:20150914002026p:plain

  • Use of '@import' when modules are disabled
  • Use of '@import' when modules are disabled
  • Unknown type name 'GADGender'; did you mean 'GADUGender'?

これを解決するにはGoogle Developersに書かれている通り、Xcode上で下記手順を踏む必要がある。

iOS

  1. Navigate to File > Build Settings, select the iOS platform, and choose Build. This will export an Xcode project.
  2. Open up the exported Xcode project, and follow the manually import section of the iOS Get Started guide to add the Google Mobile Ads SDK.
  3. Navigate to Product > Run in Xcode to run your project.

You've now successfully imported the plugin for iOS!

これらの設定を自動化します。

手作業で行う場合の作業内容の確認

ビルドエラーを解消する手順は以下の通り。

  1. 必要なファイルの準備

    こちらから最新のGoogleMobileAds.frameworkをダウンロードしておく

  2. Xcode上でframeworkファイルを追加する。

    Add Files to ~ から先ほどダウンロードしたGoogleMobileAds.frameworkを選択して追加する。

    f:id:naichilab:20150914003018p:plain

  3. Build Settingsを修正

    Build Settings -> Apple LLVM 6.1 - Launguage - Modules -> Enable Modules (C and Objective-C) をYesにする。 f:id:naichilab:20150914010824p:plain

上記設定を行えばXcodeのビルドが成功する。
手順2,3を自動化します。

Xcodeへframeworkを追加する作業を自動化する

Unity5からネイティブプラグインのインポート処理が非常に簡単になりました。

  1. ProjectビューPlugins/iOS にインポートしたいframeworkファイルを置く

    f:id:naichilab:20150917022142p:plain

    以上(以下補足)

  2. 実際はどこに置いてもいいんだけど Plugins/iOS に入れるとInspectorビューで設定できるインポート設定が自動的にiOS用になるみたい。

    f:id:naichilab:20150917022314p:plain

これだけ。この状態でビルドすると自動的にXcodeに Add Files to ~ したのと同じ状態になる。

XcodeでBuild Settingsを変更する作業を自動化する

こちらもUnity5からとても簡単になった。というのも、Xcodeプロジェクトファイルを編集するためのUnityEditor.iOS.Xcodeという名前空間が標準で用意されたため。

  1. ProjectビューEditor というフォルダを作る

  2. Editor フォルダに、PostBuildProcess というC#スクリプトを作る

    ファイル名は変えてもOK

  3. スクリプトを編集

重要なのは42行目の pj.SetBuildProperty (target, "CLANG_ENABLE_MODULES", "YES"); のみ。 読んで字の如くCLANG_ENABLE_MODULESをYesにしてる。

Enable Modules (C and Objective-C)CLANG_ENABLE_MODULESに対応していることは、XcodeのプロジェクトファイルをGit管理して、手動で編集し、差分をとることで確認できた。

ここPBXProject クラスのソースが読めるが、その中にも CLANG_ENABLE_MODULES の記述があるので試したら合ってた。

他のビルド設定に関しても同様にキー文字列だけわかれば設定可能だと思われる。

ここまで設定してからUnityエディタでiOSビルド。

でてきたXcodeプロジェクトを開くと何も設定変更することなく、ビルド成功した。

めでたしめでたし。

まとめ

ググるとframeworkファイルのコピーや追加も全てPostBuildProcessで行っている記事ばかり出てくるが、Unity5から本当に楽になったみたい。

素晴らしいですね。

初回に設定しておけばビルド作業が超楽になるし、Unity Cloud Buildに任せてしまえばビルド作業すら不要になります。

ぜひお試しあれ。

blog.naichilab.com

blog.naichilab.com

参考資料