dynamic图标更改为iPhone
我的问题也是别人之前询问的。
我发现,一旦你设置应用程序的图标,我们不能dynamic地改变应用程序图标 。 是的,我同意了。 如果是这样,我们使用苹果dynamic图标不接受。 但是我接受苹果有一些规则和规定。
所以这是我的问题:如何dynamic地更改应用程序图标。 我不打算把我的应用程序在AppStore中。
大家都说这是不可能的。 我不担心苹果规则。 但是,你担心答案。
任何人,只要引导我这样做,不要告诉我'你不能'。
提前致谢。
一种方法是以编程方式重写icon.png
文件。 您需要search允许访问您的App Resources文件系统的私有API
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>
实现这样的代码:
目标C:
[[UIApplication sharedApplication] setAlternateIconName:@"alternate_icon_name" completionHandler:^(NSError * _Nullable error) { NSLog(@"Error..."); }];
Swift 3:
if UIApplication.shared.supportsAlternateIcons { UIApplication.shared.setAlternateIconName("alternate_icon_name", completionHandler: { (error) in print(error ?? "") }) }
在iOS 10.3之前
您不能dynamic更改图标文件,因为图标文件名称存储在应用程序plist上 。
。
您不能dynamic更改应用程序plist,因为它存储在只读的应用程序包中。
所以你的要求是不可能的。
在iOS 8之前,我尝试了一个方法,至less给我一个积极的结果:
set icon.png作为链接到../Documents/icon.png
但是您需要强制要求Springboard重新下载已安装应用程序的图标(导致Springboardcaching)
由于iOS 8这种方式不起作用,导致Documents文件夹被移动到dynamicpath。
所以你应该想办法从bundle中更新readonly icon.png。
对于安装到/ Applications /(通过Cydia)的应用程序 – 可以这样做。
对于通过adhoc安装的应用程序 – 无法更新readonly icon.png(据我所知)