iOS备用图标没有改变

Posted

技术标签:

【中文标题】iOS备用图标没有改变【英文标题】:iOS Alternate Icon not changing 【发布时间】:2018-07-01 01:34:40 【问题描述】:

我遵循了一些关于在 ios 中设置替代图标的教程,但我无法让它正常工作。我的 Info.plist 中的重要部分如下所示:

<key>CFBundleIcons</key>
<dict>
    <key>CFBundlePrimaryIcon</key>
    <dict>
        <key>CFBundleIconFiles</key>
        <array>
            <string>default</string>
        </array>
        <key>UIPrerenderedIcon</key>
        <false/>
    </dict>
    <key>CFBundleAlternateIcons</key>
    <dict>
        <key>six</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>six</string>
            </array>
            <key>UIPrerenderedIcon</key>
            <false/>
        </dict>
        <key>crazy</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>crazy</string>
            </array>
            <key>UIPrerenderedIcon</key>
            <false/>
        </dict>
    </dict>
</dict>

还有视图控制器的代码,很简单:

class ViewController: UIViewController 

@IBOutlet weak var segment: UISegmentedControl!

override func viewDidLoad() 
    super.viewDidLoad()
    segment.addTarget(self, action: #selector(segmentChanged(_:)), for: .valueChanged)
    // Do any additional setup after loading the view, typically from a nib.


@objc func segmentChanged(_ sender: UISegmentedControl) 
    var icon: String?
    switch sender.selectedSegmentIndex 
    case 1:
        icon = "six"
    case 2:
        icon = "crazy"
    default:
        icon = nil
    
    changeIcon(icon)


func changeIcon(_ icon: String?) 
    if UIApplication.shared.supportsAlternateIcons 
        UIApplication.shared.setAlternateIconName(icon, completionHandler:  (error) in
            print("\(error?.localizedDescription)")
        )
    
  

当方法被调用时,我会提示说

您已更改“应用程序”的图标。

但是显示的图标是默认的 我的图标文件被命名为:six@2x.png, Six@3x.png, crazy@2x.png, crazy@3x.png, default@2x.png, default@3x.png 为什么它没有改变?将图像文件放入项目中是否有任何特殊步骤?我已经把我的放在“res”文件夹中了

项目: https://www.dropbox.com/s/nboslz2s6gagvwl/AltIcon.zip?dl=0

【问题讨论】:

请进一步澄清您的问题,您到底想要什么。 查看此链接:medium.com/@same7mabrouk/… UIApplication 上有一个名为 alternativeIconName 的属性,对于调试,在尝试更改之前打印名称会很有用。查看是否包含任何路径信息。 它打印出正确的图标名称,但不会改变。 我下载了你的项目我发现了一堆错误。您的图像不是 png 文件。如果您将它们重新保存为 png 它就可以工作。 【参考方案1】:

研究了几分钟,终于找到了我的错。如果您的实现看起来很完美并且没有理由不工作,那么重点是:

在我的例子中,我在我创建的视图控制器中的viewDidLoad() 方法中触发了UIApplication.shared.setAlternateIconName("ICON_NAME"),就在触发启动屏幕之后,称为AfterSplashViewController

这个视图控制器就像一个路由器,看起来和启动屏幕一样,也有几个业务逻辑,比如到应用程序或登录屏幕的路由等。

长话短说,在调用setAlternateIconName() 方法后,系统会向用户显示一个弹出窗口,以默认文本通知应用程序图标更改。在您的情况下,如果您的逻辑没有时间通过​​原因显示此弹出窗口,则此方法将不起作用,您的应用程序图标也不会更改。

确保在您的代码库中触发“setAlternateIconName()”方法,就在正确的位置。

编码愉快。

【讨论】:

【参考方案2】:

原来是我用来缩小图像的软件有问题,它没有正确保存 PNG 文件。

【讨论】:

什么是“不正确”?你做了什么改变来解决它? 我在 Mac 上使用Preview 应用程序再次保存了它们,之后它运行良好 这有帮助!我遇到了与 OP 完全相同的问题。我的图标文件保存为 JPG。一旦我将它们保存为 PNG,图标就会正确更改。

以上是关于iOS备用图标没有改变的主要内容,如果未能解决你的问题,请参考以下文章

iOS 10.3 中的备用图标

无法在 iOS 11 中设置备用应用程序图标

iOS 10.3 中的备用图标:避免图标更改的通知对话框

是否允许让备用应用程序图标变为动态?

为啥拖放 ReactJS 时光标图标没有改变?

onPressed上的图标没有改变