Xcode
ARC
Unity

UnityでARC設定を編集する方法

More than 1 year has passed since last update.

前置き

 ① ネイティブプラグインの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設定を無効化する

PostProcessBuildScript.cs
/// <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