Xcode compiles the asset catalog you edit (Assets.xcassets) into a single binary file named Assets.car inside the built app. What ends up in that file is what the app can actually load at run time. If a dark-mode image never made it into the build, or a brand color was saved in the wrong color space, the compiled catalog is where you can confirm it.
This guide uses the sample catalog built into the iOS Asset Catalog Explorer, so you can follow every step without your own app. It holds 13 assets with 25 renditions: four raster images, two vectors, six colors, and one data asset. A rendition is one stored variant of an asset, such as its dark version or its right-to-left version.
Find the Assets.car file to inspect
An .ipa file is a ZIP archive. Copy it, change the extension to .zip if your system needs that to open it, and look for Payload/YourApp.app/Assets.car. On macOS, right-click an application, choose Show Package Contents, and open Contents/Resources/Assets.car.
For your own project, the most reliable copy is the one Xcode just built. In Xcode, choose Product > Show Build Folder in Finder, then open Products, the folder for your configuration and platform, and the .app bundle. Inspecting that file shows what the current build contains, not what an older release contained.
Inspect builds you produced or are allowed to examine. Being able to open an asset does not give you the right to reuse someone else's artwork.
- Frameworks and app extensions can carry their own Assets.car. If an asset seems to be missing, check the bundle that actually loads it.
- The explorer parses the file in your browser with WebAssembly. The catalog is not uploaded.
Load the sample and read the file summary
The file summary describes the catalog as a whole. The rendition count is usually higher than the asset count, because one asset can store several variants. In the sample, 13 assets account for 25 renditions.
- Open the iOS Asset Catalog Explorer and select Try a sample catalog.
- Check the counts on the filter buttons: All 13, Images 4, Vectors 2, Colors 6, and Data 1.
- Read File Metadata. The sample reports CoreUI version 1010, storage version 17, 25 renditions, and the platform it was compiled for.
Input
Try a sample catalogExpected result
Assets: 13 (Images 4, Vectors 2, Colors 6, Data 1)
Rendition Count: 25
CoreUI Version: 1010
Storage Version: 17
Platform: macosx 27.0Confirm that light, dark, and high-contrast variants were compiled
Select the Adaptive color. It lists four renditions, one for each appearance: NSAppearanceNameSystem (the default, or light, appearance), NSAppearanceNameDarkAqua (dark), and the two accessibility appearances used when Increase Contrast is on. If your color set only shows the System rendition, the app will use the same color in dark mode.
Now select the Appearance image. It has two 17 × 13 pixel renditions, light.png for the System appearance and dark.png for DarkAqua. The Renditions list also shows how each one is stored; in the sample, the dark image uses Deepmap2 compression.
Use the Appearance filter to show only one appearance. Any asset that disappears under a dark filter while you expected a dark variant is worth checking in Xcode's Attributes inspector, where the Appearances setting controls which slots exist.
Input
Select: AdaptiveExpected result
4 renditions
NSAppearanceNameSystem
NSAppearanceNameDarkAqua
NSAppearanceNameAccessibilitySystem
NSAppearanceNameAccessibilityDarkAquaCheck the color space before copying a brand color
The Adaptive color's System rendition is shown as color(srgb 0.2 0.5 0.75 / 1). Multiply each component by 255 and round to get the familiar hex value: 0.2 gives 51 (33), 0.5 gives 127.5, which rounds to 128 (80), and 0.75 gives 191.25, which rounds to 191 (BF). The result is #3380BF.
BrandP3 is different. It is stored as color(display-p3 0.875 0.25 0.125 / 0.875): a Display P3 color with 87.5% opacity. Display P3 covers more saturated colors than sRGB, so the same three numbers do not mean the same color in sRGB. Pasting them into an sRGB hex field produces a duller color, and converting a strongly saturated P3 color to sRGB can clip it.
When you hand a color to a web or design team, include its color space and alpha. On the web, the CSS color() function can carry a display-p3 value directly.
Input
Adaptive (System)
BrandP3Expected result
color(srgb 0.2 0.5 0.75 / 1) = #3380BF, fully opaque
color(display-p3 0.875 0.25 0.125 / 0.875) = Display P3, 87.5% opacityLook for right-to-left variants
Select RTL. It stores two 19 × 7 pixel images, left-to-right.png and right-to-left.png. Directional artwork such as back arrows needs a mirrored or separately drawn version for languages like Arabic and Hebrew. If your directional icons have only one rendition, they will point the same way in every language unless the code mirrors them.
Know what the explorer cannot show
A compiled catalog is not the original project. Xcode may convert images, pack small images into a shared atlas, and drop slots that it does not need for the target platform. You can export renditions, metadata as JSON or CSV, or a ZIP of the filtered assets, but you cannot turn Assets.car back into an editable .xcassets folder.
- Some renditions use compression or codec variants the explorer cannot decode. Their metadata and the original rendition bytes remain available, but no preview is shown.
- HEIF previews depend on your browser. Download the rendition if it does not preview.
- Vector assets compiled without raster data show metadata only. Modern Icon Composer icons may also be shown as metadata and original records rather than a flattened image.
- On a Mac with Xcode installed, xcrun assetutil --info Assets.car prints a JSON description of the same catalog. It is a useful cross-check when a result looks wrong.
Try the tools
Start with the worked example above, then try the tool with your own inputs.
References and corrections
- Apple Developer: Managing assets with asset catalogs
- Apple Developer: Supporting Dark Mode in your interface
- W3C CSS Color Module Level 4: display-p3
Found a result that differs from this guide? Send a correction with a small, non-sensitive example and your expected result.