naichi's lab

3日後の自分(他人)への書き置き

【Unity、iOS、Cloud Build】自動でEnable BitcodeをNoにする

Unity Cloud Buildは便利なんだけどビルド通すまでがしんどいよね。

今日出たエラーのお話。

環境

  • 書いた日 2016/09/03
  • OS X El Capitan 10.11.6
  • Unity Cloud Build
    • Unity 5.4.0f3
    • Xcode 7

CloudBuildフルログ(抜粋

8424:        [xcode] ld: object contains invalid bitcode: /BUILD_PATH/hogehoge.default-ios/temp.n9diN5/build/Unity-iPhone.build/Release-iphoneos/Unity-iPhone.build/Objects-normal/armv7/hogehoge.bundle.t1TsA9/001 for architecture armv7
8425:        [xcode] clang: error: linker command failed with exit code 1 (use -v to see invocation)

BITCODE オフにしとけってやつですね。

f:id:naichilab:20160903124119p:plain

ローカルのXCodeなら手作業でもいいけどCloudBuildだとそうも行かないので自動化。

対応

下記ファイルを配置。

場所は Editor/PostBuildProcess.cs とか。Editorの下ならOK。

using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
using System.Collections;
using System.IO;

public class PostBuildProcess
{
    [PostProcessBuild]
    public static void OnPostProcessBuild (BuildTarget buildTarget, string path)
    {
        if (buildTarget == BuildTarget.iOS) {
            ProcessForiOS (path);
        }
    }

    private static void ProcessForiOS (string path)
    {
        string pjPath = PBXProject.GetPBXProjectPath (path);
        PBXProject pj = new PBXProject ();
        pj.ReadFromString (File.ReadAllText (pjPath));
        string target = pj.TargetGuidByName ("Unity-iPhone");

        // Enable BitCode -> NO
        pj.SetBuildProperty (target, "ENABLE_BITCODE", "NO");

        File.WriteAllText (pjPath, pj.WriteToString ());
    }

}

これでUnity -> File -> Build And Run したときに勝手にXCodeプロジェクトファイルを編集して設定してくれる。

参考

blog.naichilab.com