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,511評論 0 7
  • 轉至元數據結尾創建: 董瀟偉,最新修改于: 十二月 23, 2016 轉至元數據起始第一章:isa和Class一....
    40c0490e5268閱讀 1,762評論 0 9
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協議。它實...
    香橙柚子閱讀 24,065評論 8 183
  • 前兩天搬家,收拾了很多不用的雜物和衣服。 有些東西要扔的時候是舍不得的,放在身邊久了,連一張紙都覺得和自己是有感情...
    周問漁閱讀 208評論 0 0
  • 大概總結了最近面試時候遇到的Spring的問題 1Spring的兩個特點。Aop如何實現面向切面編程? 2Spri...
    一年兩年三年閱讀 183評論 0 0