確認環境
- Unityのバージョンは5.5.0f3
- Google Mobile Ads Unity Pluginのバージョンは3.1.3
事象
Unityで作ったアプリにAdMobを表示させるためにGoogle Mobile Ads Unity Pluginを導入しようとしましたが、Unity Cloud Build上でiOSをビルドすると以下のエラーが発生します。(Androidのビルドは正常にできます)
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
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の内部でiOSのライブラリの依存関係を管理するためにCocoaPodsを使用していますが、Unity Cloud Build上ではCocoaPodsが使えないのが原因です。
解決策
あくまでも暫定対応ですが、Assets/GoogleMobileAds/Editor/AdMobDependencies.cs
の53〜63行目あたりをコメントアウトし、スクリプトでライブラリの依存関係を解決しないように変更します。
# 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を導入する必要が出てくるため、UnityプロジェクトのAssets/Plugins/iOS
内にGoogleMobileAds.framework
を配置します。
最後にXcodeプロジェクトのEnable Modules (C and Objective-C)
をYES
に自動で設定するために、以下のPostProcessBuildのスクリプトをAssets/Editor
あたりに配置してください。(EditorフォルダはUnityでは特殊なフォルダとして扱われます。詳細はこちらを参照してください)
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));
}
}
これでUnity Cloud Build上でもiOSのビルドが通るようになります。