能否通过编程更改应用程序图标?

13

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


2
自从iOS 10.3版本以后,这是可能的!请查看以下答案:https://dev59.com/rFgQ5IYBdhLWcg3w9Yvk - KlimczakM
有一个适用于iOS 10.3+的解决方案。https://dev59.com/q2kw5IYBdhLWcg3wPIB7#41849979 - ymutlu
8个回答

16

这种情况有一个新的解决方案。

你可以使用

setAlternateIconName(_:completionHandler:)

iOS 10.3已经发布,附带xcode 8.3。

10.3+

更新:

用法相当简单,关键是找到 plist 的使用方法,并注意不能从 xcassets 加载资源(至少对我来说不起作用)。您需要将图标文件添加到项目中,优选180x180像素的高质量图像。

您需要使用“Icon files (iOS 5)”选项,新的 Icon files 不起作用。

最后一件事,在按钮点击时更改图标会弹出一个警告窗口,显示“您已更改“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>

尝试扩展你的回答。你没有解释这是UIApplication上的一个方法,也没有说明如何设置plist或任何其他信息。仅仅说“调用这个方法”对任何人都没有用。 - dlbuckley
我想与大家分享这个令人兴奋的消息。一旦我完成了,我会分享一个如何做的教程。很遗憾这对你来说还不够。 - ymutlu
这是令人兴奋的消息,你说得对。但是你的回答并没有完全说明如何使用这个新功能,它的影响和实现细节。我投了反对票,因为目前这个回答只是试图获取投票而没有帮助任何人。如果你修改你的回答来充分解释这个功能,那么我会很乐意给它点赞 :) - dlbuckley

11

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


这是否也适用于内部应用程序,而不仅限于通过公共App Store分发的应用程序? plist是不可变的吗? - james_fuller

4
不,绝对不可以。应用程序包的那个部分是只读的,而且还进行了代码签名。
关于TapOne应用的答案则完全不同。它创建了针对网站或电话号码的“网页剪辑”。例如,要为您的网站创建iPhone图标,您需要将以下内容添加到您的网页头中:
<link rel="apple-touch-icon" href="/your-custom-icon.png"/>

这里有更多信息:https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html TapOne和Web Clip不能在应用程序包内以编程方式更改图标。

2
更新:自iOS 10.3以来,您可以通过在info.plist中定义替代图标来更新应用程序图标。
更多信息请参见Apple Docs

1

0

恐怕不行,我很确定应用程序图标不能有条件地更改。


0

我认为没有越狱的手机是不可能实现的。应用程序图标包含在应用程序包中,您无法对其进行写入。


-1

我不同意以上所有的答案。 请尝试使用应用程序"OneTap",它将允许您制作自己新应用程序的图标。 OneTap应用程序在Itune上是免费的。


3
我相信许多人都很感兴趣是否有可能做到这一点。请留下一个有效的网址链接或解决方案的源代码。 - Vincent
1
不可能! OneTap无法更改自己的AppIcon。它只是打开Safari并显示所选图像,用户应该按保存到主屏幕。之后,您可以点击这个新的应用程序图标,它将打开Safari并将您重定向到OneTap应用程序。因此,通过编程方式更改应用程序图标是不可能的。 - AlexPrinceton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接