Validation Error when Uploading to App Store: Missing 120x120 Icon for iPhone/iPod Touch

Hi everyone,

I’m running into an issue when trying to upload my app built with Solar2D to the App Store using Transporter. I get the following validation error:

Validation failed (409)
Missing required icon file. The bundle does not contain an app icon for iPhone / iPod Touch of exactly ‘120x120’ pixels, in .png format for iOS versions >= 10.0. To support older versions of iOS, the icon may be required in the bundle outside of an asset catalog. Make sure the Info.plist file includes appropriate entries referencing the file. See User interface | Apple Developer Documentation
(ID: 06e57a28-e971-4dbf-b112-62c7def89ddd)

I have already included the 120x120 icon in my build.settings and also added all required icon sizes inside and outside of Images.xcassets, but the error still appears.

Has anyone faced this before? Is there something specific I need to declare in Solar2D or in the build.settings to fix this?

Any help or working example would be greatly appreciated.

Thanks in advance!

Hi @Nicolasr7,

The icon for that size should be named Icon-120.png and placed inside the AppIcon.appiconset folder. Make sure the image is exactly 120x120 pixels and that it doesn’t contain any transparency. The App Store applies masks to your icons to define the shape shown across all iOS devices.

Also, make sure your build.settings file includes the following line inside the iphone table:

xcassets = "Images.xcassets",

Let me know if that helps!

Also, this is how my iphone table looks into build.settings file:


