React Native iOS端动态切换App图标显示空白白色图标问题求助
我之前在做RN项目动态换图标时也踩过iOS这个空白图标的坑,给你列几个核心的排查和解决点,你一个个试下:
检查图标集的完整性与命名规范
iOS对App图标的尺寸和命名要求特别严格,每个AppIcon.appiconset(包括你的备选图标集)里,所有要求的尺寸图标都必须齐全,而且文件名要和Xcode默认的完全匹配(比如Icon-60@2x.png、Icon-60@3x.png这些)。你可以打开图标集里的Contents.json文件,逐个核对每个size和idiom对应的filename是否存在,有没有缺失或者文件名打错的情况。核对Info.plist的配置细节
一定要确保CFBundleAlternateIcons里的每个图标key,和你对应的图标集文件夹名称完全一致(包括大小写!iOS是大小写敏感的)。举个正确配置的例子:<key>CFBundleIcons</key> <dict> <key>CFBundlePrimaryIcon</key> <dict> <key>CFBundleIconFiles</key> <array> <string>AppIcon</string> </array> <key>UIPrerenderedIcon</key> <false/> </dict> <key>CFBundleAlternateIcons</key> <dict> <key>HolidayIcon</key> <!-- 必须和你的备选图标集文件夹名一模一样 --> <dict> <key>CFBundleIconFiles</key> <array> <string>HolidayIcon</string> </array> <key>UIPrerenderedIcon</key> <false/> </dict> </dict> </dict>另外,别漏了
UIPrerenderedIcon这个键,设置为false让系统处理圆角和光泽效果。确认图标集已正确加入项目资源
不是把图标集文件夹随便扔到项目目录就行,要在Xcode里把图标集文件夹拖拽到项目中,选择「Copy items if needed」,然后去Target的Build Phases -> Copy Bundle Resources里检查,确保这些图标集文件夹在列表里。如果没在,手动点「+」添加进去。检查react-native-change-icon的调用参数
调用changeIcon方法时,传入的iconName必须和Info.plist里CFBundleAlternateIcons下的key完全一致,比如你Info.plist里写的是SportIcon,调用时就必须传{ iconName: 'SportIcon' },差一个大小写或者错字都会导致图标加载失败。清理缓存后重新构建
Xcode的缓存经常搞事情,先按Command+Shift+K清理Build Folder,然后删掉模拟器/真机上的App,再重新Run项目——别用热重载,一定要完全冷启动安装。验证图标本身的合规性
确保你的图标是PNG格式,不要用JPG或者其他格式;另外,iOS 10+不需要自己给图标加圆角,系统会自动处理,如果你自己加了圆角,可能会显示异常;还有,别不小心用了全白的图标(虽然你说默认空白,但也可以排查下)。
要是试完这些还是不行,你可以把Info.plist里的图标配置部分,还有图标集的Contents.json内容贴出来,这样更容易定位问题~
内容来源于stack exchange

