概要
Qiita に投稿した下記記事と同じ内容です。
qiita.com
iOS 用の Cocoa Touch Static Library を作ったものの、Unity でビルドが通らず、Xcode の Build Settings を変更する必要があった。
毎回手作業で変更するには項目数が多すぎたのと、自分以外の環境でビルドできないと意味がないので、自動化する方法がないか調べてみた。
Cocoa Touch Static Library を作る方法
下記を参考にしました。
UnityでAndroid、iOS両対応のC++プラグインの実装
Unity & iOSプラグイン連携
[Unity] C#とObjective-Cの連携まとめ
自動化する方法
下記を参考にしました。
UnityでXcodeの設定を自動化する方法まとめ
コピペですが、一応、ソースコード。
XcodeSettingsPostProcesser.cs
using System.IO; using UnityEngine; using UnityEditor; using UnityEditor.iOS.Xcode; using UnityEditor.Callbacks; using System.Collections; public class XcodeSettingsPostProcesser { [PostProcessBuildAttribute(0)] public static void OnPostprocessBuild(BuildTarget buildTarget, string pathToBuiltProject) { // iOS以外のプラットフォームは処理を行わない if (buildTarget != BuildTarget.iOS) { return; } // PBXProjectの初期化 var projectPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj"; PBXProject pbxProject = new PBXProject(); pbxProject.ReadFromFile(projectPath); string targetGuid = pbxProject.TargetGuidByName("Unity-iPhone"); // ここに自動化の処理を記述する pbxProject.AddBuildProperty(targetGuid, "CLANG_ENABLE_MODULES", "NO"); pbxProject.AddBuildProperty(targetGuid, "CLANG_ENABLE_MODULE_DEBUGGING", "YES"); pbxProject.AddBuildProperty(targetGuid, "CLANG_ENABLE_OBJC_ARC", "NO"); // 設定を反映 File.WriteAllText(projectPath, pbxProject.WriteToString()); } }
少しでも楽に設定を C# のソースコードに反映する方法
- Library を作るときの Git の履歴から、project.pbxproj ファイルの変更行をコピーして、テキストエディタにコピペ
- テキストエディタの検索置換で正規表現を使って整形
- C# のソースコードにコピペ
検索パターン
\t\t\t\t"?(.+?)"? = "?(.+?)"?;$
置換パターン
pbxProject.AddBuildProperty(targetGuid, "\1", "\2");
置換前のテキスト
CLANG_ENABLE_MODULES = NO; CLANG_ENABLE_MODULE_DEBUGGING = YES;
置換後のテキスト
pbxProject.AddBuildProperty(targetGuid, "CLANG_ENABLE_MODULES", "NO"); pbxProject.AddBuildProperty(targetGuid, "CLANG_ENABLE_MODULE_DEBUGGING", "YES");
環境によって検索側のパターンは変える必要があると思う。
あと、AddBuildProperty は設定を追加するので、Unity がビルド時に設定を追加していると、「Unity が書き換えた設定 + Script で追加した設定」というおかしな状態になるので、必要に応じて関数を変えないとダメ。
感想
毎回手作業で40個ぐらい設定を変える必要がなくなったので、その分猫社員を撫でようと思った。