1

I have an old app I'm trying to promote and I'm hitting a wall on what should be something simple, the App Icon

It's a super simple web-based app so I remade the project using a more updated template and it build fine and everything but the app icon is not getting in.

When I try to upload my ipa to the store I get these messages:

ERROR ITMS-90022: "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 https://developer.apple.com/documentation/bundleresources/information_property_list/user_interface"

ERROR ITMS-90704: "Missing App Icon. An app icon measuring 1024 by 1024 pixels in PNG format must be included in the Asset Catalog of apps built for iOS, iPadOS, or watchOS. Without this icon, apps cannot be submitted for review. For details, see https://developer.apple.com/ios/human-interface-guidelines/icons-and-images/app-icon/."

Here is what my Contents.json file looks like:

{
    "images":[
        {
            "idiom":"iphone",
            "size":"20x20",
            "scale":"2x",
            "filename":"Icon-App-20x20@2x.png"
        },
        {
            "idiom":"iphone",
            "size":"20x20",
            "scale":"3x",
            "filename":"Icon-App-20x20@3x.png"
        },
        {
            "idiom":"iphone",
            "size":"29x29",
            "scale":"1x",
            "filename":"Icon-App-29x29@1x.png"
        },
        {
            "idiom":"iphone",
            "size":"29x29",
            "scale":"2x",
            "filename":"Icon-App-29x29@2x.png"
        },
        {
            "idiom":"iphone",
            "size":"29x29",
            "scale":"3x",
            "filename":"Icon-App-29x29@3x.png"
        },
        {
            "idiom":"iphone",
            "size":"40x40",
            "scale":"2x",
            "filename":"Icon-App-40x40@2x.png"
        },
        {
            "idiom":"iphone",
            "size":"40x40",
            "scale":"3x",
            "filename":"Icon-App-40x40@3x.png"
        },
        {
            "idiom":"iphone",
            "size":"60x60",
            "scale":"2x",
            "filename":"Icon-App-60x60@2x.png"
        },
        {
            "idiom":"iphone",
            "size":"60x60",
            "scale":"3x",
            "filename":"Icon-App-60x60@3x.png"
        },
        {
          "size" : "1024x1024",
          "idiom" : "ios-marketing",
          "scale" : "1x",
          "filename" : "ItunesArtwork@2x.png"
        }
    ],
    "info":{
        "version":1,
        "author":"xcode"
    }
}

This is how that looks in my csproj file:

    <ItemGroup>
      <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Contents.json">
        <Visible>false</Visible>
      </ImageAsset>
      <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-App-20x20@1x.png">
        <Visible>false</Visible>
      </ImageAsset>
      <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-App-20x20@2x.png">
        <Visible>false</Visible>
      </ImageAsset>
      <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-App-20x20@3x.png">
        <Visible>false</Visible>
      </ImageAsset>
      <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-App-29x29@1x.png">
        <Visible>false</Visible>
      </ImageAsset>
      <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-App-29x29@2x.png">
        <Visible>false</Visible>
      </ImageAsset>
      <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-App-29x29@3x.png">
        <Visible>false</Visible>
      </ImageAsset>
      <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-App-40x40@1x.png">
        <Visible>false</Visible>
      </ImageAsset>
      <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-App-40x40@2x.png">
        <Visible>false</Visible>
      </ImageAsset>
      <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-App-40x40@3x.png">
        <Visible>false</Visible>
      </ImageAsset>
      <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-App-60x60@2x.png">
        <Visible>false</Visible>
      </ImageAsset>
      <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-App-60x60@3x.png">
        <Visible>false</Visible>
      </ImageAsset>
      <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-App-76x76@1x.png">
        <Visible>false</Visible>
      </ImageAsset>
      <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-App-76x76@2x.png">
        <Visible>false</Visible>
      </ImageAsset>
      <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-App-83.5x83.5@2x.png">
        <Visible>false</Visible>
      </ImageAsset>
      <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\ItunesArtwork@2x.png">
        <Visible>false</Visible>
      </ImageAsset>
    </ItemGroup>

The files are where they should be and I'm simply at a loss. I also tried renaming the images without the dashes and that didn't work either.

I have all of the required images so I'm not sure why the app can't find it.

I even used an app icon set from another app that is working and still nothing.

