【Unity】gRPCを用いたプロジェクトをiOS向けにビルドした時のlinker command failed with exit code 1 エラーの対処法

はじめに

gRPCを用いてUnityで作成したプロジェクトをiOS向けにビルドすると、お馴染みの

linker command failed with exit code 1 (use -v to see invocation)

というエラーと共に、

**/Libraries/Plugins/Grpc.Core/runtimes/ios/libgrpc_csharp_ext.a(grpc_csharp_ext.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64

のようなエラーがXcodeで出ることがあります。

このエラーを解決する方法をこの記事に書きました。参考になれば幸いです。

実行環境

  • Unity v2019.3.6f1
  • macOS Catalina v10.15.4
  • gPRC(C#) v2.29.0
  • Xcode v11.4

対処法

以下が対処法になります。 手順が全部で4つあるので、手順1から順に指示に従っていただければと思います。

手順1

Assetsフォルダ直下にEditorという名前のフォルダを作成します。

もう既にある場合は作成する必要はありません。そのまま手順2へ進んでください。

手順2

次のスクリプトを作成し、UnityのEditorフォルダ内に置きます。

#if UNITY_IPHONE

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

public class BuildHelper
{
    [PostProcessBuildAttribute(1)]
    public static void OnPostProcessBuild(BuildTarget target, string path)
    {
        if (target == BuildTarget.iOS)
        {
            var projectPath = PBXProject.GetPBXProjectPath(path);
            var project = new PBXProject();
            project.ReadFromString(File.ReadAllText(projectPath));
            var targetGUID = project.GetUnityFrameworkTargetGuid();

            project.AddFrameworkToProject(targetGUID, "libz.tbd", false);

            project.SetBuildProperty(targetGUID, "ENABLE_BITCODE", "NO");

            File.WriteAllText(projectPath, project.WriteToString());
        }
    }
}

#endif

(参考: Unity2018.2 + il2cppでgRPCアプリをAndroid/iOS向けにビルドする)

手順3

ターミナルで

sudo rm -rf ~/Library/Developer/Xcode/DerivedData/*

を実行し、DerivedData (プロジェクトに生成されるキャッシュデータ)を削除します。

手順4

UnityでBuild And Runを行い、ビルドを実行します。


以上です。 これでビルドが上手くいくのではないかと思います。

参考