AdMobを入れたUnityプロジェクトがUnity Cloud Build上でビルドエラーになるときの対処法

## 確認環境
*  Unityのバージョンは5.5.0f3
*  [Google Mobile Ads Unity Plugin](https://github.com/googleads/googleads-mobile-unity)のバージョンは[3.1.3](https://github.com/googleads/googleads-mobile-unity/releases/tag/3.1.3)

## 事象
Unityで作ったアプリに[AdMob](https://www.google.co.jp/admob/)を表示させるために[Google Mobile Ads Unity Plugin](https://github.com/googleads/googleads-mobile-unity)を導入しようとしましたが、Unity Cloud Build上でiOSをビルドすると以下のエラーが発生します。（Androidのビルドは正常にできます）

```log1.txt
2479: [Unity] 'pod' command not found; unable to generate a usable Xcode project. You can install cocoapods with the Ruby gem package manager:
2480: [Unity]  > sudo gem install -n /usr/local/bin cocoapods
2481: [Unity]  > pod setup
```

```log2.txt
2491: [Unity] Error running cocoapods. Please ensure you have at least version  1.0.0.  You can install cocoapods with the Ruby gem package manager:
2492: [Unity]  > sudo gem install -n /usr/local/bin cocoapods
2493: [Unity]  > pod setup
2494: [Unity] 'pod --version' returned status: 1
2495: [Unity] output:
```

## 原因
[Google Mobile Ads Unity Plugin](https://github.com/googleads/googleads-mobile-unity)の内部でiOSのライブラリの依存関係を管理するためにCocoaPodsを使用していますが、Unity Cloud Build上ではCocoaPodsが使えないのが原因です。

## 解決策
<b>あくまでも暫定対応ですが、</b>`Assets/GoogleMobileAds/Editor/AdMobDependencies.cs`の53〜63行目あたりをコメントアウトし、スクリプトでライブラリの依存関係を解決しないように変更します。

```csharp:AdMobDependencies.cs
#elif UNITY_IOS
//        Type iosResolver = Google.VersionHandler.FindClass(
//            "Google.IOSResolver", "Google.IOSResolver");
//        if (iosResolver == null) {
//            return;
//        }
//        Google.VersionHandler.InvokeStaticMethod(
//            iosResolver, "AddPod",
//            new object[] { "Google-Mobile-Ads-SDK" },
//            namedArgs: new Dictionary<string, object>() {
//                { "version", "7.13+" }
//            });
#endif  // UNITY_IOS
```

上記をコメントアウトすることにより、手動で[Google Mobile Ads SDK](https://firebase.google.com/docs/admob/ios/download)を導入する必要が出てくるため、Unityプロジェクトの`Assets/Plugins/iOS`内に`GoogleMobileAds.framework`を配置します。

最後にXcodeプロジェクトの`Enable Modules (C and Objective-C)`を`YES`に自動で設定するために、以下のPostProcessBuildのスクリプトを`Assets/Editor`あたりに配置してください。（EditorフォルダはUnityでは特殊なフォルダとして扱われます。詳細は[こちら](https://docs.unity3d.com/jp/current/Manual/SpecialFolders.html)を参照してください）

```csharp:XcodePostProcessBuild.cs
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;

public static class XcodePostProcessBuild
{
    [PostProcessBuild]
    public static void OnPostProcessBuild(BuildTarget target, string path)
    {
        if (target != BuildTarget.iOS)
        {
            return;
        }

        var project = new PBXProject();
        project.ReadFromFile(PBXProject.GetPBXProjectPath(path));

        var projectGuid = project.TargetGuidByName(PBXProject.GetUnityTargetName());
        // Enable Modules (C and Objective-C)をYESに設定する
        project.SetBuildProperty(projectGuid, "CLANG_ENABLE_MODULES", "YES");

        project.WriteToFile(PBXProject.GetPBXProjectPath(path));
    }
}
```

![image](https://qiita-image-store.s3.amazonaws.com/0/5879/8cc375fa-6f0e-69a2-472d-a32509d47f7a.png)

これでUnity Cloud Build上でもiOSのビルドが通るようになります。

## 参考
* [Google Mobile Ads SDK Developersのフォーラム](https://groups.google.com/d/msg/google-admob-ads-sdk/Ivkz1klzZWg/Pn1VXPIlBwAJ)
* [Google Mobile Ads Unity Plugin](https://github.com/googleads/googleads-mobile-unity)
* [Google Mobile Ads SDK](https://firebase.google.com/docs/admob/ios/download)