Eman
  • 1,093
  • 2
  • 26
  • 49
  • To be clear, you have the files, right? They're just not showing up? – AlexH Oct 21 '20 at 18:46
  • I do, they're in the correct folder and everything – Eman Oct 21 '20 at 18:59
  • did you include them in your project? see [this](https://stackoverflow.com/questions/392473/how-do-i-add-an-existing-directory-tree-to-a-project-in-visual-studio) – Ricardo Dias Morais Oct 21 '20 at 19:09
  • Not an Xmarin coder, but what caught my eye is you state this is an old app. How old? At some point a few years ago Apple required a 1024x1024 app icon. Nothing I see in your question suggests one exists. Pretty much any image editor should help you. Good luck! –  Oct 21 '20 at 19:10
  • It was from 2011, but I have added an image of that size. – Eman Oct 21 '20 at 19:11

3 Answers3

1

I found that there are some wrongs with filename.

Generally, the filename defined by Icon-scale*size.png, however your filename contains wrod @3x/@2x more is shown.

Therefore, you could modify the filename as follows:

{
  "images": [
    {
      "filename": "Icon-App-40.png",
      "size": "20x20",
      "scale": "2x",
      "idiom": "iphone"
    },
    {
      "filename": "Icon-App-60.png",
      "size": "20x20",
      "scale": "3x",
      "idiom": "iphone"
    },
    {
      "filename": "Icon-App-58.png",
      "size": "29x29",
      "scale": "2x",
      "idiom": "iphone"
    },
    {
      "filename": "Icon-App-87.png",
      "size": "29x29",
      "scale": "3x",
      "idiom": "iphone"
    },
    {
      "filename": "Icon-App-80.png",
      "size": "40x40",
      "scale": "2x",
      "idiom": "iphone"
    },
    {
      "filename": "Icon-App-120.png",
      "size": "40x40",
      "scale": "3x",
      "idiom": "iphone"
    },
    {
      "filename": "Icon-App-120.png",
      "size": "60x60",
      "scale": "2x",
      "idiom": "iphone"
    },
    {
      "filename": "Icon-App-180.png",
      "size": "60x60",
      "scale": "3x",
      "idiom": "iphone"
    },
    {
      "filename": "Icon-App-1024.png",
      "size": "1024x1024",
      "scale": "1x",
      "idiom": "ios-marketing"
    }
  ],
  "info": {
    "version": 1,
    "author": "xcode"
  }
}

Note: Also can define the filename without -, such as Icon40.png.

=================================Update================================

<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon1024.png">
  <Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon180.png">
  <Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon167.png">
  <Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon152.png">
  <Visible>false</Visible>
</ImageAsset>
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon120.png">
Junior Jiang
  • 12,430
  • 1
  • 10
  • 30
  • so it worked in the sense of that I see the icon on the app but when trying to upload it to the store I still get the two errors claiming the 120 and 1024 icon isn't present. – Eman Oct 22 '20 at 20:16
  • @Eman Okey, when you modify the `filename`, whether the `.csproj` shows as my updated answer. In addition, the `filename` of `1024` size png file should better use the `Icon-App-1024.png` to have a try. – Junior Jiang Oct 23 '20 at 01:51
  • @Eman Could you show the updated `Contents.json` and `.csproj` file? – Junior Jiang Oct 26 '20 at 01:47
  • updated the question with it, I copied it directly from the new app we have. Is there a difference in how it works with an iPhone app compared to a universal app? – Eman Oct 26 '20 at 14:43
  • @Eman Hi, the updated filename is not the same with my recommanded way. You'd better not copy directly from other project, it will occur unknown errors. The difference between iPhone and Universal app is whether we need a iPad Icon in project. Sometimes iPad Icon will occurs conflict, and we will remove iPad icon and select the iPhone option to solve that.. – Junior Jiang Oct 27 '20 at 01:28
  • I did copy exactly as you posted and it didn't work either, still had the same issues – Eman Oct 27 '20 at 18:51
  • @Eman Okey, but from your updated question, I could not see the `filename` is the same with mine. – Junior Jiang Oct 28 '20 at 01:37
  • 1
    I figured out my problem and it's now working correctly, thank you for your help :) – Eman Oct 28 '20 at 15:32
  • @Eman Great! Glad have solved that. Your solution will be helpful for others who meet the same problem. – Junior Jiang Oct 29 '20 at 01:20
1

After a lot of hair ripping and choice words I got it working.

The issue was, I'm using a shared layer that has all the view controllers and business logic and inside of that project was an Assets.xcassets folder that had some shared graphics, when I deleted that folder and did a rebuild, my app icon came back and transporter uploaded the app.

so for anyone who's using a shared layer for storing business logic, don't have multiple Assets.xcassets folders as they'll overlap on you.

Eman
  • 1,093
  • 2
  • 26
  • 49
0

I seem to encounter this issue every time I have to submit an update to the AppStore, and each time the solution is different. I count myself lucky if I only have to spend a couple of hours on it. This time, it was something to do with the folder where Xamarin places the IPA file. If it puts it somewhere like here:

MyApp\MyApp.iOS\bin\iPhone\Ad-Hoc\device-builds\iphone12.8-14.2

then I get the error. If it goes somewhere like here:

MyApp\MyApp.iOS\bin\iPhone\Ad-Hoc

then the icon is there, and it works. I'm not sure exactly what determines where it goes, my speculation is if you have done a build to a test device in the debug configuration and then switch to ad hoc it thinks it is still building for a device and so doesn't include the icon (since it's not needed unless you are uploading to the AppStore). So before you build a release candidate, shut down VS, reopen and reconnect with the Mac.

There seem to be multiple things that can cause this issue however.

samgak
  • 23,944
  • 4
  • 60
  • 82