首页 > 其他分享 >iOS使用Run Script提升开发效率

iOS使用Run Script提升开发效率

时间:2023-07-19 19:12:40浏览次数:59  
标签:脚本 Run Script buildnum iOS SRCROOT build scheme


通过在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

标签:脚本,Run,Script,buildnum,iOS,SRCROOT,build,scheme
From: https://www.cnblogs.com/zhou--fei/p/17566496.html

相关文章

  • AliOSS python 批量上传文件
    AliOSSPython批量上传文件简介AliOSS是阿里云提供的一种对象存储服务,可以用于存储和管理大量的非结构化数据。在Python中,我们可以使用AliOSSSDK来快速地上传多个文件到AliOSS。本文将介绍如何使用AliOSSPythonSDK来批量上传文件到AliOSS,并提供代码示例来说明具体的操作步骤......
  • AAudioStream
    AAudioStream的实现流程1.概述在开始之前,我们需要了解AAudioStream是什么以及它的作用。AAudioStream是AndroidNDK中的一个类,用于实现低延迟音频数据的读取和写入。它提供了一种高效的方式来进行音频处理和音频录制。在本文中,我们将教会你如何使用AAudioStream这个类。2.实现......
  • @JavascriptInterface传过来键值对,Android这边用什么类型接收
    传输键值对给Android的JavascriptInterface概述在Android开发中,我们经常需要在JavaScript和Java之间传输数据。一种常见的方式是通过使用@JavascriptInterface注解将Java方法暴露给JavaScript调用。这种方式可以实现双向通信,并且非常灵活。本文将介绍如何使用@JavascriptInterfac......
  • JavaScript实现,判断一个点是否在多边形内
    //定义点的结构体functionpoint(){this.x=0;this.y=0;}//计算一个点是否在多边形里,参数:点,多边形数组functionPointInPoly(pt,poly){for(varc=false,i=-1,l=poly.length,j=l-1;++i<l;j=i)((poly[i].y<=pt.y&&pt.y<p......
  • Android编译报错Caused by: java.lang.RuntimeException: Manifest merger failed wit
    Android编译报错Causedby:java.lang.RuntimeException:Manifestmergerfailedwithmultiple这种异常一般是引用了aar,如果项目中的manifestapplication配置和aar中不一样就会报错,比如android:icon和aar中不一致,则添加tools:replace="android:icon"配置即可。......
  • RunnerGo使用体验之性能测试、接口自动化测试
    最近在gitee上看见一款获得GVP(最有价值开源项目)的测试平台RunnerGo,看他们官网介绍包含了接口测试、性能测试、自动化测试。知道他们有saas版可以试用,果断使用了一下,对其中场景管理和性能测试印象深刻,之后也在公司自己安装使用,接下来和大家介绍一下RunnerGo的整体使用情况。登录后......
  • [Typescript] Queue
    UsingLinkedlisttoimplementaQueue.Injavascript,ifyouwanttopushaiteminfrontofanArray,itneedtoshifttherestofitems,notgoodforperformance.UsingLinkedListisO(1)oeprationforenqueanddeque, whichisbetter.Usecase:Let&#......
  • JavaScript - 支持word上传的富文本编辑器
    ​ 在之前在工作中遇到在富文本编辑器中粘贴图片不能展示的问题,于是各种网上扒拉,终于找到解决方案,在这里感谢一下知乎中众大神以及TheViper。通过知乎提供的思路找到粘贴的原理,通过TheViper找到粘贴图片的方法。其原理为一下步骤:监听粘贴事件;【用于插入图片】获取光标位置;【......
  • docker run -itd
    实现“dockerrun-itd”步骤及代码解析1.简介在开始教你如何实现“dockerrun-itd”之前,首先我们需要了解一些相关的背景知识。Docker是一种轻量级的容器化技术,可以快速创建、部署和运行应用程序。通过使用Docker,我们可以将应用程序及其依赖项打包成一个独立的容器,这样就可以......
  • docker run -d --name bitwarden -v /bw-data/:/data/ -p 8800:80 bitwardenrs/se
    DockerRun命令实现Bitwarden容器化引言在现代软件开发和部署中,容器化技术正变得越来越流行。Docker是一个用于构建、发布和运行应用程序的开源平台,它可以将应用程序及其依赖项打包到一个容器中,提供了一种轻便、可移植和可扩展的方式来部署应用程序。在本文中,我们将学习如何使用......