美文网首页iOS集合
ipa包更换icon(支持iOS11)

ipa包更换icon(支持iOS11)

作者: wooke | 来源:发表于2018-04-20 09:08 被阅读1623次

    前言

    在iOS11系统之前,苹果app的icon加载方式,是以info.plist的相关配置为优先的,也就是说,加载icon先去info.plist查找是否有icon配置项,有的话按配置项加载icon,没有再去Assets资源去加载icon。
    而iOS11之后,苹果把两个优先级调换了,所以按之前的方式直接把包解压,把不同尺寸的icon放入包根目录,再加入icon配置项的方式不一定生效。
    注意:为了兼容所有版本,最好两种方式都要做,除非确定Assets没配置icon。

    一、info.plist配置方式

    1、你需要一张1024*1024的icon,导入生成icon的网址,下载iOS的icon压缩包,解压得到各种尺寸的icon。
    2、解压ipa包,得到Payload文件夹,打开Payload,里面是app目录,接着打开,找到并打开info.plist,配置icon的键值对。
    3、按照info.plist配置的icon名修改步骤1中解压得到的icon名,尺寸要对应,然后将所以需要的icon复制到Payload文件夹。
    4、重签名。

    以上内容参考官方网址,下面适当翻译。

    从iOS 5.0开始,通过包含CFBundleIcons键来指定图标。 旧的应用程序可能先前通过包含CFBundleIconFiles键来指定其图标。 如果密钥仍然存在,则应该删除该密钥(不要忘记删除任何特定于设备的变体)。 所有的应用程序都应该迁移到CFBundleIcons键来指定它们的图标。

    CFBundleIcons键的值是一个带有两个子键的字典:CFBundlePrimaryIconUINewsstandIconUINewsstandIcon键用于报摊应用程序,否则可以省略。 CFBundlePrimaryIcon键的值是一个字典,用于标识与该分发包关联的图标图像。 它可能包含两个子键:CFBundleIconFilesUIPrerenderedIcon。 UIPrerenderedIcon键的值是一个布尔值,用于指定图像是否已经包含闪耀效果。 CFBundleIconFiles键的值是一个字符串数组,每个字符串标识一个包中的图像。

    重要:指定每张图片的名称时,最好省略任何扩展名。 省略扩展名后,系统会使用标准分辨率图像文件名自动检测图像的高分辨率(“@ 2x”或“@ 3x”)变体。 如果您包含扩展名,则必须明确指定所有图像文件(包括高分辨率变体)。

    示例1 通用应用程序的示例配置。

    <key>CFBundleIcons</key>
    <dict>
        <key>CFBundlePrimaryIcon</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>Icon-Small</string>
                <string>Icon-Small-40</string>
                <string>Icon-Small-50</string>
                <string>Icon</string>
                <string>Icon-60</string>
                <string>Icon-72</string>
            </array>
        </dict>
    </dict>
    <key>CFBundleIcons~ipad</key>
    <dict>
        <key>CFBundlePrimaryIcon</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>Icon-Small</string>
                <string>Icon-Small-40</string>
                <string>Icon-Small-50</string>
                <string>Icon-72</string>
                <string>Icon-76</string>
                <string>Icon-83.5</string>
            </array>
        </dict>
    </dict>
    

    如果您的应用程序支持iOS 4.3,则还必须包含CFBundleIconFiles项以指定应用程序的图标图像。 这个键的值是一个字符串数组,每个字符串标识一个包中的图像。 如果您为iPad特定的图标包含了图像,则可以将它们列在CFBundleIconFiles项下,或者将它们列在设备特定的CFBundleIconFiles〜ipad项下。 仅限iPad的应用程序应在CFBundleIconFiles项下列出其图标图像。
    示例2 具有iOS 4.3部署目标的通用应用程序的示例配置。

    <key>CFBundleIconFiles</key>
    <array>
        <string>Icon-Small</string>
        <string>Icon-Small-40</string>
        <string>Icon-Small-50</string>
        <string>Icon</string>
        <string>Icon-60</string>
        <string>Icon-72</string>
    </array>
    <key>CFBundleIconFiles~ipad</key>
    <array>
        <string>Icon-Small</string>
        <string>Icon-Small-40</string>
        <string>Icon-Small-50</string>
        <string>Icon-72</string>
        <string>Icon-76</string>
        <string>Icon-167</string>
    </array>
    

    上面icon对应的尺寸如下,

    icon尺寸

    iOS6.1及以前:


    iOS6.1及以前

    二、car替换方式

    ipa包解压Payload文件夹,打开Payload,里面是app目录,接着打开,会发现一个Assets.car文件,这是个什么鬼?也就是苹果把之前的包以一种方式压缩了一下,这里需要一个工具去解压-->替换-->重新压缩,然后替换掉原包里面的car文件。
    经过网络搜索,发现了一款工具ThemeEngine,可以实现这个功能,参考的链接,这里把工具的地址贴出来,百度云,提取码 fws3,工具操作很简单,简单的拖拽即可替换相应icon。

    ThemeEngine工具

    大家有问题可以下面留言,么么。

    相关文章

      网友评论

        本文标题:ipa包更换icon(支持iOS11)

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