iPhone的动态图标更改

Man*_*dan 5 iphone icons ipad ios

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

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

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

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

任何人,只是引导我这样做,不要告诉我'你不能'.

提前致谢.

Mid*_* MP 9

iOS 10.3+

有一个名为setAlternateIconName的方法:在iOS 10.3中引入,通过它可以更改应用程序的图标,但这些图标应该是预定义的.这意味着应该将图标添加到应用程序的包中并在中引用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>
Run Code Online (Sandbox Code Playgroud)

实现代码如:

目标C:

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

斯威夫特3:

if UIApplication.shared.supportsAlternateIcons
{
    UIApplication.shared.setAlternateIconName("alternate_icon_name", completionHandler: { (error) in
        print(error ?? "")
    })
}
Run Code Online (Sandbox Code Playgroud)

在iOS 10.3之前

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

应用plist.

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

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


tGi*_*ani 1

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

  • 从技术上来说它应该是这样,但是 iOS 可能实际上是第一次缓存图标,因此不会每次都从您的应用程序资源中读取图标。您可能需要弄清楚 iOS 如何处理这些图标。 (2认同)