iOS ipa包瘦身---删除无用图片资源

随着客户端业务的增多和业务的更新,App包大小越来越大,优化包大小的事情迫在眉睫,客户端需要优化的地方也有很多,本期主要讲如何查找无用图片并且删除无用图片的方法。

方案1:(暴力方法)很简单写一个脚本把图片的名称在整个工程下查找即可,查不到就说明这张图片是无用的。(对于小的工程这样方案是可以的,但是对于工程大的项目查找太慢了)。

方案2:把所有的赋值语句提取出来放到一个文件中,再把工程下面的图片名称获取出来在这个文件中查找,若查找不到则说明此图片是无用资源。由于工程中的图片全部放在了Images.xcassets文件夹下。下面的脚本是查找Images.xcassets目录下面的无用图片。若图片文件不是放在Images.xcassets文件夹下,稍微修改脚本就可以用,下面的脚本删除无用图片的思路同样适用于Android工程。

#!/bin/sh

programFilePath=$(cd "$(dirname "$0")"; pwd)
unusedCount=0
maybeUnusedCount=0

if [[ -z $programFilePath ]]; then
read -p "请输入工程的路径" programFilePath
fi

check_files=`find $programFilePath -name ‘*.xib‘ -o -name ‘*.storyboard‘ -o -name ‘*.[mh]‘  -o -name ‘*.pch‘ -o -name ‘*.java‘ -o -name ‘*.xml‘ -o -name ‘*.js‘ -o -name ‘*.html‘`

for file  in `echo $check_files | sed ‘s/\n/ /g‘`
    do
#iOS图片引用规则 :获取@符号的语句
        grep -i "@\"" -A 0  "$file" | grep -v  -e  "--" >> maybeImageSentence.txt
    done

imageTextPath="$programFilePath/maybeImageSentence.txt"

maybeUnusedImageFilePath="$programFilePath/maybeUnusedImage.txt"
if [ -f "$maybeUnusedImageFilePath" ]; then
    rm -f "$maybeUnusedImageFilePath"
fi

unusedImageFilePath="$programFilePath/unusedImage.txt"
if [ -f "$unusedImageFilePath" ]; then
    rm -f "$unusedImageFilePath"
fi

