iOS App Store Rejecting builds (made with 3443)

Hi all,

I’ve just tried to submit an update to Apple for my app (the first one in about 6-7 months) - the build process all went ok (I used the latest daily 3443 and iOS SDK 12.1 - on High Sierra) and the build was submitted ok via Application Launcher but I then get an email shortly after from App Store Connect with the following…

"Dear Developer,

We identified one or more issues with a recent delivery for your app, “The Ukulele App”. Please correct the following issues, then upload again.

Invalid architectures - This app has invalid architecture, and may have been built with invalid build settings or incompatible tools. Try rebuilding the app with the latest Xcode version. If you are using third party development tools, contact the provider.

Best regards,

The App Store Team"

The build settings haven’t changed since my last update, the only change I made was to upgrade my local iOS SDK to 12.1 and update XCode to 10.1 - do I need to upgrade to Mohave?

Any ideas?

I just uploaded an app to Apple using Xcode 10.1, Corona 2018.3426 and it processed as expected. I’m not using any plugins in this app.

I don’t think you need Mohave as that shouldn’t matter. But I am on Mohave. 

Rob

It was suggested on the slack channel that it might be down to one of the plugins I use.

I use three that are not standard Corona ones and I’ve emailed a couple of  the authors to ask them if they’ve been updated (the two in question are ScottH’s Volume Control and IAP Badger - I haven’t contacted OneSignal).

I’m assuming all the Corona ones are all updated?

Here’s my build.settings file in case anyone can see anything.

-- --------------------------------------------------- -- For more information on build.settings see the Corona SDK Build Guide at: -- http://docs.coronalabs.com/guide/distribution/buildSettings/index.html -- --------------------------------------------------- settings = { orientation = { -- Supported values for orientation: -- PHONE : portrait, portraitUpsideDown -- TABLET : landscapeLeft, landscapeRight -- default = "landscapeRight", supported = { "landscapeRight","landscapeLeft" } -- default = "portrait", supported = { "portrait","portraitUpsideDown" } default = "portrait", supported = { "portrait","portraitUpsideDown" } }, excludeFiles = { -- Include only the necessary icon files on each platform iphone = { "Icon-\*dpi.png", "\_build.settings.\*", "assets/api\_key.txt", "readme.md", ".gitignore", ".git" }, android = { "Icon.png", "Icon-Small-\*.png", "Icon\*@2x.png", "\_build.settings.\*", "assets/api\_key.txt", "readme.md", ".gitignore", ".git" }, }, -- --------------------------------------------------- -- iOS Section -- --------------------------------------------------- iphone = { xcassets = "Images.xcassets", plist = { UILaunchStoryboardName = "LaunchScreen", UIBackgroundModes = {"remote-notification"}, NSLocationAlwaysUsageDescription = { "" }, NSLocationWhenInUseUsageDescription = { "" }, NSCalendarsUsageDescription = "Testing", NSPhotoLibraryUsageDescription = "Testing", NSCameraUsageDescription = "Testing", MinimumOSVersion = "6.1.6", UIStatusBarHidden = true, UIPrerenderedIcon = true, UIApplicationExitsOnSuspend = false, NSAppTransportSecurity = { NSAllowsArbitraryLoads=true, NSExceptionDomains = { ["coronalabs.com"] = { NSIncludesSubdomains = true, NSThirdPartyExceptionAllowsInsecureHTTPLoads = true }, ["youtube.com"] = { NSIncludesSubdomains = true, NSThirdPartyExceptionAllowsInsecureHTTPLoads = true }, ["google.com"] = { NSIncludesSubdomains = true, NSThirdPartyExceptionAllowsInsecureHTTPLoads = true }, ["theukuleleapp.com"] = { NSIncludesSubdomains = true, NSThirdPartyExceptionAllowsInsecureHTTPLoads = true }, ["www.theukuleleapp.com"] = { NSIncludesSubdomains = true, NSThirdPartyExceptionAllowsInsecureHTTPLoads = true }, }, }, } }, -- --------------------------------------------------- -- Android Section -- --------------------------------------------------- android = { usesPermissions = { "android.permission.INTERNET", "android.permission.ACCESS\_NETWORK\_STATE", "com.android.vending.CHECK\_LICENSE", "com.android.vending.BILLING", "android.permission.ACCESS\_FINE\_LOCATION", }, usesFeatures = { -- If you set permissions "ACCESS\_FINE\_LOCATION" and "ACCESS\_COARSE\_LOCATION" above, -- then you may 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 }, }, }, -- --------------------------------------------------- -- Plugins -- --------------------------------------------------- plugins = { ["plugin.volumeControl"] = { publisherId = "tech.scotth", supportedPlatforms = { iphone=true, android=true } }, ["plugin.OneSignal"] = { publisherId = "com.onesignal" }, ["plugin.iap\_badger"] = { publisherId = "uk.co.happymongoose" }, ["plugin.google.iap.v3"] = { publisherId = "com.coronalabs", supportedPlatforms = { android = true }, }, ["plugin.googleAnalytics"] = { publisherId = "com.coronalabs", }, ["plugin.admob"] = { publisherId = "com.coronalabs", }, ["shared.android.support.v4"] = { publisherId = "com.coronalabs", supportedPlatforms = { android=true } }, } }

