iOS15 切换上架App图标的最新方案
1. 前言
Xcode13以及iOS15发布之前,Apple其实已经支持在应用内切换图标了,通过将不同的ICON图标打到包内,并手动配置,然后通过业务代码修改ICON。当时的应用场景主要是提供给用户主动切换不同的图标,更换成自己喜欢的图标风格。
iOS15之后,苹果支持将上线AppStore的包进行图标切换,目的是根据不同的图标判断用户转化。因此在Xcode13之后,多ICON的设置方法由之前的手动配置,改成了更加方便的配置方式。
因为文章在iOS15之前就整理好了,新的方案出来后,肯定是新的方案的应用场景更广,也更方便开发者操作。因此,以下我将分别介绍两种方案,但还是建议开发者使用最新的方案。
2.旧方案:手动通过添加Info.plist字段来配置
代码语言:javascript复制此方案为iOS15之前的旧方案,适用于“不需要通过App Store切换图标”的场景,Xcode13以下的版本可以这样使用。
1.Info.plist添加如下配置:
代码语言:javascript复制<key>CFBundleIcons</key>
<dict>
<key>CFBundleAlternateIcons</key>
<dict>
<key>DemoIcon</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>DemoIcon-20</string>
<string>DemoIcon-29</string>
<string>DemoIcon-40</string>
<string>DemoIcon-60</string>
</array>
<key>UIPrerenderedIcon</key>
<false/>
</dict>
</dict>
</dict>
<key>CFBundleIcons~ipad</key>
<dict>
<key>CFBundleAlternateIcons</key>
<dict>
<key>DemoIcon</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>DemoIcon-29</string>
<string>DemoIcon-40</string>
<string>DemoIcon-60</string>
<string>DemoIcon-76</string>
<string>DemoIcon-83.5</string>
</array>
<key>UIPrerenderedIcon</key>
<false/>
</dict>
</dict>
</dict>
- 如果要配置多套ICON,那么需要添加不同名字、同规模尺寸的图片,然后在Info.plist的CFBundleAlternateIcons内添加新的一组数据。
- Info.plist添加了iPad和iPhone的配置。如果只需要适配iPhone/iPad,那么只需要配置iPhone/iPad的即可。
2.在项目内添加对应尺寸的图片(添加图片,打包后,图片应该在app的根目录下):
添加的图片要求跟默认的ICON一样,不能有透明底(圆角),不能有alpha通道。
3.(代码内测试)测试更换ICON功能:
代码语言:javascript复制[[UIApplication sharedApplication] setAlternateIconName:@"DemoIcon" completionHandler:^(NSError * _Nullable error) {
if (error != nil) {
NSLog(@"set alternative icon error:%@", error.localizedDescription);
}
}];
如果弹出更换成功的提示,说明更换成功;反之则报错。
如果需要将ICON恢复到默认的,那么调用如下代码:
代码语言:javascript复制[[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:nil];
PS:
1.注意名称。图片的名称需要跟Info.plist里的CFBundleIconFiles配置的名称匹配;setAlternateIconName:的参数,需要跟Info.plist里的CFBundleAlternateIcons配置的key相同。
3. 新方案:在assets内新增图标项目
代码语言:javascript复制此方案适用于Xcode13及其后续版本,低于这个版本无法这样配置。
1. 向Assets.xcassets内添加一组新的ICON:
如上图所示添加一组新的ICON,并将ICON改一个名字(方便后面使用)。
2.在项目设置里的允许使用多套ICON:
选择项目->Build Setting->搜索Include all app icon assets,然后改为YES:
这样就已经配置完了。
本地测试ICON跟 旧方法 相同:
代码语言:javascript复制[[UIApplication sharedApplication] setAlternateIconName:@"Test" completionHandler:^(NSError * _Nullable error) {
if (error != nil) {
NSLog(@"set alternative icon error:%@", error.localizedDescription);
}
}];
其中参数为新增的ICON组的名称(截图里的为Test)。如果弹出更换成功的提示,说明更换成功;反之则报错。
而这个实现的原理其实就是将方法一里手动设置Info.plist和添加图标文件,改为直接读取.xcassets里的ICON组,并因为设置了Include all app icon assets
为YES而自动添加配置到Info.plist内。解开打包好的ipa或者打开.app可以看到,Test60x60@2x.png、Test60x60@3.png已经在包体的根目录下,并且Info.plist内有了CFBundleAlternateIcons/Test的字段:
4. 苹果后台切换ICON
添加多套ICON后,只有过审后的包才能在苹果后台切换ICON。因为苹果也会审核备选ICON是否满足审核条例。过审后,我们可以再下面页面中的 产品优化页 中进行操作:
具体的测试方案,可以参考苹果官方文档:配置处理方案 - App Store Connect 帮助[1]
保留的问题:因为当前自己的App还没有上架这个功能,所以不知道这个切换图标的功能,是不是只支持iOS15版本系统上的AppStore才能看到切换的效果。
参考文档:
【1】Implementing alternate icons in iOS[2]
【2】Xcode 配置多套 App 图标的方法 --- AppStore 图标 A/B Test 实践[3]
参考资料
[1]配置处理方案 - App Store Connect 帮助: https://help.apple.com/app-store-connect/#/devb53f123122
[2]Implementing alternate icons in iOS: https://nemecek.be/blog/114/implementing-alternate-icons-in-ios
[3]Xcode 配置多套 App 图标的方法 --- AppStore 图标 A/B Test 实践: https://juejin.cn/post/7044748618078617613