for png in `find $programFilePath -name ‘*.png‘`
do
    # 图片名称
    match_name=`basename $png`

    suffix1="@2x.png"
    suffix2=".9.png"
    suffix3=".png"
    suffix4="@3x.png"

    if [[ ${match_name/${suffix1}//} != $match_name ]]; then
      match_name=${match_name%$suffix1}
    elif [[ ${match_name/${suffix4}//} != $match_name ]]; then
           match_name=${match_name%$suffix4}
       elif [[ ${match_name/${suffix2}//} != $match_name ]]; then
           match_name=${match_name%$suffix2}
    else
        match_name=${match_name%$suffix3}
    fi

    dir_name=`dirname $png`

    if [[ $dir_name =~ .bundle$ ]] || [[ $dir_name =~ .appiconset$ ]] || [[ $dir_name =~ .launchimage$ ]]; then
      continue
    fi

    # 在imageset里面找
    result=$(echo $dir_name | grep "imageset")
    if [[ "$result" == "" ]];  then
        continue
    fi

    referenced=false

    if grep -q "$match_name" "$imageTextPath"; then
        referenced=true
    fi

    contaT=$(echo $match_name | grep "[0-9]")
    if [[ "$contaT" != "" ]];  then
        maybeUnusedCount=`expr $maybeUnusedCount + 1`
        echo "$png"  >> maybeUnusedImage.txt
        continue
    fi

      if ! $referenced ; then
          unusedCount=`expr $unusedCount + 1`
        echo "$png"  >> unusedImage.txt
        # 打开下面的语句直接删除图片目录 例如icon_arrow_bluesmall.imageset
#          rm -rf $dir_name
      fi

done

rm maybeImageSentence.txt

echo "Total $unusedCount unusedImage files ->imagePath store unusedImage.txt"
echo "Total $maybeUnusedCount maybeUnusedImage files ->imagePath store maybeUnusedImage.txt"

使用方法:首先把上面的代码复制到一个文件中命名为 unused-image.sh,把这个文件放在目标工程下面执行   sh unused-image.sh 命令即可。会生成两个文件 unusedImage.txt和 maybeUnusedImage.txt。

方案2的缺点就是无法判断图片名称带有数字的无法确定是否是无用资源如图片名称为[email protected],此类命名的图片输出到maybeUnusedImage.txt这个文件中,需要手动的排查删除。

原创文章,欢迎转载,转载请标注,谢谢大家!!!!!!!

原创文章,欢迎转载,转载请标注,谢谢大家!!!!!!!

原创文章,欢迎转载,转载请标注,谢谢大家!!!!!!!

================================================================

若有疑问请加本人QQ:610774281 微信:stephenli225。 一起探讨一起进步。。。。

时间: 2024-12-28 16:02:56

iOS ipa包瘦身---删除无用图片资源的相关文章

iOS安装包瘦身的那些事儿

在我们提交安装包到App Store的时候,如果安装包过大,有可能会收到类似如下内容的一封邮件: 收到这封邮件的时候,意味着安装包在App Store上下载的时候,有的设备下载的安装包大小会超过100M.对于超过100M的安装包,只能在WIFI环境下下载,不能直接通过4G网络进行下载. 在这里,我们提交App Store的安装包大小为67.6MB,在App Store上显示的下载大小和实际下载下来的大小,我们通过下表做一个对比: iPhone型号 系统 AppStore 显示大小 下载到设备大小

iOS ipa 包优化

项目里有一个h5页面需要原生化,这个页面有大量的本地图片,而这些图又用了2x.3x两套图,其中有些图片大到一张能达到好几M,最终的结果是ipa的包体积巨大无比.于是试了好些方法,终于把ipa的体积减小了很多.接下来总结一些能让app瘦身的方法. 1. 从图片资源进行瘦身. (1) 对图片本身进行压缩.设计师在设计大的图片时对图片进行压缩一下,然后客户端使用压缩后的图片,这样能大大减少ipa包的体积.我项目中用到的那些很大的图片设计师没有对其进行压缩,所以让设计师帮把所有的大图片都压缩了一遍,这样

iOS 9 App 瘦身功能

App 瘦身简介 当前市场上存在大量的 iOS 设备,因此有多种屏幕尺寸和分辨率,要想保证一个 App 在多种屏幕下的展示效果需要大量的资源(比如 png.jpeg 以及二进制的 PDF).不幸的是,这导致用户需要下载一个巨大的程序包(之前的 iOS 版本强制用户下载全部 App 文件,包括他们在用 iPhone 时永远也不会用到的 iPad 适配图片).16G 的 iPhone 仍然有不少人在用(并且可能短时间内不会消失),所以你要缩小 App 体积从而可以快速下载并且保证用户有足够的空间.A

SpringBoot Jar包瘦身 - 跟大文件说再见!

前言 SpringBoot部署起来配置非常少,如果服务器部署在公司内网,上传速度还行,但是如果部署在公网(阿里云等云服务器上),部署起来实在头疼.就是 编译出来的 Jar 包很大,如果工程引入了许多开源组件(SpringCloud等),那就更大了.这个时候如果想要对线上运行工程有一些微调,则非常痛苦 可以用以下方法减少jar内容 瘦身准备 1.首先我们要对Jar包有一个初步认识,它的内部结构如下 example.jar | +-META-INF | +-MANIFEST.MF +-org | +

iOS ipa包进行重新签名

1.安装brew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 2.用brew安装ruby brew install ruby 3.用gem安装sigh sudo gem install sigh 4.sigh resign 按照下面步骤,就可以安装成功! 原文地址:https://www.cnblogs.com/gumengli/p/

[转]基于clang插件的一种iOS包大小瘦身方案

转自:http://mp.weixin.qq.com/s?__biz=MzA3ODg4MDk0Ng==&mid=2651112856&idx=1&sn=b2c74c62a10b4c9a4e7538d1ad7eb739 iOS包瘦身,对于一般团队来说并不是优化的首要目标,但是对于一些安装包已经超限的团队来说非常关键.微信和阿里移动安全都分享过相关的内容,后者采用的是去除无用代码的思路,感兴趣的同学可以阅读: iOS瘦身之删除无用的mach-O文件 而本文则将这个思路发挥到了极致,欢迎

Android APK瘦身全面总结——如何从32.6M到13.6M

前言 之前我简单介绍了关于svg图片瘦身的问题,在公司,瘦身这个问题是我提出来的,所以这锅我背了.公司项目是32.6M,我给自己的要求就是低于20M.上周花了一个星期瘦身,至于为什么花了一周,主要是svg适配问题我被搞蒙蔽了.然后发现还要改大量代码,想想也就算了,又换了另一种瘦身方法. 很多人是因为这标题而来的,怎么可能,32.6M的居然可以变成13.6M.下面容我慢慢道来. APK结构介绍 classes.dex classes.dex是Java源码编译后生成的java字节码文件.但由于And

清理iOS工程里无用的图片,可瘦身ipa

工程在经过多人后,往往会出现较多的垃圾,导致打包出来的ipa文件偏大,有时候我们会通过清理代码来给程序瘦身,而瘦身ipa效果明显的,主要通过清理程序里的无用图片. 推荐一个清理图片的应用 https://github.com/tinymind/LSUnusedResources 直接打开运行,点击Browse..选择工程目录,再点击Search 搜索出该搜索工具认为工程里没有用到的图片,当然那些没搜出来的就都是有使用的图片了,不用理会 注意:这里所说没有用到的图片不是真的没有用到,因为这个工具他

iOS控制器瘦身-面向超类编程

点击查看作者简书地址 今天写这篇文章的目的,是提供一种思路,来帮助大家解决控制器非常臃肿的问题,对控制器瘦身. 如果手边有项目,不妨打开工程看一下你的控制器代码有多少行,是不是非常多?再看一下tableView的代理方法cellForRow和heightForRow的代码是不是也是非常多?里面夹杂着switch和大量if esle的判断逻辑的代码.后期维护看着这些if else是不是特别烦躁?特别是自己在维护前人写的代码,并且还没有注释 一团糟,是不是有更想骂人的冲动?别怕,这里给您提供一种解决