背景:
在iOS10.3之前如果想替換APP的圖標,必須通過Assets.xcassets添加AppIcon,而且是唯一指定的躬络,不能夠修改。
iOS10.3之后搭儒,系統(tǒng)提供了修改AppIcon的API穷当,可以通過內(nèi)置幾個不同的icon,然后通過代碼設(shè)置不同的AppIcon淹禾。
核心API:
// Pass `nil` to use the primary application icon. The completion handler will be invoked asynchronously on an arbitrary background queue; be sure to dispatch back to the main queue before doing any further UI work.
//如果name設(shè)置為nil馁菜,會自動讀取主app icon
- (void)setAlternateIconName:(nullable NSString *)alternateIconName completionHandler:(nullable void (^)(NSError *_Nullable error))completionHandler NS_EXTENSION_UNAVAILABLE("Extensions may not have alternate icons") API_AVAILABLE(ios(10.3), tvos(10.2));
官方文檔:
1790503-ee6ee4b631758c62.png
info.plist具體配置:
E7A2F9BA-73EE-414A-9CC1-F67832B4882B.png
3F612363-EF6C-4F96-BA38-AA672E3D245D.png
Primary Icon 字段設(shè)置為AppIcon(就是asset里面的名字),如果設(shè)置appicon的API的name參數(shù)設(shè)置為nil铃岔,會自動讀取Primary Icon對應的圖片汪疮,
Test1是用來替換原生圖標的圖片資源,文件名需要和info.plist中保持一致德撬,需要注意的是 圖片資源需要放在外邊铲咨,不能放在asset資源里面躲胳。
具體實現(xiàn)代碼
- (IBAction)testClick:(id)sender {
[[UIApplication sharedApplication] setAlternateIconName:@"Test1" completionHandler:^(NSError * _Nullable error) {
NSLog(@"error = %@",error.localizedDescription);
}];
}
- (IBAction)test2Click:(id)sender {
[[UIApplication sharedApplication] setAlternateIconName:@"Test2" completionHandler:^(NSError * _Nullable error) {
NSLog(@"error = %@",error.localizedDescription);
}];
}
- (IBAction)emptyClick:(id)sender {
[[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) {
NSLog(@"error = %@",error.localizedDescription);
}];
}
實現(xiàn)效果:
修改前:
Simulator Screen Shot 2017年3月31日 下午5.06.35.png
點擊按鈕修改:
Simulator Screen Shot 2017年3月31日 下午5.06.48.png
修改后:
Simulator Screen Shot 2017年3月31日 下午5.07.03.png