iPhone的动态图标更改

时间:2012-10-22 04:33:10

标签: iphone ios ipad icons

我的问题也与其他人之前提出的问题相同。

我发现,一旦为应用程序设置了Icon,我们就无法动态更改应用程序图标。是的,我同意了。如果是这样我们使用动态图标Apple不接受。但我接受苹果有一些规则和规定。

以下是我的问题:如何动态更改应用图标。我不打算将我的应用程序放在AppStore中。

每个人都在说这是不可能的。我并不担心苹果规则。但是,担心答案。

任何人,请指导我这样做,不要告诉我'你不能'。

先谢谢。

3 个答案:

答案 0 :(得分:9)

iOS 10.3 +

在iOS 10.3中引入了一种名为setAlternateIconName:的方法,您可以通过该方法更改应用程序的图标,但这些图标应该是预定义的。这意味着图标应添加到应用程序的包中,并在info.plist

中引用

实施例

典型的info.plist如下所示:

<key>CFBundleIcons</key>
<dict>
    <key>CFBundleAlternateIcons</key>
    <dict>
        <key>alternate_icon_name</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>alternate_icon_file</string>
            </array>
            <key>UIPrerenderedIcon</key>
            <false/>
        </dict>
        <key>CFBundlePrimaryIcon</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>default_icon_file</string>
            </array>
            <key>UIPrerenderedIcon</key>
            <false/>
        </dict>
    </dict>
</dict>

实施如下代码:

目标C:

[[UIApplication sharedApplication] setAlternateIconName:@"alternate_icon_name" completionHandler:^(NSError * _Nullable error) {
    NSLog(@"Error...");
}];

斯威夫特3:

if UIApplication.shared.supportsAlternateIcons
{
    UIApplication.shared.setAlternateIconName("alternate_icon_name", completionHandler: { (error) in
        print(error ?? "")
    })
}

在iOS 10.3之前

您无法动态更改图标文件,因为图标文件名存储在应用程序plist 上。

Application plist

您无法动态更改应用程序plist,因为它存储在 readonly 的应用程序包中。

所以你的要求是不可能的。

答案 1 :(得分:1)

一种方法是以编程方式重写icon.png文件。您需要搜索允许访问App Resources文件系统的私有API

答案 2 :(得分:1)

在iOS 8之前,我试过一种方法,至少给我一次积极的结果:

将icon.png设为链接至../ Documents / icon.png

但是你需要强制要求Springboard重新下载已安装应用程序的图标(导致Springboard缓存它们)

由于iOS 8这种方式不起作用,因为Documents文件夹被移动到动态路径。

所以你应该找到从bundle更新readonly icon.png的方法。

对于安装到/ Applications /(通过Cydia)的应用程序 - 可以这样做。

对于通过adhoc安装的应用程序 - 无法更新readonly icon.png(据我所知)