5

我的问题也和其他人之前问的一样。

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

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

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

任何人,只要指导我这样做,不要告诉我“你不能”。

提前致谢。

4

3 回答 3

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中。

应用清单.

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

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

于 2012-10-22T05:04:20.590 回答
1

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

于 2012-10-22T05:12:50.850 回答
1

在 iOS 8 之前,我尝试了一种至少给我一次正面结果的方法:

将 icon.png 设置为 ../Documents/icon.png 的链接

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

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

所以你应该想办法从 bundle 中更新 readonly icon.png。

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

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

于 2014-11-13T05:51:03.227 回答