Appodeal link error

Hi Danny;

I am running into the same sort of build errors reported above by burnsj002 and naveen_pcs. The problem is in building for iOS and I am using Corona Build 2931. Here is a quick rundown:

a) First time I tried to build, the conflict was between duplicate symbols in Vungle Plugin and AppoDeal Plugin. Here is a snippet of the last lines of the error message from the console:

(VungleAdLegacy.o)

/Users/steve/Desktop/Just 2 Builds/Just 2 Words.app/.build/plugin.appodeal/libappodealPlugin.a(VungleAdLegacy.o)

duplicate symbol _OBJC_METACLASS_$_VungleAdLegacy in:

/Users/steve/Desktop/Just 2 Builds/Just 2 Words.app/.build/CoronaProvider.ads.vungle/libads-vungle.a(VungleAdLegacy.o)

/Users/steve/Desktop/Just 2 Builds/Just 2 Words.app/.build/plugin.appodeal/libappodealPlugin.a(VungleAdLegacy.o)

ld: 3577 duplicate symbols for architecture armv7

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

BUILD ERROR: There was a problem linking the app.

Check the console for more information.

b ) First thing I tried was reversing the position of plugins in build.settings in case that might change build order and solve problem. Didn’t solve problem. Same error.

c) Second thing I tried was building app with ONLY 2 PLUGINS – Vungle and AppoDeal. Didn’t solve problem. Same basic run of “duplicate symbol” errors. I you want something simple and reproducible, just try to build for iOS with just these 2 plugins.

d) So I tried removing Vungle from build.settings while leaving my other plugins (I have a fair number) in the app. I then got the same sort of “duplicate symbol” conflicts between AppoDeal and appLovin. It wouldn’t build.

e) So I removed appLovin from build.settings. I then got the same sort of “duplicate symbol” conflicts between AppoDeal and fbAudienceNetwork. It wouldn’t build. Here’s the final snippet of that error:

libFBAudienceNetwork.a(FBAdBodyView.o)

duplicate symbol _OBJC_IVAR_$_FBAdBodyView._nativeAd in:

/Users/steve/Desktop/Just 2 Builds/Just 2 Words.app/.build/plugin.appodeal/libappodealPlugin.a(FBAdBodyView.o)

 /Users/steve/Desktop/Just 2 Builds/Just 2 Words.app/.build/plugin.fbAudienceNetwork/libFBAudienceNetwork.a(FBAdBodyView.o)

ld: 2679 duplicate symbols for architecture armv7

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

BUILD ERROR: There was a problem linking the app.

f) I stopped trying to build for iOS at this point.

As an aside (possibly important), I looked back at some correspondence I received from “Danny” in Tech Support (you??) back on February 19th. That week,  I had reported a bug (case #45046) with the brand new fbAudienceNetwork Plugin that had the same sort of “duplicate symbols for architecture armv7” error resulting in “BUILD ERROR: There was a problem linking the app.” You folks solved that one in a matter of days. You may want to look at your solution.

And finally, there is still an error of this same sort between the fbAudienceNetwork Plugin and the CoronaAds Plugin on iOS. I pointed this out back in the CoronaAds Beta program and, to my knowledge, it remains a deal breaker – you can’t build for iOS with those two plugins. As a result, I am not using CoronaAds :-(.

Hope this info helps your folks track down the error

Steve

Hey Steve.

I’ll answer your questions point by point to help you understand why these things are happening.

A ):

Appodeal does mediation for several providers, including Vungle. To do this, they include the Vungle SDK in their own static library (SDK). This means that you can’t use Vungle and Appodeal together separately. The simplified technical side of this answer is that since Vungle’s SDK’s static library is contained inside Appodeals static library, if you try to build using both plugins, the linker barfs at duplicate symbols because it’s finding Vungle’s symbols in the Vungle plugin and in the Appodeal plugin.

Generally the goal behind using a mediation provider is to let them do the mediation for you. They don’t intend that you also use them alongside other ad plugins that they provide mediation for already.

So the only solution to this is to use Appodeal and let it do the mediation for you, or use Vungle and do the mediation yourself. Personally I would use Appodeal, as it has advanced algorithms to get you the most ad revenue. They have spent an inordinate amount of time on these algorithms, and they are very good.

B ): The order of plugins defined in build.settings makes no difference to the build process. Just for clarity.

**C): **Same answer as A.

**D): **Same answer as A, Appodeal also does Applovin mediation.

E): Same answer as A, Appodeal also does Facebook Audience Network mediation.

**F): **CoronaAds also does mediation, so that is why you can’t use Facebook Audience network alongside it. Answer is more or less the same as the first section of A.

To answer your “aside”, unfortunately that was a completely different issue that was caused by an accidental inclusion of a library on the build server. Not related to this case i’m afraid.

Summary :

The way to look at Appodeal isn’t “i’ll use this alongside other ad providers for my project”, but should be seen as “i’ll use this as my ad provider for my project and let it handle the hassle of mediation for me”.

I hope that clears things up for you. If you have any more questions or would like clarification on what I have said, just let me know.

Hi Danny;

Thank you so much for the clarity of your response.

Thank you for FINALLY explaining clearly something that should have been CLEARLY explained in Corona’s docs since the Beta of CoronaAds back in February/March. And something that should have been in the AppoDeal documents since its introduction.

I burned a day of my life on AppoDeal (Today). I burned another 3+ days of my life on the CoronaAds Beta. And, back in March, I was very clear to the Corona team that I intended to use CoronaAds in CONJUNCTION with other ad networks. Those networks have been successful for me in the past and they continue to provide high revenue per impression. Nobody on that Corona Beta team said nuthin like what you explained today. 

If what you explained today (incompatibility with other major ad plugins) had been documented or made clear to me “back then”, I would have had approximately an extra work week to do things that are actually successful and rewarding (rather than frustrating). Or maybe I would have spent it vacationing with my family. Too bad it is gone now. We’ll never know.

I appreciate your clarity.

Steve

I’m sorry to hear of your wasted time. Please accept our apologies.

I am working on adding this information to the Appodeal docs so there is a clear reference going forward for what plugins you can’t use in conjunction with Appodeal (due to the mediation) and a note about the google services on iOS.

Thanks for raising the issue, I agree that this should be documented as it can get confusing with the number of plugins we have available.

Hi Danny;

Thanks so much. 

Just one further thought. If the “Build Error” was more explicit in its language . . .

. . . something like “BUILD ERROR: There is an incompatibility between Plugins using duplicate Symbols.”

This would give any of your developers a head start in understanding why they have bumped into this.

Thanks;

Steve