LoginSignup
3
3

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-12-26

前置き

 ① ネイティブプラグインの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

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3