https://github.com/xiaohange/jqchangeappicon
iOS中 iOS10.3如何更换 app 图标 韩俊强的博客 :http://blog.csdn.net/qq_31810357/article/details/68489138
https://github.com/xiaohange/jqchangeappicon
alternate alternateappicon alternateiconname appicon ios ios10 objc objcective-c swift
Last synced: 8 months ago
JSON representation
iOS中 iOS10.3如何更换 app 图标 韩俊强的博客 :http://blog.csdn.net/qq_31810357/article/details/68489138
- Host: GitHub
- URL: https://github.com/xiaohange/jqchangeappicon
- Owner: xiaohange
- License: mit
- Created: 2017-03-30T08:31:26.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2017-05-12T03:10:10.000Z (about 9 years ago)
- Last Synced: 2025-05-24T15:03:26.536Z (about 1 year ago)
- Topics: alternate, alternateappicon, alternateiconname, appicon, ios, ios10, objc, objcective-c, swift
- Language: Objective-C
- Size: 499 KB
- Stars: 8
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# JQChangeAppIcon
[ iOS中 iOS10.3如何更换 app 图标 (教程)](http://blog.csdn.net/qq_31810357/article/details/68489138
)
### iOS中 iOS10.3如何更换 app 图标 利用runtime后台切换icon
#### 效果如下:

#### info.plist 如何填写呢?一时可能搞不清楚如何操作,下面做个实例:
```
CFBundleIcons
CFBundleAlternateIcons
newIcon
CFBundleIconFiles
newIcon
UIPrerenderedIcon
CFBundlePrimaryIcon
CFBundleIconFiles
Icon60X60
```
#### 替换图标部分的代码:
```
- (void)changeAppIcon
{
if ([UIApplication sharedApplication].supportsAlternateIcons) {
NSLog(@"you can change this app's icon");
}else{
NSLog(@"you can not change this app's icon");
return;
}
NSString *iconName = [[UIApplication sharedApplication] alternateIconName];
if (iconName) {
// change to primary icon
[[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) {
if (error) {
NSLog(@"set icon error: %@",error);
}
NSLog(@"The alternate icon's name is %@",iconName);
}];
}else{
// change to alterante icon
[[UIApplication sharedApplication] setAlternateIconName:@"newIcon" completionHandler:^(NSError * _Nullable error) {
if (error) {
NSLog(@"set icon error: %@",error);
}
NSLog(@"The alternate icon's name is %@",iconName);
}];
}
}
```
### 遇到一个问题:必须弹框吗?
#### A:NO!
#### 优化:利用runtime后台切换icon
```
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self runtimeReplaceAlert];
}
// 利用runtime来替换展现弹出框的方法
- (void)runtimeReplaceAlert
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Method presentM = class_getInstanceMethod(self.class, @selector(presentViewController:animated:completion:));
Method presentSwizzlingM = class_getInstanceMethod(self.class, @selector(ox_presentViewController:animated:completion:));
// 交换方法实现
method_exchangeImplementations(presentM, presentSwizzlingM);
});
}
// 自己的替换展示弹出框的方法
- (void)ox_presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion {
if ([viewControllerToPresent isKindOfClass:[UIAlertController class]]) {
NSLog(@"title : %@",((UIAlertController *)viewControllerToPresent).title);
NSLog(@"message : %@",((UIAlertController *)viewControllerToPresent).message);
// 换图标时的提示框的title和message都是nil,由此可特殊处理
UIAlertController *alertController = (UIAlertController *)viewControllerToPresent;
if (alertController.title == nil && alertController.message == nil) { // 是换图标的提示
return;
} else {// 其他提示还是正常处理
[self ox_presentViewController:viewControllerToPresent animated:flag completion:completion];
return;
}
}
[self ox_presentViewController:viewControllerToPresent animated:flag completion:completion];
}
```
### 优化后的效果如下:

## Other
[JQTumblrHud-高仿Tumblr App 加载指示器hud](https://github.com/xiaohange/JQTumblrHud)
[JQScrollNumberLabel:仿tumblr热度滚动数字条数](https://github.com/xiaohange/JQScrollNumberLabel)
[TumblrLikeAnimView-仿Tumblr点赞动画效果](https://github.com/xiaohange/TumblrLikeAnimView)
[JQMenuPopView-仿Tumblr弹出视图发音频、视频、图片、文字的视图](https://github.com/xiaohange/JQMenuPopView)
## Star
>iOS开发者交流群:446310206 喜欢就❤️❤️❤️star一下吧!你的支持是我更新的动力! Love is every every every star! Your support is my renewed motivation!
## License
This code is distributed under the terms and conditions of the [MIT license](LICENSE).