iOS使用Run Script提升开发效率


通过在Xcode Run Script添加shell脚本,然后通过脚本来帮助我们在编译阶段完成一下资源的copy,文件替换,修改等繁琐的事件。使Xcode在编译过程中自动完成耗时繁琐的操作提升开发效率。
添加脚本的过程很简单,添加+添加

 

添加完脚本后可以根据需要调整脚本的执行顺序,如:对应Bundle资源,Framework的copy工作放在链接后。对应编译前的源码分析,代码规范化检测要放在编译之前。
这些可以通过调整 Run Script在Build Phases中的排列顺序来调整执行顺序。
Xcode Run Script的执行顺序就是Build Phases中的显示顺序。
 
查询脚本的执行结果是在Xcode-Navigators-Show the Report navigator-Build日志中进行查看。
设置执行策略
勾选了"Based on dependency analysis",则表示执行脚本前会先判断上次执行脚本的Output Files产物目录是否存在,如果存在就不再重复执行,提升build效率。
如果没有勾选,则会每次build都会执行一次脚本,通常会打印如下警告信息。
Run script build phase 'Run Script' will be run during every build because it does not specify any outputs. To address this warning, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase.

 

常见的脚本应用

可以在脚本中添加env命令,查询Xcode内置的项目环境变量,在脚本中进行使用。
env

结果如下:


静态库自动替换
在项目中可以将静态库的模拟器版本和真机版本分开打,然后运行时自动替换,脚本如下:
#env


switchFrameworks=('aa' 'bb')
frameworkFlag='framework'
simulatorFrameworkAppendFileName='SimulatorFramework'

if [ "${PLATFORM_NAME}" == "iphonesimulator" ]; then
    for scheme in ${switchFrameworks[@]}; do
        iphoneosFrameworkPath="${SRCROOT}/Frameworks/${scheme}.${frameworkFlag}"
        simulatorFrameworkPath="${SRCROOT}/Frameworks/${scheme}${simulatorFrameworkAppendFileName}/${scheme}.${frameworkFlag}"
        cd ~
        if [ ! -d ${scheme} ]; then
            mkdir ${scheme}
            cp -r ${iphoneosFrameworkPath} ${scheme}
            rm -rf ${iphoneosFrameworkPath}
            cp -r ${simulatorFrameworkPath} "${SRCROOT}/Frameworks/"
            rm -rf ${simulatorFrameworkPath}
        fi
        cd ${SRCROOT}
    done
else
    
    for scheme in ${switchFrameworks[@]}; do
        iphoneosFrameworkPath="${SRCROOT}/Frameworks/${scheme}.${frameworkFlag}"
        simulatorFrameworkPath="${SRCROOT}/Frameworks/${scheme}${simulatorFrameworkAppendFileName}"
        cd ~
        if [ -d ${scheme} ]; then
            cp -r ${iphoneosFrameworkPath} ${simulatorFrameworkPath}
            rm -rf ${iphoneosFrameworkPath}
            cp -r "$(pwd)/${scheme}/${scheme}.${frameworkFlag}" "${SRCROOT}/Frameworks/"
            rm -rf ${scheme}
        fi
        cd ${SRCROOT}
    done
fi
Xcode Build Number 自增
 if [ $CONFIGURATION == Release ]; then
     echo "Bumping build number..."
     plist=${PROJECT_DIR}/${INFOPLIST_FILE}
     
     #increment the build number (ie 115 to 116)
     buildnum=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${plist}")
     
     if [[ "${buildnum}" == "" ]]; then
         echo "No build number in $plist"
         exit 2
     fi
 
     buildnum=$(expr $buildnum + 1)
 
     /usr/libexec/Plistbuddy -c "Set CFBundleVersion $buildnum" "${plist}"
 
     echo "Bumped build number to $buildnum"
 
 else
     echo $CONFIGURATION " build - Not bumping build number."
 fi

 



参考文章:
https://www.jianshu.com/p/4cab21fd5517
posted @ 2023-07-19 18:52  滴水微澜  阅读(1030)  评论(0编辑  收藏  举报