Fix: AppIcon “did not have any applicable content” in Xcode

Fix: AppIcon "did not have any applicable content" in Xcode

Written by

in

Quick answer: The asset catalog slots are labelled in points plus a scale factor, and Xcode compares the actual pixel dimensions of your PNG against them. A 29×29 image dropped into a 29pt @2x slot is the wrong size, so actool reports that the set has no applicable content. Supply correctly sized PNGs, or switch the AppIcon set to a single 1024×1024 image and let Xcode generate the rest.

Why this happens

An app icon set is not a folder of pictures — it is a list of slots described in Contents.json. Each slot is defined by a point size and a scale factor (29pt at 2x, 40pt at 3x, and so on). When Xcode compiles the catalog, actool reads the pixel dimensions of every file you dropped in and checks them against the slot it sits in.

So the label 29pt 2x does not mean “put a 29-pixel image here”. It means the slot expects 29 points rendered at 2×, which is 58 × 58 pixels. Drop a 29 × 29 PNG into that slot and it does not match any known variant, so the whole set ends up with nothing usable and the archive step fails with:

.../Images.xcassets: The app icon set named "AppIcon" did not have any applicable content.

The same message appears when the set is simply empty, when the 1024 × 1024 marketing icon is missing, or when the target’s ASSETCATALOG_COMPILER_APPICON_NAME build setting points at a set name that no longer exists in the catalog.

The rule to remember: pixels = points × scale.

How to fix it

1. Use a single 1024×1024 icon (the modern way)

Current Xcode versions let the catalog hold one image and generate the rest at build time. This is the least error-prone option.

  1. Select Assets.xcassets in the Project navigator, then select the AppIcon set.
  2. Open the Attributes inspector (Option-Command-4).
  3. Set Single Size for the iOS platform.
  4. Drag a 1024 × 1024 PNG into the single well.

The resulting Contents.json looks like this:

{
  "images" : [
    {
      "filename" : "AppIcon-1024.png",
      "idiom" : "universal",
      "platform" : "ios",
      "size" : "1024x1024"
    }
  ],
  "info" : { "author" : "xcode", "version" : 1 }
}

The 1024 image must be a PNG, in sRGB, and without an alpha channel — App Store validation rejects icons that contain transparency. Flatten the image before exporting.

2. Fill every slot with the correct pixel size

If your project uses the older multi-slot layout, each well needs its own file. For a standard iPhone/iPad app the sizes are:

Slot Pixels
20pt @2x / @3x 40 × 40 / 60 × 60
29pt @2x / @3x 58 × 58 / 87 × 87
40pt @2x / @3x 80 × 80 / 120 × 120
60pt @2x / @3x 120 × 120 / 180 × 180
1024pt @1x (marketing) 1024 × 1024

Note that 40pt @3x and 60pt @2x are both 120 × 120 — the same file can be used in both wells. The 1024 marketing slot is the one people forget, and it is enough on its own to trigger the error.

Start from one high-resolution square artwork and downscale it. Do not upscale a small image; actool will accept the dimensions but the icon will look soft on the Home Screen.

3. Generate the set with a script instead of resizing by hand

actool only cares about dimensions, not file names, so a small shell loop is enough. On macOS, sips ships with the system:

#!/bin/bash
SRC="AppIcon-1024.png"
for size in 40 58 60 80 87 120 180; do
  sips -z $size $size "$SRC" --out "Icon-${size}.png"
 done

sips -z takes height first, then width, so keep the two numbers identical for square icons. Drag each output into the matching well, or import the whole folder at once by right-clicking the AppIcon set and choosing Import.

A dedicated icon-set generator app does the same job with a GUI: drop in the 1024 source, pick the platform, export a folder, then delete the existing AppIcon set in Assets.xcassets and import the generated one in its place. That is faster than hand-mapping a dozen wells, but verify the output still contains the 1024 marketing icon.

4. Check the build setting and the catalog membership

If the wells look correct and the error persists, the target may be looking at a different set.

  1. Select the project, then the app target, then Build Settings.
  2. Search for ASSETCATALOG_COMPILER_APPICON_NAME. It should read AppIcon — matching the set name exactly, case included.
  3. Confirm Assets.xcassets is listed under Build Phases → Copy Bundle Resources for that target.
  4. If you renamed the set, either rename it back or update the build setting.

Also open Contents.json inside the set and look for entries with no filename key. Empty entries are normal in the editor but a set where every entry is empty is exactly the state that produces this error.

5. Launch images: use a launch screen, not an image set

Launch image sets are legacy. Modern iOS reads a launch screen instead, which scales to every device and orientation without you shipping a dozen PNGs.

In Info.plist, either point at a storyboard:

<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>

or, on iOS 14 and later, declare an empty launch screen dictionary and let the system draw the background:

<key>UILaunchScreen</key>
<dict/>

If your project still has a LaunchImage set with empty wells, delete it and remove the old UILaunchImages key so nothing references it.

How to prevent it

  • Keep one master 1024 × 1024 PNG in the repo and generate every other size from it.
  • Never rename the AppIcon set without updating ASSETCATALOG_COMPILER_APPICON_NAME.
  • Export icons as PNG without alpha; flatten transparency first.
  • After changing icons, run Product → Clean Build Folder before archiving, so a stale compiled catalog is not reused.
  • Read the actool warnings in the build log — unassigned or missing children are reported there long before the archive fails.

FAQ

Do I really need every icon size in the set?

With Single Size enabled, no — one 1024 × 1024 image is enough and Xcode derives the rest. With the older multi-slot layout you must fill the slots the set declares, including the 1024 marketing icon, or actool reports that the set has no applicable content.

Why does the slot say 29pt when I need a 58-pixel file?

Because the label combines a point size with a scale factor. Points are resolution-independent; the @2x suffix means the slot wants twice as many pixels as points. Multiply the two numbers to get the file size you need.

Can I use a PDF or SVG for the app icon?

Vector assets work for ordinary image sets in an asset catalog, but app icons are rasterised by the system and should be supplied as PNG. Use a PDF only for in-app artwork, not for the AppIcon set.

Sources & credits

Parts of this guide are adapted from content licensed under CC BY-SA 3.0; this article is shared under the same license.