美文网首页
iOS 动态更换App的Icon图标

iOS 动态更换App的Icon图标

作者: PersonChen_QJ | 来源:发表于2019-03-06 14:20 被阅读0次

一、前沿

  • 在iOS 10.3苹果添加了更换图标的功能,通过这个功能,我们可以在适当的时候采取特定的方式为我们的App更换图标。

二、优点

  • 逢年过节想换个应景的App图标,不用在进行发版了。
  • 公司有个重大活动需要更换图标,不用担心活动前不能成功发版上线了。

三、缺陷

  • 更换的图标,我们需要预置在项目中,包会相对应的变大
  • 替换图标这个功能,一定要经过用户同意(虽然有跳过这一步的方法,但是不建议使用)。

四、步骤

    1. 准备至少2套图标(2x和3x),导入到项目中,不能放到.xcassets中。
    1. 修改info.plist文件


      动态更换icon.png
1). CFBundleIcons: 一个字典,包含所有AppIcon信息,即上图的Icon files(iOS 5)
2). CFBundlePrimaryIcon:如果已经在Assets.xcassets中设置了AppIcon,那么CFBundlePrimaryIcon中
的配置会被忽略,Assets.xcassets的AppIcon将会自动配置到CFBundlePrimaryIcon中。
3). CFBundleAlternateIcons: 一个数组,负责配置可供替换的icon信息
4). UIPrerenderedIcon: 是否已经预渲染,如果不设置该项或者设为NO。系统会自动为icon进行渲染增
加光泽

五、查看系统ipa接口

// If false, alternate icons are not supported for the current process.
// 检查是否支持更换图标
@property (readonly, nonatomic) BOOL supportsAlternateIcons NS_EXTENSION_UNAVAILABLE("Extensions may not have alternate icons") API_AVAILABLE(ios(10.3), tvos(10.2));

// Pass `nil` to use the primary application icon. The completion handler will be invoked asynchronously on an arbitrary background queue; be sure to dispatch back to the main queue before doing any further UI work.
// 更换图标
- (void)setAlternateIconName:(nullable NSString *)alternateIconName completionHandler:(nullable void (^)(NSError *_Nullable error))completionHandler NS_EXTENSION_UNAVAILABLE("Extensions may not have alternate icons") API_AVAILABLE(ios(10.3), tvos(10.2));

// If `nil`, the primary application icon is being used.
// 当前图标的名称
@property (nullable, readonly, nonatomic) NSString *alternateIconName NS_EXTENSION_UNAVAILABLE("Extensions may not have alternate icons") API_AVAILABLE(ios(10.3), tvos(10.2));
  • 系统提供的 API 简单明了,唯一要注意的是下面这个方法。
- (void)setAlternateIconName:(nullable NSString *)alternateIconName completionHandler:(nullable void (^)(NSError *_Nullable error))completionHandler
  • 方法中的alternateIconName参数,是要填写您在Info.plist 中填写的名字,如图二中所示,我们应当在此方法中填写Icon-60或者Icon-76.

六、遇到的问题

  • 按照上面的方法能够动态更换Icon,但是在更换成功后,系统会又个弹窗提示用户,Icon更换成功,那么如何不让弹窗弹出来呢?
  • 把调用setAlternateIconName的代码注释,换成如下代码。
if ([[UIApplication sharedApplication] respondsToSelector:@selector(supportsAlternateIcons)] &&
         [[UIApplication sharedApplication] supportsAlternateIcons])
     {
         NSMutableString *selectorString = [[NSMutableString alloc] initWithCapacity:40];
         [selectorString appendString:@"_setAlternate"];
         [selectorString appendString:@"IconName:"];
         [selectorString appendString:@"completionHandler:"];
         
         SEL selector = NSSelectorFromString(selectorString);
         IMP imp = [[UIApplication sharedApplication] methodForSelector:selector];
         void (*func)(id, SEL, id, id) = (void *)imp;
         if (func)
         {
             func([UIApplication sharedApplication], selector, iconName, ^(NSError * _Nullable error) {});
         }
     }

七、注意点

  • 如果iPad需要也需要更换图标,那么我们需要在CFBundleIcons~ipad进行同样的设置。
  • 不能把图片放在.xcassets里面

相关文章

  • iOS 动态更换app图标(AppIcon)

    动态更换app的图标,就是在不重新安装app的情况下,可以动态更黄当前的icon图标。该方法只能在系统版本iOS1...

  • iOS 动态更换App的Icon图标

    一、前沿 在iOS 10.3苹果添加了更换图标的功能,通过这个功能,我们可以在适当的时候采取特定的方式为我们的Ap...

  • iOS 动态更换App Icon

    查文档发现有两种配置方式,并且iOS10.3版本以上才可以使用。 配置 配置方案一: 配置Info.plist中的...

  • 上次发版我就改了一行代码!

    动态更换应用Icon 产品:我们可以动态更换App在Launcher里面的Icon吗开发:不可以产品:我们可以动态...

  • Flutter 更换App图标

    以Flutter2.0+版本为示例 iOS App图标更换 Android App图标更换

  • 【iOS】动态更换 App 图标

    动态更换图标 在iOS 10.3苹果添加了更换图标的功能,通过这个功能,我们可以在适当的时候采取特定的方式为我们的...

  • iOS 动态更换App图标

    该功能应用的场景 1、白天/夜间模式切换,在切换App主色调同时切换App图标。 2、各类皮肤主题(淘宝就可换肤)...

  • iOS动态更换App图标

    应用场景 起跳版本 实现方案 官方文档 应用场景 各类皮肤主题切换,附带App图标一块更换。 图标促销提示,如某宝...

  • iOS 动态更换 APP图标

    背景 项目开发过程中,可能会有更换项目图标的需求,比如一些电商的应用,在双11,618,新年等节日的时候需要显示特...

  • iOS 动态更换App图标

    一、准备好icon图标 然后放到项目中 如图所示 注意:1、图片一定不要放到 Assets.xcassets 里面...

网友评论

      本文标题:iOS 动态更换App的Icon图标

      本文链接:https://www.haomeiwen.com/subject/tfbtpqtx.html