- 環境
- やりたいこと概要
- やりたいこと詳細
- 手作業で行う場合の作業内容の確認
- Xcodeへframeworkを追加する作業を自動化する
- XcodeでBuild Settingsを変更する作業を自動化する
- まとめ
- 参考資料
環境
- Unity 5.1.2f1
- Xcode 6.4
- Google Mobile Ads Unity Plugin v2.3.1
- Google Mobile Ads SDK v7.4.1
やりたいこと概要
UnityエディタでiOSビルドしたあとに、Xcode側で設定する内容を自動化したい。
ローカルPC上でのビルドなら手動でやってもいいが、Unity Cloud Buildにビルドさせたいため自動化が必須となった。
この記事では具体的に下記項目を扱います。
- 広告SDKに含まれている .framework ファイルのインポート処理
- Build Settings の変更
やりたいこと詳細
Google Developersに従ってAdMobを実装しました。
Unityエディタ側での設定を完了し、いざXcodeへ出力して実機へ転送しようとすると下記エラーが発生
- 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
- Navigate to File > Build Settings, select the iOS platform, and choose Build. This will export an Xcode project.
- 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.
- Navigate to Product > Run in Xcode to run your project.
You've now successfully imported the plugin for iOS!
これらの設定を自動化します。
手作業で行う場合の作業内容の確認
ビルドエラーを解消する手順は以下の通り。
必要なファイルの準備
こちらから最新のGoogleMobileAds.frameworkをダウンロードしておく
Xcode上でframeworkファイルを追加する。
Add Files to ~ から先ほどダウンロードしたGoogleMobileAds.frameworkを選択して追加する。
Build Settingsを修正
Build Settings -> Apple LLVM 6.1 - Launguage - Modules -> Enable Modules (C and Objective-C) をYesにする。
上記設定を行えばXcodeのビルドが成功する。
手順2,3を自動化します。
Xcodeへframeworkを追加する作業を自動化する
Unity5からネイティブプラグインのインポート処理が非常に簡単になりました。
Projectビューの Plugins/iOS にインポートしたいframeworkファイルを置く
以上(以下補足)
実際はどこに置いてもいいんだけど Plugins/iOS に入れるとInspectorビューで設定できるインポート設定が自動的にiOS用になるみたい。
これだけ。この状態でビルドすると自動的にXcodeに Add Files to ~ したのと同じ状態になる。
XcodeでBuild Settingsを変更する作業を自動化する
こちらもUnity5からとても簡単になった。というのも、Xcodeプロジェクトファイルを編集するためのUnityEditor.iOS.Xcodeという名前空間が標準で用意されたため。
Projectビュー に Editor というフォルダを作る
Editor フォルダに、PostBuildProcess というC#スクリプトを作る
ファイル名は変えてもOK
スクリプトを編集
重要なのは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に任せてしまえばビルド作業すら不要になります。
ぜひお試しあれ。