我可以通过编程方式更改app图标吗?

Hou*_*nis 12 icons ios

我有两个内置的应用程序图标(免费和高级),是否可以在应用程序内购买成功完成后以编程方式将免费图标替换为高级图标?

Cyr*_*lle 13

不,图标是在应用程序包中指定的,您不能更改.如果您更改它,您的应用程序签名将变为无效(不是相同的校验和),因此您的应用程序将不再运行.


ymu*_*tlu 10

针对这种情况有一种新的解决方案.

您可以使用

setAlternateIconName(_:completionHandler:)
Run Code Online (Sandbox Code Playgroud)

iOS 10.3与xcode 8.3一起出现.

10.3 +

更新:

用法很简单,关键是找出plist的使用情况,并注意你不能从xcassets加载资产(至少对我没用).您需要将图标文件添加到项目中,并选择180x180图像以获得质量.

您需要使用"图标文件(iOS 5)",新的图标文件不起作用.

最后一件事,当您更改按钮上的图标时,它会弹出一个警告窗口,显示"您已更改"IcoTest"的图标."

在此输入图像描述

//ViewController.swift
@IBAction func ico1Click(_ sender: Any) {
    if UIApplication.shared.supportsAlternateIcons{
        UIApplication.shared.setAlternateIconName("Icon2", completionHandler: { (error) in
            print(error ?? "")
        })
    }else{
        print("NO NO")
    }
}

//Info.plist
<key>CFBundleIcons</key>
<dict>
    <key>CFBundleAlternateIcons</key>
    <dict>
        <key>Icon1</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>alternater1_180x180</string>
            </array>
            <key>UIPrerenderedIcon</key>
            <false/>
        </dict>
        <key>Icon2</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>alternater2_180x180</string>
            </array>
        </dict>
    </dict>
</dict>
Run Code Online (Sandbox Code Playgroud)