iOS更改app的icons

最近公司做一个换皮肤的功能,简单的说就是动态替换项目中的图片、导航栏、颜色什么的;还涉及到替换app的icons。经过调研发现,在iOS10.3版本以前是没有办法替换app的icons(系统不支持也没办法,还是做平台系统的牛叉),iOS10.3版本提供了对应的API:


经过尝试后替换APP的icons需要以下几步:

1.配置Info.plist文件:


大概意思是需要设置CFBundleAlternateIcons,如果想显示最初的icon则设置成nil。具体配置如下:


Primary Icon为默认的icon,只需要将Icon files目录下面的Item0设置成实际项目中icon名称。下面主要介绍CFBundleAlternateIcons设置,如上图所示主要是两个红线画出的地方,这个名称必须和项目中设置的图片名称一样,其他没有什么需要注意的了。下面贴上元数据形式:

<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>APPiconNew60</key>
			<dict>
				<key>UIPrerenderedIcon</key>
				<false/>
				<key>CFBundleIconFiles</key>
				<array>
					<string>APPiconNew60</string>
				</array>
			</dict>
		</dict>
	</dict>

2.设置好Info.plist后需要在代码中替换。API中明确指出在使用setAlternateIconName:completionHandler:方法之前需要使用supportsAlternateIcons判断是否支持。废话不说上代码:

dispatch_async(dispatch_get_main_queue(), ^{
        if(![UIApplication sharedApplication].supportsAlternateIcons){
            return;
        }
        
        NSString *iconName = [[UIApplication sharedApplication] alternateIconName];
        if(iconName){
            [[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) {
                
            }];
        }else{
            [[UIApplication sharedApplication] setAlternateIconName:@"APPiconNew60" completionHandler:^(NSError * _Nullable error) {
                NSLog(@"---error----:%@",error.description);
            }];
        }
        
    });

当然替换必须在主线程中进行。

替换成功后界面弹出提示,下面是项目中替换成功后弹出框:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值