iOS 应用内更换AppIcon

1、简介

苹果爸爸在iOS 10.3的API来开放了更换icon的方法,客观来说,实用性并不硬霸。

图片.png

核心API是下面这个方法:
Objc

- (void)setAlternateIconName:(NSString *)alternateIconName 
           completionHandler:(void (^)(NSError *error))completionHandler

Swift 3.0

func setAlternateIconName(_ alternateIconName: String?, 
        completionHandler: ((Error?) -> Void)? = nil)

方法一目了然,设置替换图标名称 & 回调
官方API :传送门
按照官方文档的解释,我们需要在info.plist里来一点操作,具体的key代表了什么,建议大家没事就去 官方文档 cmd+F+keyword搜出来啃一啃。

图片.png

2、使用

开干之前,先来一下英文考察:
Alternate交替的、轮流的
Primary主要的;最早的,原始的

  • 在老地方放上初始化icon 在这里按照API叫 Primary Icon更好

    图片.png

  • 检查Primary Icon 命名,尽量保持规则,后面有用0.0。

图片.png
图片.png
  • 导入Alternate Icon,命名尽量规则。Mark:资源直接放到Bundle,目前放到Assets并不能愉快的玩耍
图片.png
  • Info.plist中添加响应key-value,Pay attention here,budy
  • Open as source code
<plist version="1.0">
<dict>
  <key>CFBundleIcons</key>
  <dict>
      <key>CFBundleAlternateIcons</key>
      <dict>
          <key>UIPrerenderedIcon</key>
          <false/>
          <key>icontwo</key>
          <dict>
              <key>CFBundleIconFiles</key>
              <array>
                  <string>icontwo</string>
              </array>
          </dict>
      </dict>
      <key>CFBundlePrimaryIcon</key>
      <dict>
          <key>CFBundleIconFiles</key>
          <array>
              <string>Icon60x60</string>
          </array>
      </dict>
  </dict>

  • Focus on picture
图片.png
  • 调用最上头简介里的API,查看效果

Objc

- (void)changeIcon{
    if ([UIApplication sharedApplication].supportsAlternateIcons) {
        NSLog(@"this app can change app icon");
    }else{
        NSLog(@"sorry,this app can not change app icon");
        return;
    }
    NSString *iconName = [[UIApplication sharedApplication] alternateIconName];
    if (iconName) {
        [[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) {
            if (error) {
                NSLog(@"set icon error: %@",error);
            }
            NSLog(@"current icon's name -> %@",iconName);
        }];
    }else{
        [[UIApplication sharedApplication] setAlternateIconName:@"icontwo" completionHandler:^(NSError * _Nullable error) {
            if (error) {
                NSLog(@"set icon error: %@",error);
            }
            NSLog(@"current icon's name -> %@",iconName);
        }];
    }
}

Swift3.0

    func changeIcon() {
        if UIApplication.shared.supportsAlternateIcons {
            print("this app can change app icon")
        }
        else {
            print("sorry,this app can not change app icon")
            return
        }
        let iconName: String = UIApplication.shared.alternateIconName!
        if iconName != "" {
            UIApplication.shared.setAlternateIconName(nil, completionHandler: {(_ error: Error?) -> Void in
                if error != nil {
                    print("set icon error: \(String(describing: error))")
                }
                print("current icon's name -> \(iconName)")
            })
        }
        else {
            UIApplication.shared.setAlternateIconName("icontwo", completionHandler: {(_ error: Error?) -> Void in
                if error != nil {
                    print("set icon error: \(String(describing: error))")
                }
                print("current icon's name -> \(iconName)")
            })
        }
    }
  • Game over
new .gif

终于找到了一个正常的GIF制作工具,Demo传送门,感谢翻阅。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 改变iOS app的icon 官方 iOS10.3新增了可以让开发者去更改app的icon,接下来看看怎么更改。官...
    我不是掌柜阅读 3,517评论 0 7
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,776评论 0 9
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一种新的协议。它实...
    香橙柚子阅读 24,113评论 8 183
  • 前两天搬家,收拾了很多不用的杂物和衣服。 有些东西要扔的时候是舍不得的,放在身边久了,连一张纸都觉得和自己是有感情...
    周问渔阅读 212评论 0 0
  • 大概总结了最近面试时候遇到的Spring的问题 1Spring的两个特点。Aop如何实现面向切面编程? 2Spri...
    一年两年三年阅读 183评论 0 0