美文网首页
iOS 项目优化-用脚本优化冗余资源文件

iOS 项目优化-用脚本优化冗余资源文件

作者: li_礼光 | 来源:发表于2020-12-21 15:21 被阅读0次

    创建一个新的项目projectTest.

    • 在项目中添加文件夹Resources, 向Resources放入一张png
    • 在项目中Assets.xcassets放入一张png

    创建一个脚本文件

    主要修改

    • PrjPath为项目工程所在目录,包含.m .xib文件;
    • ResPath为被扫描的资源文件目录,包含.png .wav
    • xcodeprojPath为工程xcodeproj位置
    #!/bin/sh
     
    ##### several cases that the scripts does not work:
    ##### 1) there is space or slash in the resources file, such as "aaa .png" 资源文件名中含有空格或者/
    ##### 2) reference resources in commented code 资源引用代码被注释了
    ##### 3) you need to manually checked the resources one by one in the result 对于脚本检查结果,最好人工检查一遍
    ##### 4) you can add some other types more than png, jpg, gif, wav, m4a 如果需要检查其他资源,请自行修改脚本;
    ##### 5)默认文件后缀都是如@2x.png格式,如果后缀格式不同,请自行修改脚本;
     
     
    #### set parameters:
    #### PrjPath为项目工程所在目录,包含.m .xib文件;
    #### ResPath为被扫描的资源文件目录,包含.png .wav
    #### xcodeprojPath为工程xcodeproj位置
    PrjPath=/Users/liliguang/Desktop/projectTest
    ResPath=/Users/liliguang/Desktop/projectTest
    xcodeprojPath=/Users/liliguang/Desktop/projectTest/projectTest.xcodeproj
     
    if [ -f ~/Desktop/resource_san_result.txt ];then
        rm -f ~/Desktop/resource_san_result.txt
    fi
     
    # 当前项目下所有的m, xib, mm, plist, json文件
    cd $PrjPath
    files=$(find . -name "*.m" -o -name "*.xib" -o -name "*.mm" -o -name "*.plist" -o -name "*.json")
    
    # 当前项目下所有的资源文件
    cd $ResPath
    for res in $(find . -name "*.png" -o -name "*.jpg" -o -name "*.gif" -o -name "*.wav" -o -name "*.m4a")
    do
    
        basename='basename/'$res
        basename=${basename##*/}
        
        if [ "${basename##*.}" == "png" ];then
            if [ $? -eq 0 ];then
                name=${basename%%@2x.png}
            else
                echo $basename|grep -q @3x.png
                if [ $? -eq 0 ];then
                    name=${basename%%@3x.png}
                else
                    name=${basename%.png}
                fi
            fi
            echo Png文件 ${name}
        elif [ "${basename##*.}" == "jpg" ];then
            if [ $? -eq 0 ];then
                name=${basename%%@2x.jpg}
            else
                echo $basename|grep -q @3x.jpg
                if [ $? -eq 0 ];then
                    name=${basename%%@3x.jpg}
                else
                    name=${basename%%.jpg}
                fi
            fi
            echo Jpg文件 ${name}
        elif [ "${basename##*.}" == "gif" ];then
            if [ $? -eq 0 ];then
                name=${basename%%@2x.gif}
            else
                echo $basename|grep -q @3x.gif
                if [ $? -eq 0 ];then
                    name=${basename%%@3x.gif}
                else
                    name=${basename%%.gif}
                fi
            fi
            echo Gif文件 ${name}
        elif [ "${basename##*.}" == "wav" ];then
            name=${basename%%.wav}
            echo Wav文件 ${basename}
        elif [ "${basename##*.}" == "m4a" ]; then
            name=${basename%%.m4a}
            echo M4a文件 ${basename}
        else
            name=''
            echo name为空字符串
        fi
     
        # 判断name长度不为0
        if [ ${#name} -gt 0 ];then
            cd $PrjPath
            if grep -q $name $files;then
                echo "$res" is used
            else
                cd $xcodeprojPath
                if grep -q $name project.pbxproj;then
                    echo "$res" is not used >> ~/Desktop/resource_san_result.txt
                else
                    :
                fi
            fi
        else
            echo name is empty
        fi
    done
     
    if [ -f ~/Desktop/resource_san_result.txt ]; then
        echo ***************the end of scan. Please see result from resource_san_result.txt
    else
        echo ***************the end of scan, everything is OK
    fi
    


    如果资源文件没有使用, 最终会输出打印存放到桌面的resource_san_result.txt文件中.

    项目

    执行结果

    终端运行

    结果输出

    当你的项目越来越大的时候, 对于一些冗余的资源文件. 可以为自己的项目做瘦身.

    PS : 这里引用的资源图片名称, 就算是注释也当做为正在使用过这个图片, 所以写代码的时候需要注意自己的代码规范.

    更多参考 :
    iOS 项目结构与应用包瘦身实践
    从资源和代码两方面为App瘦身处理
    包大小:如何从资源和代码层面实现全方位瘦身?
    Apple Developer App Thinning in Xcode

    相关文章

      网友评论

          本文标题:iOS 项目优化-用脚本优化冗余资源文件

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