前置き
① ネイティブプラグインのARC設定を無効化したいケースが発生
② Xcodeの設定でネイティブプラグイン(本例では.mm)に対し、「-fno-objc-arc」のオプションを指定することで、ARC設定を無効化できる
③ Unity側で、ビルド後にXcodeプロジェクトの設定を変更できたら嬉しい
環境
Unity:5.0.1
Xcode 6.1
編集方法
① 「XCode Editor for Unity (UnityEditor.iOS.Xcode)」を使う(Unity5.0からは標準で入ってるため、準備は不要)
② [Editor]フォルダ以下に「XXX.cs」ファイルを作成
③ ②で作成したファイルに
[PostProcessBuild] ★属性
public static void OnPostProcessBuild (BuildTarget target, string path) ★メソッド
を追記し、そのメソッド内で"PBXProject"クラスを使ってXcodeプロジェクト設定を編集する
具体的な実装
WebViewerのネイティブプラグイン「WebView.mm」のARC設定を無効化する
/// <summary>
/// ビルド後処理スクリプト
/// </summary>
/// <param name="buildTarget">ビルド対象</param>
/// <param name="path">ビルド対象のパス</param>
[PostProcessBuild]
public static void OnPostProcessBuild(BuildTarget buildTarget, string path)
{
//iOSビルド後の設定
if (buildTarget == BuildTarget.iOS)
{
ModifyXcodeProject(path);
}
}
/// <summary>
/// Xcodeプロジェクトの編集処理スクリプト
/// </summary>
/// <param name="path"></param>
private static void ModifyXcodeProject(string path)
{
string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";
PBXProject proj = new PBXProject();
proj.ReadFromString(File.ReadAllText(projPath));
string target = proj.TargetGuidByName("Unity-iPhone");
//////WebView.mmのARC設定を無効化する
List<string> compile_Flags = new List<string>();
compile_Flags.Add("-fno-objc-arc");
proj.SetCompileFlagsForFile(target, proj.FindFileGuidByProjectPath("Libraries/Plugins/iOS/WebView.mm"), compile_Flags);
File.WriteAllText(projPath, proj.WriteToString());
}
参考
ARCの有効/無効設定を切り替える方法
http://lab.dolice.net/blog/2013/05/10/objc-arc-switch/
UnityでのXcode設定をUnityEditorのスクリプトだけで自動化する
http://cflat-inc.hatenablog.com/entry/2015/01/05/074442