--
	-- iOS section
	--
	iphone =
	{
      xcassets = "Images.xcassets",
      plist =
      {
          UIStatusBarHidden = false,
          UILaunchStoryboardName = "LaunchScreen",
          
          ITSAppUsesNonExemptEncryption = false, -- This app doesn't use custom encryption
          
          CFBundleLocalizations =
          {
              "en",  --English
              "es",  --Spanish
              "fr",  --French
              "it",  --Italian
              "pt",  --Portuguese
              "zh",  --Chinese
              "ja",  --Japanese
              "ko",  --Korean
              "de",  --German
              "ru",  --Russian
          },
          CFBundleDisplayName = "MyAppName",
          CFBundleName        = "MyAppName",
          
          NSUserTrackingUsageDescription = "Your privacy is important to us. This app uses AdMob to deliver personalized ads that support free content. AdMob may collect and use precise location data, device information, and usage data for ad personalization. This helps us provide you with relevant ads and improve your overall app experience.",
          
          -- for Admob
          GADApplicationIdentifier = "MyAdmobAppId",
          SKAdNetworkItems = { -- https://developers.google.com/admob/ios/quick-start
              { -- Last updated 2025-04-02 UTC.
                  { SKAdNetworkIdentifier = "cstr6suwn9.skadnetwork" }, -- Google
                  { SKAdNetworkIdentifier = "4fzdc2evr5.skadnetwork" }, -- Aarki
                  { SKAdNetworkIdentifier = "2fnua5tdw4.skadnetwork" }, -- Adform
                  { SKAdNetworkIdentifier = "ydx93a7ass.skadnetwork" }, -- Adikteev
                  { SKAdNetworkIdentifier = "p78axxw29g.skadnetwork" }, -- Amazon
                  { SKAdNetworkIdentifier = "v72qych5uu.skadnetwork" }, -- Appier
                  { SKAdNetworkIdentifier = "ludvb6z3bs.skadnetwork" }, -- Applovin
                  { SKAdNetworkIdentifier = "cp8zw746q7.skadnetwork" }, -- Arpeely
                  { SKAdNetworkIdentifier = "3sh42y64q3.skadnetwork" }, -- Basis
                  { SKAdNetworkIdentifier = "c6k4g5qg8m.skadnetwork" }, -- Beeswax.io
                  { SKAdNetworkIdentifier = "s39g8k73mm.skadnetwork" }, -- Bidease
                  { SKAdNetworkIdentifier = "3qy4746246.skadnetwork" }, -- Bigabid Media
                  { SKAdNetworkIdentifier = "f38h382jlk.skadnetwork" }, -- Chartboost
                  { SKAdNetworkIdentifier = "hs6bdukanm.skadnetwork" }, -- Criteo
                  { SKAdNetworkIdentifier = "mlmmfzh3r3.skadnetwork" }, -- Digital Turbine DSP
                  { SKAdNetworkIdentifier = "v4nxqhlyqp.skadnetwork" }, -- i-mobile
                  { SKAdNetworkIdentifier = "wzmmz9fp6w.skadnetwork" }, -- InMobi
                  { SKAdNetworkIdentifier = "su67r6k2v3.skadnetwork" }, -- ironsource Ads
                  { SKAdNetworkIdentifier = "yclnxrl5pm.skadnetwork" }, -- Jampp
                  { SKAdNetworkIdentifier = "t38b2kh725.skadnetwork" }, -- LifeStreet Media
                  { SKAdNetworkIdentifier = "7ug5zh24hu.skadnetwork" }, -- Liftoff
                  { SKAdNetworkIdentifier = "gta9lk7p23.skadnetwork" }, -- Liftoff Monetize
                  { SKAdNetworkIdentifier = "vutu7akeur.skadnetwork" }, -- LINE Ads Network
                  { SKAdNetworkIdentifier = "y5ghdn5j9k.skadnetwork" }, -- Mediaforce
                  { SKAdNetworkIdentifier = "v9wttpbfk9.skadnetwork" }, -- Meta (1 of 2)
                  { SKAdNetworkIdentifier = "n38lu8286q.skadnetwork" }, -- Meta (2 of 2)
                  { SKAdNetworkIdentifier = "47vhws6wlr.skadnetwork" }, -- MicroAd
                  { SKAdNetworkIdentifier = "kbd757ywx3.skadnetwork" }, -- Mintegral / Mobvista
                  { SKAdNetworkIdentifier = "9t245vhmpl.skadnetwork" }, -- Moloco
                  { SKAdNetworkIdentifier = "a2p9lx4jpn.skadnetwork" }, -- Opera
                  { SKAdNetworkIdentifier = "22mmun2rn5.skadnetwork" }, -- Pangle
                  { SKAdNetworkIdentifier = "44jx6755aq.skadnetwork" }, -- Persona.ly Ltd.
                  { SKAdNetworkIdentifier = "k674qkevps.skadnetwork" }, -- Pubmatic
                  { SKAdNetworkIdentifier = "4468km3ulz.skadnetwork" }, -- Realtime Technologies GmbH
                  { SKAdNetworkIdentifier = "2u9pt9hc89.skadnetwork" }, -- Remerge
                  { SKAdNetworkIdentifier = "8s468mfl3y.skadnetwork" }, -- RTB House
                  { SKAdNetworkIdentifier = "klf5c3l5u5.skadnetwork" }, -- Sift Media
                  { SKAdNetworkIdentifier = "ppxm28t8ap.skadnetwork" }, -- Smadex
                  { SKAdNetworkIdentifier = "kbmxgpxpgc.skadnetwork" }, -- StackAdapt
                  { SKAdNetworkIdentifier = "uw77j35x4d.skadnetwork" }, -- The Trade Desk
                  { SKAdNetworkIdentifier = "578prtvx9j.skadnetwork" }, -- Unicorn
                  { SKAdNetworkIdentifier = "4dzt52r2t5.skadnetwork" }, -- Unity Ads
                  { SKAdNetworkIdentifier = "tl55sbb4fm.skadnetwork" }, -- Verve
                  { SKAdNetworkIdentifier = "c3frkrj4fj.skadnetwork" }, -- Viant
                  { SKAdNetworkIdentifier = "e5fvkxwrpn.skadnetwork" }, -- Yahoo!
                  { SKAdNetworkIdentifier = "8c4e2ghe7u.skadnetwork" }, -- Yahoo! Japan Ads
                  { SKAdNetworkIdentifier = "3rd42ekr43.skadnetwork" }, -- YouAppi
                  { SKAdNetworkIdentifier = "97r2b46745.skadnetwork" }, -- Zemanta
                  { SKAdNetworkIdentifier = "3qcr597p9d.skadnetwork" }, -- Zucks
              },
          },
          
      },
      
      entitlements = {
          -- for apple games services
          ["com.apple.developer.game-center"] = true,
      },
      
      xcprivacy = {
          NSPrivacyAccessedAPITypes = {
              {
                  NSPrivacyAccessedAPIType = "NSPrivacyAccessedAPICategoryFileTimestamp",
                  NSPrivacyAccessedAPITypeReasons = { "3B52.1"}
              },
              {
                  NSPrivacyAccessedAPIType = "NSPrivacyAccessedAPICategoryDiskSpace",
                  NSPrivacyAccessedAPITypeReasons = { "E174.1"}
              },
              {
                  NSPrivacyAccessedAPIType = "NSPrivacyAccessedAPICategorySystemBootTime",
                  NSPrivacyAccessedAPITypeReasons = { "35F9.1"}
              },
              {
                  NSPrivacyAccessedAPIType = "NSPrivacyAccessedAPICategoryUserDefaults",
                  NSPrivacyAccessedAPITypeReasons = { "CA92.1"}
              },
          }
      },
	},