以下のドキュメント見ながら、手元のアプリでGoogle AdMob メディエーションの広告SDKを追加する作業をしていました。
- https://developers.google.com/admob/ios/mediation/nend
- https://developers.google.com/admob/ios/mediation/imobile
- https://developers.google.com/admob/ios/mediation/pangle
- https://developers.google.com/admob/ios/mediation/meta
- etc.
しかし、いくつか追加していくと「pod install」実行時に以下のエラーが出るようになってしました。
[!] Can’t merge user_target_xcconfig for pod targets: [“Ads-Global”, “APM”, “BUAdSDK”, “BURelyAdSDK”, “Dep_Accurate”, “AFNetworking”, “BURelyFoundation”, “Foundation”, “Gecko”, “NETWork”, “Pangle”, “SDWebImage”, “YYModel”, “ZFPlayer”, “Zip”, “FBAudienceNetwork”, “ImobileSdkAds”, “NendSDK_iOS”]. Singular build setting EXCLUDED_ARCHS[sdk=iphonesimulator*] has different values.
このエラーで結構ハマったのですが、調査して対処方法を見つけたのでメモを残しておこうと思います。
何が原因でエラーが出ているのか?
まず、何が起きてるのか、原因を追ってみました。
「user_target_xcconfig をマージできない」と言っているので、各 targets の podspec の内容を確認してみます。
podspac は以下のリポジトリにあります。通常は pod 初期化時に ~/.cocoapods に clone されているものですね。
Specs/tree/master/Specs を見ると分かるのですが、各パスに [0-9a-f]/[0-9a-f]/[0-9a-f]/ のプレフィックスが付いていてちょっと探しづらいです。
Ads-Global など各広告SDKのファイルがどこにあるかは、以下のように clone 済みのディレクトリで find すると確認できます。
(git grep とかだと他から参照している箇所が大量に出てくるので探しづらいです)
$ (cd ~/.cocoapods/repos/master && find . -type d -name "Ads-Global")
./Specs/d/1/c/Ads-Global
user_target_xcconfig の定義内容は各広告SDKそれぞれ以下のようでした。
Ads-Global
Specs/d/1/c/Ads-Global/4.7.0.6/Ads-Global.podspec.json#L66-L68
"user_target_xcconfig": {
"EXCLUDED_ARCHS[sdk=iphonesimulator*]": "arm64"
},
NendSDK_iOS
Specs/6/1/d/NendSDK_iOS/7.4.0/NendSDK_iOS.podspec.json#L34-L36
"user_target_xcconfig": {
"EXCLUDED_ARCHS[sdk=iphonesimulator*]": "arm64 i386"
},
ImobileSdkAds
Specs/2/6/d/ImobileSdkAds/2.2.0/ImobileSdkAds.podspec.json#L33-L35
"user_target_xcconfig": {
"EXCLUDED_ARCHS[sdk=iphonesimulator*]": "arm64"
}
FBAudienceNetwork
Specs/2/1/5/FBAudienceNetwork/6.12.0/FBAudienceNetwork.podspec.json#L48-L50
"user_target_xcconfig": {
"EXCLUDED_ARCHS[sdk=iphonesimulator*]": "i386"
},
これらを見る限り、i386 を指定している NendSDK_iOS と FBAudienceNetwork が悪そうです。
回避策について調査
とりあえずググって色々調べると以下などが見つかりました。
しかし、これらで紹介されている以下のコードを適用しても解消しませんでした。
post_install do |installer|
installer.pods_project.build_configurations.each do |config|
config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
end
end
自分のやり方が間違ってるのでしょうか??
上記のコードを貼り付ける場所を色々試行錯誤してみたのですが解消できず、上記の方法は諦めました。
原因はSDKを提供している広告ソース側
そもそも前述の通り、他の広告SDKと競合する記述になっている podspec がバグってるのが原因だと思いますが、何故こんなことになっているかというと広告ソース側が直してくれないということのようです。
google-admob-ads-sdk のグループでも同様の話題が出ています。
GoogleMobileAdsMediationIronSource と GoogleMobileAdsMediationFacebook で競合して
[!] Can’t merge user_target_xcconfig for pod targets: [“FBAudienceNetwork”, “IronSourceSDK”]. Singular build setting EXCLUDED_ARCHS[sdk=iphonesimulator*] has different values.
のエラーが出ているとのことです。
2021/09/03 の投稿で、Googleから各ネットワークに連絡して修正するよう依頼するというような話が出ています。
しかし 2022/11/22 時点の最新版でも修正されていないということは、Facebook や Nend が直してくれていないということになりますね。
残念な気分になりますね…。
あまり使われていないということなのでしょうか?
「Can’t merge user_target_xcconfig for pod targets」の回避方法
そんなわけで、Podfile で管理していると他の広告SDKと競合しているから pod install のエラーは回避できないという状態です。
じゃあどうすればよいのか。
pod install でエラーが発生するということなので、Podfile管理から外して手動でSDK入れてしまえばよいわけですね。
今回のケースだと、Podfileから以下を削除します。
pod 'GoogleMobileAdsMediationNend'
pod 'GoogleMobileAdsMediationFacebook'
そして、以下のリンクから Nend_iOS、FBAudienceNetwork のSDKをDLして手動で組み込みました。
Nend_iOS
- https://github.com/fan-ADN/nendSDK-iOS-pub/releases/download/7.4.0/NendSDK_iOS.zip
- https://dl.google.com/googleadmobadssdk/mediation/ios/nend/NendAdapter-7.4.0.0.zip
FBAudienceNetwork
- https://developers.facebook.com/resources/FBAudienceNetwork-6.12.0.zip
- https://dl.google.com/googleadmobadssdk/mediation/ios/meta/MetaAdapter-6.12.0.0.zip
手動でSDKを入れたら解決しました。
Podfile 管理じゃないのでバージョンアップのときに多少面倒ですが、サクッと削除して新しいバージョンをポチッとDLしてきてバーッっとzip展開してガーッとXcodeに突っ込めばよいだけではあるので、それほど大変ではないかと思います。実際、作業してみた結果は思ってたより楽でした。
おそらく「Can’t merge user_target_xcconfig for pod targets」が出ないようにする対応のほうが大変なのではないでしょうか。
まとめ
というわけで、「Can’t merge user_target_xcconfig for pod targets」の解決方法というか回避方法を紹介しました。
Podfile での管理をやめて手動でSDKを入れるようにすれば解決です。
Podfile は便利ですが、ちゃんとメンテナンスしてくれない広告ソースのせいでビルド通らなくなるのは悲しいですね…。
同じエラーで困っている方の助けになれば幸いです。
コメント