I would suggest commenting out the plugins one at a time, build and upload and wait until you get the automatic processing email and see if one of them is triggering the response from Apple.

Rob

That was going to be my plan, but thanks for confirming that line of thought.

Ok - so I’ve sorted the issue, it had nothing to with the plugin’s but due to fact that I’d not set the MinimumOSVersion In the plist.

D’oh!

I answered this over on the CDN Slack. The test I uploaded did not include the MinimumOSVersion key and it passed its initial automated review.

Apple generally only supports two versions back. While we are still supporting 8.0, that doesn’t mean Apple isn’t looking for a higher version. You could perhaps specific 10.1.

But again, I didn’t include this key and it passed. Maybe its some combination of a plugin and needing a higher minimum SDK.

Rob

Just to confirm, the plugins were all fine.  The rejection was due to my mistake including an old value in the MinimumOSVersion key (as can be seen in the first post).

I’ve currently set the value to “8.0” but I might just remove it all together.

Unless you have a specific need to set a minimum iOS SDK, I would remove it and let it default to what we support.

Rob

I just uploaded an app to Apple using Xcode 10.1, Corona 2018.3426 and it processed as expected. I’m not using any plugins in this app.

I don’t think you need Mohave as that shouldn’t matter. But I am on Mohave. 

Rob

It was suggested on the slack channel that it might be down to one of the plugins I use.

I use three that are not standard Corona ones and I’ve emailed a couple of  the authors to ask them if they’ve been updated (the two in question are ScottH’s Volume Control and IAP Badger - I haven’t contacted OneSignal).

I’m assuming all the Corona ones are all updated?

Here’s my build.settings file in case anyone can see anything.

