iOS build fails with Appsaholic Commercial Break plug-in

I get this error in the console when trying to build for iOS when including the combre plug-in.

ERROR: Unexpected empty response from build server iOS build failed (5) ERROR: Build Failed: ERROR: Unexpected empty response from build server

build.settings

 -- PLUGINS plugins = { -- ADS and SHARING ["CoronaProvider.ads.vungle"] = { publisherId = "com.vungle", supportedPlatforms = { android=true, iphone=true } }, ["plugin.combre"] = { publisherId = "com.appsaholic", supportedPlatforms = { iphone=true, android=true, osx=true, ["win32-sim"]=true } }, ["plugin.google.play.services"] = { publisherId = "com.coronalabs", supportedPlatforms = { android=true, ["android-kindle"]=true } }, ...

If I comment out the [“plugin.combre”] table, the build works fine.  I just got my appsaholic account set up today, so maybe I need to wait for something happen?

Hi @tonygod,

I just tried it now and I have no build issues. Can you try again? Also, if that doesn’t work, can you test without the inclusion of Vungle? I doubt that would cause conflict but I want to confirm so.

Thanks,

Brent

Thanks for the 

Thanks for the response, Brent.  I tried commenting out Vungle, but the build still fails the same way.

Here is my entire build.settings.  If you find anything else weird in there, please let me know.

-- -- For more information on build.settings see the Corona SDK Build Guide at: -- http://docs.coronalabs.com/guide/distribution/buildSettings/index.html -- settings = { build = { -- leaves symbolic information in production (release) build -- neverStripDebugInfo = true }, orientation = { -- Supported values for orientation: -- portrait, portraitUpsideDown, landscapeLeft, landscapeRight default = "landscapeLeft", supported = { "landscapeRight", "landscapeLeft" } }, android = { googlePlayGamesAppId = "MYGOOGLEPLAYGAMESAPPID", supportsTV = true, -- Android TV isGame = true, -- Android TV Game cagegorization --You can set your app to use a large heap by adding the largeHeap = true parameter. --For example, you might need to raise the max heap size on a particular device from --32 MB to 256 MB, allowing a Corona app to load 2048×2048 images. Note that this --setting is applicable only on Android 3.0 and higher. -- largeHeap = true, -- support 2048x2048 images mainIntentFilter = { categories = { "tv.ouya.intent.category.GAME", -- needed to show up in OUYA menu "android.intent.category.LEANBACK\_LAUNCHER", -- should be added when supportsTV=true }, actions = { "android.intent.action.MAIN" }, }, usesExpansionFile = false, -- needed for Google Play apps \>50mb usesPermissions = { "android.permission.INTERNET", "android.permission.WRITE\_EXTERNAL\_STORAGE", "android.permission.ACCESS\_NETWORK\_STATE", "com.android.vending.BILLING", "com.android.vending.CHECK\_LICENSE", -- Optional permission used to display current location via the GPS. -- "android.permission.ACCESS\_FINE\_LOCATION", -- Optional permission used to display current location via WiFi or cellular service. -- "android.permission.ACCESS\_COARSE\_LOCATION", }, usesFeatures = { -- If you set permissions "ACCESS\_FINE\_LOCATION" and "ACCESS\_COARSE\_LOCATION" above, -- then you might want to set up your app to not require location services as follows. -- Otherwise, devices that do not have location sevices (such as a GPS) will be unable -- to purchase this app in the app store. { name = "android.hardware.location", required = false }, { name = "android.hardware.location.gps", required = false }, { name = "android.hardware.location.network", required = false }, }, }, -- android iphone = { iCloud = true, plist = { UIStatusBarHidden = false, UIPrerenderedIcon = true, -- set to false for "shine" overlay --UIApplicationExitsOnSuspend = true, -- uncomment to quit app on suspend UILaunchImages = { { -- iPhone 4 LandscapeLeft ["UILaunchImageMinimumOSVersion"] = "7.0", ["UILaunchImageName"] = "Default-Landscape", ["UILaunchImageOrientation"] = "LandscapeLeft", ["UILaunchImageSize"] = "{320, 480}" }, { -- iPhone 4 LandscapeRight ["UILaunchImageMinimumOSVersion"] = "7.0", ["UILaunchImageName"] = "Default-Landscape", ["UILaunchImageOrientation"] = "LandscapeRight", ["UILaunchImageSize"] = "{320, 480}" }, { -- iPhone 5 LandscapeLeft ["UILaunchImageMinimumOSVersion"] = "7.0", ["UILaunchImageName"] = "Default-Landscape-568h", ["UILaunchImageOrientation"] = "LandscapeLeft", ["UILaunchImageSize"] = "{320, 568}" }, { -- iPhone 5 LandscapeRight ["UILaunchImageMinimumOSVersion"] = "7.0", ["UILaunchImageName"] = "Default-Landscape-568h", ["UILaunchImageOrientation"] = "LandscapeRight", ["UILaunchImageSize"] = "{320, 568}" }, { -- iPad LandscapeLeft ["UILaunchImageMinimumOSVersion"] = "7.0", ["UILaunchImageName"] = "Default-Landscape", ["UILaunchImageOrientation"] = "LandscapeLeft", ["UILaunchImageSize"] = "{768, 1024}" }, { -- iPad LandscapeRight ["UILaunchImageMinimumOSVersion"] = "7.0", ["UILaunchImageName"] = "Default-Landscape", ["UILaunchImageOrientation"] = "LandscapeRight", ["UILaunchImageSize"] = "{768, 1024}" }, { -- iPhone 6 LandscapeLeft ["UILaunchImageMinimumOSVersion"] = "8.0", ["UILaunchImageName"] = "Default-Landscape-667h", ["UILaunchImageOrientation"] = "LandscapeLeft", ["UILaunchImageSize"] = "{375, 667}" }, { -- iPhone 6 LandscapeRight ["UILaunchImageMinimumOSVersion"] = "8.0", ["UILaunchImageName"] = "Default-Landscape-667h", ["UILaunchImageOrientation"] = "LandscapeRight", ["UILaunchImageSize"] = "{375, 667}" }, { -- iPhone 6 Plus LandscapeLeft ["UILaunchImageMinimumOSVersion"] = "8.0", ["UILaunchImageName"] = "Default-Landscape-736h", ["UILaunchImageOrientation"] = "LandscapeLeft", ["UILaunchImageSize"] = "{414, 736}" }, { -- iPhone 6 Plus LandscapeRight ["UILaunchImageMinimumOSVersion"] = "8.0", ["UILaunchImageName"] = "Default-Landscape-736h", ["UILaunchImageOrientation"] = "LandscapeRight", ["UILaunchImageSize"] = "{414, 736}" }, }, -- NSLocationWhenInUseUsageDescription = "Device location is used to map nearby venues.", -- CFBundleShortVersionString = "1.0", -- override build number -- CFBundleVersion = "yyyy.mm.ddtime", -- override internal build number CFBundleIconFile = "Icon.png", CFBundleIconFiles = { "Icon.png", "Icon@2x.png", "Icon@3x.png", "Icon-60.png", "Icon-60@2x.png", "Icon-60@3x.png", "Icon-72.png", "Icon-72@2x.png", "Icon-76.png", "Icon-76@2x.png", "Icon-Small.png", "Icon-Small@2x.png", "Icon-Small@3x.png", "Icon-Small-40.png", "Icon-Small-40@2x.png", "Icon-Small-50.png", "Icon-Small-50@2x.png", }, UIAppFonts = { -- "TimKid.ttf", -- "d-puntillas-B-to-tiptoe.ttf", -- "d puntillas D to tiptoe.ttf", }, -- NSAppTransportSecurity necessary for non-SSL connections in iOS9+ NSAppTransportSecurity = { NSAllowsArbitraryLoads = true, -- need for vungle, fuse }, --[[-- iOS app URL schemes: CFBundleURLTypes = { { CFBundleURLSchemes = { "fbXXXXXXXXXXXXXX", -- example scheme for facebook "coronasdkapp", -- example second scheme } } } --]] } }, -- iphone tvos = { iCloud = true, -- Apple TV app icons consist of multiple "layers" in both small and large sizes icon = { -- A collection of 400x240 images, in order from top to bottom small = { -- "Icon-tvOS-Small-4.png", "Icon-tvOS-Small-3.png", "Icon-tvOS-Small-2.png", "Icon-tvOS-Small-1.png", }, -- A collection of 1280x768 images, in order from top to bottom large = { -- "Icon-tvOS-Large-4.png", "Icon-tvOS-Large-3.png", "Icon-tvOS-Large-2.png", "Icon-tvOS-Large-1.png", } }, -- A 1920x720 image file, displayed when your app is on the "top shelf" topShelfImage = "Icon-tvOS-TopShelf.png", -- A 1920x1080 image file, displayed briefly as your app loads launchImage = "Icon-tvOS-Launch.png" }, -- exclude files per platform excludeFiles = { -- all = { "\*secret.txt", "artwork/\*" }, all = { "Icon1024.png", "Icon\*.icns", "Icon\*.ico", "hoppynaut.iconset\*", "icon\_\*.png" }, iphone = { "Icon-\*dpi.png", "Icon-win32\*", "audio/\*.ogg", "audio/\*.mp3", "audio/\*.wav" }, appletvos = { "Icon-\*dpi.png", "Icon-win32\*", "audio/\*.ogg", "audio/\*.mp3", "audio/\*.wav" }, android = { "Icon.png", "Icon-win32\*", "Icon-osx\*", "\*@2x.png", "\*@3x.png", "audio/\*.mp3", "audio/\*.m4a", "audio/\*.aac", "audio/\*.aif", "audio/\*.wav", "iTunesArtwork\*" }, osx = { "Default\*.png", "audio/\*.ogg", "audio/\*.mp3", "audio/\*.wav" }, win32 = { "Default\*.png", "audio/\*.mp3", "audio/\*.aif", "audio/\*.aac", "audio/\*.m4a", "iTunesArtwork\*" } }, -- PLUGINS plugins = { -- ADS and SHARING ["CoronaProvider.ads.vungle"] = { publisherId = "com.vungle", supportedPlatforms = { android=true, iphone=true } }, ["plugin.combre"] = { publisherId = "com.appsaholic", supportedPlatforms = { iphone=true, android=true, osx=true, ["win32-sim"]=true } }, ["plugin.google.play.services"] = { publisherId = "com.coronalabs", supportedPlatforms = { android=true, ["android-kindle"]=true } }, -- ANALYTICS ["CoronaProvider.analytics.flurry"] = { publisherId = "com.coronalabs", supportedPlatforms = { ["android-kindle"]=true, android=true, iphone=true } }, -- also required by analytics, ads ["CoronaProvider.native.popup.social"] = { publisherId = "com.coronalabs", supportedPlatforms = { android=true, iphone=true } }, -- GAME NETWORKS ["CoronaProvider.gameNetwork.apple"] = { publisherId = "com.coronalabs", supportedPlatforms = { iphone=true, ["iphone-sim"]=true } }, ["CoronaProvider.gameNetwork.google"] = { publisherId = "com.coronalabs", supportedPlatforms = { android=true } }, ["plugin.gamecircle"] = { publisherId = "COM\_INNOVATIVELEISURE", supportedPlatforms = { ["android-kindle"]=true } }, -- IAP ["plugin.google.iap.v3"] = { publisherId = "com.coronalabs", supportedPlatforms = { android=true } }, ["plugin.amazon.iap"] = { publisherId = "com.amazon", supportedPlatforms = { ["android-kindle"]=true } }, ["plugin.notifications"] = { publisherId = "com.coronalabs", supportedPlatforms = { ["android-kindle"]=true, android=true, iphone=true } }, -- iCloud storage added 1/8/2016 - for tvOS support ["plugin.iCloud"] = { publisherId = "com.coronalabs", supportedPlatforms = { iphone=true, appletvos=true, ["iphone-sim"]=true }, }, -- -- ["plugin.mwc"] = { -- publisherId = "com.xibalbastudios" -- multiply with carry RNG -- }, }, -- This table configures the desktop app window for Win32 and OS X: window = { -- Sets up how the window should be launched on startup (default is "normal"). -- Supports "normal", "minimized", "maximized", or "fullscreen". defaultMode = "normal", -- Sets the default launch width and height of the view/client area of the window. -- This is the region within the borders of the window that Corona renders to. -- Ideally, this should match or exceed your "config.lua" content width and height. defaultViewWidth = 800, defaultViewHeight = 450, -- Set the following to true to allow the end user to resize the window. -- If true, then you may need to handle Corona's "resize" event to re-layout your content. -- The window is not resizable by default; you must opt-in by setting this to true. resizable = true, -- These settings only apply if "resizable" (above) is set to true. -- Prevents the user from resizing the window to a size smaller than these values. -- This width and height is the region within the borders of the window. -- The width and height should be set to your "config.lua" file's content width and height. -- If settings are not specified, the window can be resized down to whatever the OS allows. minViewWidth = 800, minViewHeight = 450, -- Enables/disables the window's "close" button (enabled by default). -- If disabled, you must close the window in Lua via "native.requestExit()". -- Note that Corona does not currently provide an event when the close button is clicked. enableCloseButton = true, -- Enables/disables the window's minimize button (enabled by default). enableMinimizeButton = true, -- Enables/disables the window's maximize button (disabled by default). -- Note that the window will be resized when maximized and restored. -- If enabled, you may need to handle Corona's "resize" event to re-layout your content. enableMaximizeButton = true, -- Tells the runtime to suspend when the window is minimized (disabled by default). suspendWhenMinimized = true, -- Sets the window's title bar text to a localized string (no title bar text by default). -- Supports 2 letter ISO 639‐1 language codes (not case-sensitive). -- Supports optional 2 letter ISO 3166‐1 country codes (not case sensitive). -- Language and country codes must be separated by a dash (-). titleText = { -- The "default" text will be used if the system is using a language and/or -- country code not defined below. This serves as a fallback mechanism. default = "Hoppy Naut", -- This text is used on English language systems in the United States. -- Note that the country code is optional (used for regional purposes). ["en‐us"] = "Hoppy Naut", -- This text is used on English language systems in the United Kingdom. -- Note that the country code is optional (used for regional purposes). ["en‐gb"] = "Hoppy Naut", -- This text is used for all other English language systems. ["en"] = "Hoppy Naut", -- This text is used for all French language systems. ["fr"] = "Hoppy Naut", -- This text is used for all Spanish language systems. ["es"] = "Hoppy Naut", }, }, }

-Tony

Hi Tony,

The next step will be to try building our sample Commercial Break app which has the basic build settings necessary. If you can build that, then we will know it’s not a build issue, but rather something related to your system or your project’s build settings.

https://github.com/coronalabs/plugins-sample-combre

Best regards,

Brent

Hi Brent,

The plugins-sample-combre app sample builds for iOS just fine.  I tried copying my failing app’s build.settings to the sample project, and it still builds with no problem.

My app, however, still gets the same build error when the combre plugin is not commented out.  

I am now thoroughly confused:

  • App build fails for iOS with combre plugin

  • App build succeeds for Android with combre plugin

  • App build succeeds for iOS without combre plugin

  • App build succeeds for Android without combre plugin

  • Sample app build succeeds for iOS with combre plug and same build.settings as fail case in other app

Any ideas what else to try?

Thanks,

Tony

Hi Tony,

Something just doesn’t add up here. You say that you can build with the sample’s build.settings AND with your project’s build.settings. But then if you take either of those outside of the sample, and into your project, it fails to build???

Brent

No, I have not tried to use the sample project’s build.settings in my project.  My project will not run with the sample project’s build.settings because it needs those other plugins.  I am not understanding why my project won’t build when the sample project builds fine with the same build.settings from my project that fails to build. 

Yeah, I understand that the sample’s build.settings won’t work in your project, because it only has the “combre” plugin. I’m just baffled why your build.settings work inside the sample, but not inside your own project.

What version of Corona are you using? What version of iOS are you targeting in the build window? Is Xcode and everything else up-to-date?

Brent

Corona: 2016.2818

iOS Target: 9.2

Xcode: 7.2 (7C68)  - The latest Xcode is 7.2.1, but I haven’t updated to it yet.

update:

I decided to try adding in the applovin plugin to my project to see if adding that plugin had the same problem and sure enough, I am getting the same build failure as when including the combre plugin.

Tests:

  • App build fails for iOS with combre plugin

  • App build fails for iOS with applovin plugin

  • App build succeeds for Android with combre plugin

  • App build succeeds for Android with applovin plugin

  • App build succeeds for Android with combre + applovin plugin

  • App build succeeds for iOS without combre plugin

  • App build succeeds for iOS without applovin plugin

  • App build succeeds for Android without combre plugin

  • App build succeeds for Android without applovin plugin

  • Sample app build succeeds for iOS with combre plug and same build.settings as fail case in App

  • Sample app build succeeds for iOS with appslovin plug and same build.settings as fail case in App

  • Sample app build succeeds for iOS with combre + appslovin plug and same build.settings as fail case in App

Hi Tony,

I don’t know what else I can do to assist you. The engineers report that there’s literally zero chance that this is caused by anything except your build.settings. I would, if anything, suggest that you start ripping out (or commenting out) entire sections that may not relate, i.e. all of the Android stuff (since your issue here is on iOS), all of the iCloud stuff, all of the tvOS stuff, all plugins that are not immediately needed, etc. If you want, even consider just putting your build.settings inside our “Hello World” sample (which obviously uses no plugins) and see if you can get a build to work. Sorry I can’t be of more help, but no other users are reporting build issues with these plugins, so the symptom is most likely related to your build.settings.

Best regards,

Brent

Well is there a build log that might help point me in the right direction here?  Obviously, something about adding these plug-ins is causing the build to fail, but I am completely blind as to what.  If I give you a build ID, can you check logs on your end?  Here’s my latest:

Building ios app for tonygod@hotmail.com with 2016.2818

Using custom build id from app bundle: 00000 (AppSettings.lua)

BuildID: 56b3c049a3c61

ERROR: Unexpected empty response from build server

iOS build failed (5)

ERROR: Build Failed: ERROR: Unexpected empty response from build server

since my same build.settings file works with the combre sample app, i don’t see how adding it to the hello world app would help.

Thanks,

Tony

Hi Tony,

I checked into some details on this build. It appears that the build was possibly timing out or running out of memory, possibly because you’re using a huge amount of plugins. I would definitely ask you to consider why you’re using/needing ~3 different ad providers (it appears you’re using Fuse as well).

On a related note, your uncompressed app is over 200 megs. That’s getting a bit hefty IMHO.

In any case, we increased the memory limit, so please try building again and report back what happens.

Thanks,

Brent

Ok I found another variable to the equation:

If I uncheck “Enable Analytics and Monetization” my app build succeeds.

If I check “Enable Analytics and Monetization” in the stock combre sample app, the build fails with a link error:

BUILD ERROR: There was a problem linking the app. Check the console for more information. iOS build failed (12) ERROR: Build Failed: There was a problem linking the app.

So I think there is some kind of conflict between this setting and/or the Fuse plug-in and all these other plug-ins.  See this thread for a related report from another developer with the Facebook plugin.

So, you weren’t actually implementing Fuse, but you were simply checking that box in the build window? Please leave it unchecked if you’re not explicitly using Fuse. I understand this is confusing, but we’re working on resolving/clarifying that soon.

Brent

I am using Fuse right now in production.  I am testing out applovin and combre as possible back-ups or replacements for Fuse in the event that it is unavailable or otherwise unusable.

If it is not allowed/advisable to use multiple ad providers in Corona apps, I would like to see that stated somewhere in the documentation.

Hi Tony,

It’s not “disallowed” to use multiple providers, but if you’re testing out alternatives, I suggest you comment out the ones you’re considering replacing.

Take care,

Brent

If for no other reason, your builds will be much faster if you remove plugins you’re not really testing with. Every plugin you include needs to be packaged up as part of the build, and adds to the binary size as well as taking up network bandwidth.

Alright, let’s take a look at where we are:

  • You can confirm that there is an issue with the “Enable Analytics and Monetization” setting when used with the following plug-ins:

  • combre

  • applovin

  • Facebook?

  • You are working on resolving/clarifying the issue “soon”

  • Uncompressed apps over 200 megabytes are considered “a bit hefty”

  • my uncompressed source tree for the app is 70mb

  • There is a significant amount of binary bloat that occurs with each plug-in

  • each plug-in binary adds to overall app binary size

  • larger app binaries use more network bandwidth because Corona (free) requires builds to happen remotely

  • It is not “disallowed” to use multiple providers

  • It is suggested to comment out plug-ins that you are not using

From this, I surmise you are telling me you know about this problem and a fix is already being discussed.

Best regards,

Tony

Hi Tony,

Yes, let me summarize that we are aware of the issues between that checkbox and the build issue that you experienced. In the meantime, I still advise that for testing alternative ad provider plugins like Commercial Break, AppLovin, or Facebook Audience Network, you comment out Fuse, Vungle, etc.

Best regards,

Brent