最新消息:iOS编程开发交流群(6906921) ,Mac.Cocoa开发交流群(7758675) 欢迎iOS/macOS开发编程爱好及学习者加入!

iOS开发之"动态"更换App备用图标

iOS 天狐 12760浏览 0评论

iOS10.3苹果新增了一个API,字面意思也很好理解,设置可选的,备用的图标。

之所以“动态”加了引号,是因为并不是我们了解那样动态,并不可以通过网络接口动态设置图标,而是要预设置一些可选备用图标。相对“动态”的来更换图标。

了解如何使用可选图标前,先了解下info.plist中的CFBundleIcons。

CFBundleIcons

CFBundleIcons (字典 - iOS, tvOS)包含关于这个app使用的icon的所有信息 ,这个key允许你基于他们的预期使用分组icon,指定多个icon文件与特定键修改图标的外观,这个字典可以包含如下key:

  • CFBundlePrimaryIcon—这个key标识主屏幕的主图标,设置应用等等其他地方。
  • CFBundleAlternateIcons—这个key标识主屏幕可选图标,设置应用等等其他地方。T
  • UINewsstandIcon—这个key标识应用程序Newsstand(报刊杂志)的默认图标

CFBundleIcons key支持iOS5以后的系统和tvOS9.0以后的系统,你可以把CFBundleIconFiles和CFBundleIconFile组合在一起,但在iOS 5.0及以后的系统,CFBundleIconFiles优先。

CFBundlePrimaryIcon 字典的内容

CFBundlePrimaryIcon的值在iOS和tvOS中是不同的:

  • 在tvOS中,CFBundlePrimaryIcon的值是字符串,值是app的icon文件名
  • 在iOS中,CFBundlePrimaryIcon的值是字典. Table 4 列出了字典包含的所有的keys和values
Table 4  CFBundlePrimaryIcon 字典的keys
Key Value Description
CFBundleIconFiles 字符串数组 必须。每一个数组中的字符串都是icon文件的文件名,你可以包含多个不同尺寸的icon,用来支撑iPhone,iPad或者通用app

列表的图标,包括它们的大小,可以包括在应用bundle中,

参考在 在 App Programming Guide for iOS Advanced App Tricks app icons章节, 更多如何创建icon的信息, 参考 iOS Human Interface Guidelines.

UIPrerenderedIcon 布尔值 这个key指定图标文件是否已经包含发光的效果,如果你对icon已经有了发光效果,设置此值为YES阻止系统再一次增加同一个效果,如果不包含这个key,或者设置值为NS,系统应用发光效果给在CFBundleIconFiles字典中列出的图标文件

当指定图片文件名,最好省略文件名后缀,省略文件名扩展可以让系统使用标准分辨率的图像文件名自动检测高分辨率(@2x)版本的图像文件。如果包含文件扩展名,您必须明确的(包括高分辨率的)指定所有图像文件,系统在bundle中的资源目录中查找icons文件。

CFBundleAlternateIcons 字典的内容

CFBundleAlternateIcons的值在iOS和tvOS中是不同的:

  • 在tvOS中,CFBundleAlternateIcons 是一个字符串数组,每一个字符串的值是你app icon文件名
  • 在iOS中,CFBundleAlternateIcons 是一个字典。 每一个字典的key是可选图标的名称,也是传给UIApplication的setAlternateIconName:completionHandler:  方法的字符串,每一个图标名key对应值同样也是一个字典,包含的key在Table 5中:
Table 5 CFBundleAlternateIcons 字典在iOS中的keys
Key Value Description
CFBundleIconFiles Array of strings 必须。每一个数组中的字符串都是icon文件的文件名,你可以包含多个不同尺寸的icon,用来支撑iPhone,iPad或者通用app

列表的图标,包括它们的大小,可以包括在应用bundle中,参考 iOS Human Interface Guidelines.

UIPrerenderedIcon Boolean 这个key指定图标文件是否已经包含发光的效果,如果你对icon已经有了发光效果,设置此值为YES阻止系统再一次增加同一个效果,如果不包含这个key,或者设置值为NS,系统应用发光效果给在CFBundleIconFiles字典中列出的图标文件

当指定图片文件名,最好省略文件名后缀,省略文件名扩展可以让系统自动检测高分辨率(@2x)版本的图像文件使用标准分辨率的图像文件名。如果包含文件扩展名,您必须明确的(包括高分辨率的)指定所有图像文件,系统在bundle中的资源目录中查找icons文件。

重要:如果你的app包含IPad特有版本的图标,必须包含CFBundleIcons~ipad在info.plist中。CFBundleIcons~ipad与CFBundleIcons目录结构一致。

UINewsstandIcon 字典的内容

UINewsstandIcon的值是一个字典来标识在报刊app中显示的默认的图片和风格选项,Table 6描述了所有的可用keys

Table 6  UINewsstand Icon 字典的key
Key Value Description
CFBundleIconFiles 字符串数组 必须,每一个数组中的字符串包含icon文件的名称,你可以使用这个key指定一个标准icon的结合,用于你的app在Newsstand中展示,这个icon在没有封面的时候用于下载的问题。 This icon is used when no cover art is available for a downloaded issue.

列表的图标,包括它们的大小,可以包括在应用bundle中,参考 App Programming Guide for iOS. 中 App-Related Resources app icons章节, 更多如何创建icon的信息, 参考 iOS Human Interface Guidelines.

UINewsstandBindingType 字符串 这个key提供如何风格化Newsstand art的信息,值为一下字符串中的任一个:

  • UINewsstandBindingTypeMagazine
  • UINewsstandBindingTypeNewspaper
UINewsstandBindingEdge 字符串 这个key提供如何风格化Newsstand art的信息,值为一下字符串中的任一个:

  • UINewsstandBindingEdgeLeft
  • UINewsstandBindingEdgeRight
  • UINewsstandBindingEdgeBottom

设置可选的图标

声明

参数

alternate​Icon​Name

可选图标的名称,在app的Info.plist文件中声明的CFBundle​Alternate​Icons中设置。如果要显示应用程序的主图标alternateIconName 传nil即可,主图标使用CFBundle​Primary​Icon声明,CFBundle​Alternate​Icons与CFBundle​Primary​Icon两个key都是CFBundle​Icons的子条目。completion​Handler

当有结果的时候的回调,当视图改变app图标的时候,系统会通过调用completion​Handler来报告修改结果。(completion​Handler在UIKit-provided queue中执行, 不需要再app主队列执行。completion​Handler只有一个error返回值:

成功改变图标的的时候,error为nil,如果发生错误,error描述发生什么了。并且alternate​Icon​Name的值保持不变。

讨论

使用这个方法改变app的图标。主图标或者可选图标,如果supports​Alternate​Icons属性返回YES,你可以执行改变操作。必须在app的info.plist文件中的CFBundle​Icons中提前声明可选图标与主图标。

使用

由于supportsAlternateIcons与setAlternateIconName都是新的api,考虑到不同版本的系统要进行判断。

编辑配置info.plist

info.plist涉及到很多内容编辑,最好使用源码方式,右键info.plist,open as source code

相关链接

https://developer.apple.com/reference/uikit/uiapplication/2806818-setalternateiconname#parameters

Information Property List Key Reference

iOS Human Interface Guidelines

转载请注明:天狐博客 » iOS开发之"动态"更换App备用图标

微信 OR 支付宝 扫描二维码
为天狐 打赏
非常感谢你的支持,哥会继续努力!
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址