-- --------------------------------------------------- -- For more information on build.settings see the Corona SDK Build Guide at: -- http://docs.coronalabs.com/guide/distribution/buildSettings/index.html -- --------------------------------------------------- settings = { orientation = { -- Supported values for orientation: -- PHONE : portrait, portraitUpsideDown -- TABLET : landscapeLeft, landscapeRight -- default = "landscapeRight", supported = { "landscapeRight","landscapeLeft" } -- default = "portrait", supported = { "portrait","portraitUpsideDown" } default = "portrait", supported = { "portrait","portraitUpsideDown" } }, excludeFiles = { -- Include only the necessary icon files on each platform iphone = { "Icon-\*dpi.png", "\_build.settings.\*", "assets/api\_key.txt", "readme.md", ".gitignore", ".git" }, android = { "Icon.png", "Icon-Small-\*.png", "Icon\*@2x.png", "\_build.settings.\*", "assets/api\_key.txt", "readme.md", ".gitignore", ".git" }, }, -- --------------------------------------------------- -- iOS Section -- --------------------------------------------------- iphone = { xcassets = "Images.xcassets", plist = { UILaunchStoryboardName = "LaunchScreen", UIBackgroundModes = {"remote-notification"}, NSLocationAlwaysUsageDescription = { "" }, NSLocationWhenInUseUsageDescription = { "" }, NSCalendarsUsageDescription = "Testing", NSPhotoLibraryUsageDescription = "Testing", NSCameraUsageDescription = "Testing", MinimumOSVersion = "6.1.6", UIStatusBarHidden = true, UIPrerenderedIcon = true, UIApplicationExitsOnSuspend = false, NSAppTransportSecurity = { NSAllowsArbitraryLoads=true, NSExceptionDomains = { ["coronalabs.com"] = { NSIncludesSubdomains = true, NSThirdPartyExceptionAllowsInsecureHTTPLoads = true }, ["youtube.com"] = { NSIncludesSubdomains = true, NSThirdPartyExceptionAllowsInsecureHTTPLoads = true }, ["google.com"] = { NSIncludesSubdomains = true, NSThirdPartyExceptionAllowsInsecureHTTPLoads = true }, ["theukuleleapp.com"] = { NSIncludesSubdomains = true, NSThirdPartyExceptionAllowsInsecureHTTPLoads = true }, ["www.theukuleleapp.com"] = { NSIncludesSubdomains = true, NSThirdPartyExceptionAllowsInsecureHTTPLoads = true }, }, }, } }, -- --------------------------------------------------- -- Android Section -- --------------------------------------------------- android = { usesPermissions = { "android.permission.INTERNET", "android.permission.ACCESS\_NETWORK\_STATE", "com.android.vending.CHECK\_LICENSE", "com.android.vending.BILLING", "android.permission.ACCESS\_FINE\_LOCATION", }, usesFeatures = { -- If you set permissions "ACCESS\_FINE\_LOCATION" and "ACCESS\_COARSE\_LOCATION" above, -- then you may 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 }, }, }, -- --------------------------------------------------- -- Plugins -- --------------------------------------------------- plugins = { ["plugin.volumeControl"] = { publisherId = "tech.scotth", supportedPlatforms = { iphone=true, android=true } }, ["plugin.OneSignal"] = { publisherId = "com.onesignal" }, ["plugin.iap\_badger"] = { publisherId = "uk.co.happymongoose" }, ["plugin.google.iap.v3"] = { publisherId = "com.coronalabs", supportedPlatforms = { android = true }, }, ["plugin.googleAnalytics"] = { publisherId = "com.coronalabs", }, ["plugin.admob"] = { publisherId = "com.coronalabs", }, ["shared.android.support.v4"] = { publisherId = "com.coronalabs", supportedPlatforms = { android=true } }, } }

I would suggest commenting out the plugins one at a time, build and upload and wait until you get the automatic processing email and see if one of them is triggering the response from Apple.

Rob

That was going to be my plan, but thanks for confirming that line of thought.

Ok - so I’ve sorted the issue, it had nothing to with the plugin’s but due to fact that I’d not set the MinimumOSVersion In the plist.

D’oh!

I answered this over on the CDN Slack. The test I uploaded did not include the MinimumOSVersion key and it passed its initial automated review.

Apple generally only supports two versions back. While we are still supporting 8.0, that doesn’t mean Apple isn’t looking for a higher version. You could perhaps specific 10.1.

But again, I didn’t include this key and it passed. Maybe its some combination of a plugin and needing a higher minimum SDK.

Rob

Just to confirm, the plugins were all fine.  The rejection was due to my mistake including an old value in the MinimumOSVersion key (as can be seen in the first post).

I’ve currently set the value to “8.0” but I might just remove it all together.

Unless you have a specific need to set a minimum iOS SDK, I would remove it and let it default to what we support.

Rob