I've created a new iOS project using Xcode 26 beta 2. This project will have a deployment target of iOS 26.0. I've added 3 glass .icon
files to the project, AppIcon.icon, AppIcon2.icon, and AppIcon3.icon. The "App Icon" setting on the General tab has been set to "AppIcon". I've enabled the "Include all app icon assets" option (though that doesn't seem to affect the issue).
If I build and run the app on an iOS 26 simulator, the app's icon is the glass icon from AppIcon.icon. But when my code tries something like:
UIApplication.shared.setAlternateIconName("AppIcon2")
nothing happens. The icon doesn't change. There is no alert telling the user that the icon has been changed.
I can't find any setting in Xcode or the project that lets me specify the alternate icons.
With an iOS 18 or earlier app, the names of the alternate icons are automatically determined from any iOS App Icon entries in any Assets files. But you don't put the new glass .icon
files in any assets.
Is this missing functionality in Xcode 26 or am I missing something? How do I make this work?
This may well be functionality not yet added to Xcode 26 as of beta 2. Time will tell if Apple adds direct support for this in an upcoming beta.
In the meantime there a solution to make this work now.
Edit the Info.plist file in the project (or make the same change on the Info tab of your target). When you build your app, Xcode will merge these partial icon entries with the generated entries.
Here's a screenshot of the added entries to the Info.plist file:
The key "Icon files (iOS 5)" has the raw key CFBundleIcons
. Under that you need the key CFBundleAlternateIcons
. This in turn needs an entry for each of your alternate app icons as shown in the screenshot.
The raw XML of this extra entry looks like this:
<key>CFBundleIcons</key>
<dict>
<key>CFBundleAlternateIcons</key>
<dict>
<key>AppIcon3</key>
<dict>
<key>CFBundleIconName</key>
<string>AppIcon3</string>
</dict>
<key>AppIcon2</key>
<dict>
<key>CFBundleIconName</key>
<string>AppIcon2</string>
</dict>
</dict>
</dict>
Of course you need to replace "AppIcon2" and "AppIcon3" (both places each) with your actual app icon names.
This now works when the app is run on an iPhone. In order for it to work on iPads, you need to duplicate these entries. The copy should have the key CFBundleIcons~ipad
(note the proper case and tilde). Without this duplicate set for the iPad, alternate icons won't work when run on an iPad. Get all of your alternate icons working on an iPhone. Then you can simply copy and paste the CFBundleIcons
entry and rename the copied key to from CFBundleIcons - 2
to CFBundleIcons~ipad
.
<key>CFBundleIcons~ipad</key>
<dict>
<key>CFBundleAlternateIcons</key>
<dict>
<key>AppIcon3</key>
<dict>
<key>CFBundleIconName</key>
<string>AppIcon3</string>
</dict>
<key>AppIcon2</key>
<dict>
<key>CFBundleIconName</key>
<string>AppIcon2</string>
</dict>
</dict>
</dict>
With this solution your app will support alternate app icon functionality with glass icons in an app that only supports iOS 26 or later.
Note that an attempt to add dummy app icon assets to simulate what you would have in an app supporting iOS 18 or earlier does not work. It seems Xcode 26 ignores any old style app icon assets when the deployment target is set to iOS 26.0 or later.