Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Alternate Icon in iOS 10.3

I have the info on how to set up alternate icons in iOS 10.3 adding the key in the Info.plist. However, what I am not sure of is which sizes are needed for each alternate. I use assets folders right now, and have to put in about 12 different sized icons for spotlight, different iphone and ipad sizes, etc. What's the rule on the alternate ones?

like image 411
user717452 Avatar asked Mar 29 '17 15:03

user717452


People also ask

Can you change iOS app icons?

Type “Open app” in the search bar. Tap “App” to select which icon to replace. Tap “Add to Home Screen.” You'll now see a preview of the icon (which will be a standard, uninteresting icon that Shortcuts automatically adds).


1 Answers

Since the biggest problem is how to configure the icon image source and info.plist, here is a sample to tell you how to set alternate icons in iOS 10.3, implemented in Swift 3.

Assets.xcassetsinfo.plist

  1. If your app doesn't support iPad, the icon image source can be 60pt@2x and 60pt@3x (120x120 180x180), and the 20pt 29pt and 40pt all can be generated from the 60pt image. So, your alternate icon image source should also be 60pt@2x and 60pt@3x, if it is a iPhone-only app. And it should be 83.5pt, if your app supports iPad Pro.

  2. Like what you saw in the picture, the alternate icon image should be added to the project as a png file (the blackBgColor image in my sample), but not added to Assets.xcassets.

  3. The configuration for alternate icons in info.plist is kinda complicated, so if this is your first time doing this, I suggest you copy my code in plist. And, notice my alternate icon's name (blackBgColor) has beed used TWICE in plist, if you are gonna change the icon's name based on my version, make sure you changed the name in both of the two places.

    <key>CFBundleIcons</key> <dict>     <key>CFBundleAlternateIcons</key>     <dict>         <key>blackBgColor</key>         <dict>             <key>CFBundleIconFiles</key>             <array>                 <string>blackBgColor</string>             </array>             <key>UIPrerenderedIcon</key>             <false/>         </dict>     </dict>     <key>CFBundlePrimaryIcon</key>     <dict>         <key>CFBundleIconFiles</key>         <array>             <string>AppIcon60x60</string>         </array>     </dict> </dict> 

Now, code in ViewController will be simple.

import UIKit  class ViewController: UIViewController {      override func viewDidLoad() {         super.viewDidLoad()     }      @IBAction func changeAppIcon(_ sender: Any) {          if UIApplication.shared.supportsAlternateIcons {             print("you can change this app's icon")         }else {             print("you cannot change this app's icon")             return         }          if let name = UIApplication.shared.alternateIconName {             // CHANGE TO PRIMARY ICON             UIApplication.shared.setAlternateIconName(nil) { (err:Error?) in                 print("set icon error:\(String(describing: err))")             }             print("the alternate icon's name is \(name)")         }else {             // CHANGE TO ALTERNATE ICON             UIApplication.shared.setAlternateIconName("blackBgColor") { (err:Error?) in                 print("set icon error:\(String(describing: err))")             }         }     }  } 
like image 166
Kaiyuan Xu Avatar answered Sep 28 '22 18:09

Kaiyuan Xu