UnityのiOS版ビルドでframeworkファイルのインポートを自動化する(Ad Generation)
iOS版のビルドを行う際にXCode上での操作を無くしたいと思い自動化を試してみた。
その時の検証というか作業メモ。
・環境
Unity 5.2.2
XCode 7.1.1
Ad Generationを使用して確認
(たまたま使おうとしていたので)
Ad Generation
iOSSDK 2.2.3
UnityPlugin 2.0.0
自動設定なし
まずは自動設定なしでのビルド
1.Unityプロジェクトを作成する
まっさらな状態
2.Unityプロジェクトにunitypackageをインポート
adg_for_unity.unitypackageをインポートする
ADGNI.mmのComplie Flagsに「-fno-objc-arc」を設定する
4.XCodeのプロジェクトにframeworkファイルを追加
「ADG.framework」をXCodeプロジェクト内の「Frameworks」フォルダに追加
追加したADG.frameworkをLinked Frameworks and Librariesにドラッグアンドドロップで追加する
以下frameworkを追加する
framework | Status |
---|---|
AdSupport.framework | Optional |
CoreTelephony.framework | Required |
Security.framework | Required |
「Linked Frameworks and Libraries」の下の方にある「+」から追加
導入ガイドには以下も必要なものと記載されているが最初から追加されている
・SystemConfiguration.framework
・QuartzCore.framework
・CoreGraphics.framework
・MediaPlayer.framework
5.XCodeでビルドする
成功
自動化の検証
UnityプロジェクトにADG.frameworkをインポート
1.Unityプロジェクトにframeworkを追加
「Assets/plugins/iOS/」に「ADG.framework」を追加してビルドしてみる。
XCodeでプロジェクトを開くと「Frameworks/Assets/plugins/iOS/」にADG.frameworkが追加されている。
Linked Frameworks and Librariesにも追加されている。
2.自動設定なしと同様に以下frameworkを追加
・AdSupport.framework
・CoreTelephony.framework
・Security.framework
3.XCodeでビルドする
成功
Unityでframeworkの設定を変更
1.Unityでframeworkの設定を変更する
「Assets/plugins/iOS/ADG.framework」を選択
Inspecterから必要なframeworkにチェックを入れる
・AdSupport.framework
・CoreTelephony.framework
・Security.framework
PostProcessBuildで設定する
Statusの変更ができないのでPostProcessBuildで設定をすることに
1.「Unityでframeworkの設定を変更する」で行った設定を元に戻す
チェックを外す
2.PostProcessBuildのコードを追加
Assets/Editor/にソースを追加
using System.IO; using UnityEditor; using UnityEditor.Callbacks; using UnityEditor.iOS.Xcode; using UnityEngine; public static class PostProccesor { [PostProcessBuild(100)] public static void OnPostProcessBuild(BuildTarget target, string path) { if (target == BuildTarget.iOS) { PostProcessBuild_iOS (path); } } private static void PostProcessBuild_iOS (string path) { string projectPath = PBXProject.GetPBXProjectPath(path); PBXProject pbxProject = new PBXProject(); pbxProject.ReadFromString(File.ReadAllText(projectPath)); string target = pbxProject.TargetGuidByName("Unity-iPhone"); pbxProject.AddFrameworkToProject(target, "AdSupport.framework", true); pbxProject.AddFrameworkToProject(target, "CoreTelephony.framework", false); pbxProject.AddFrameworkToProject(target, "Security.framework", false); File.WriteAllText(projectPath, pbxProject.WriteToString()); } }
3.Unityでビルド
自動設定なしと同じ状態のXCodeプロジェクトが生成される
4.XCodeでビルドする
成功
Unity上の設定で「Optional/Required」の切替が行えたらもっと楽なんだけどな・・・。
とりあえず現状はPostProcessBuildとの組み合わせで良いか。
Jenkinsでジョブ実行とかでまた問題起きるんだろうなぁ・・・。