iOS使用Run Script提升开发效率

iOS,Run,效率,开发 · 浏览次数 : 196

小编点评

**添加Xcode Run Script的步骤:** 1. **打开Xcode项目**。 2. **选择项目文件** > **添加 > 新的Run Script**。 3. **编辑脚本**:输入要执行的shell脚本的代码。 4. **保存脚本**。 5. **设置运行策略**:根据需要调整脚本的执行顺序。 6. **设置执行结果**:选择“基于依赖分析”。 7. **运行脚本**。 8. **查看脚本执行结果**:在Xcode-Navigators-Show the Report navigator-Build日志中查看。 **使用脚本提升开发效率的方法:** * **资源复制和替换:**使用 `cp` 或 `rsync` 等工具进行资源复制和替换。 * **代码规范化检测:**使用 `autopep8` 等工具进行代码规范化检测。 * **动态库替换:**使用 `env` 命令查询项目环境变量并进行动态库替换。 * **编译前的代码分析:**使用 `codeql` 等工具进行编译前的代码分析。

正文


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

与iOS使用Run Script提升开发效率相似的内容:

iOS使用Run Script提升开发效率

通过在Xcode Run Script添加shell脚本,然后通过脚本来帮助我们在编译阶段完成一下资源的copy,文件替换,修改等繁琐的事件。使Xcode在编译过程中自动完成耗时繁琐的操作提升开发效率。 添加脚本的过程很简单,添加+添加 添加完脚本后可以根据需要调整脚本的执行顺序,如:对应Bundl

Flutter 异步编程指南

在 App 开发中,经常会遇到处理异步任务的场景,如网络请求、读写文件等。Android、iOS 使用的是多线程,而在 Flutter 中为单线程事件循环

Flutter 异步编程指南

在 App 开发中,经常会遇到处理异步任务的场景,如网络请求、读写文件等。Android、iOS 使用的是多线程,而在 Flutter 中为单线程事件循环

iOS转场之present与dismiss的使用

present的使用方式 present只能是A present B , B present C , C present D这样的链式弹出。 不能A present B , A present C , A present D这样的叠加弹出,会报错。 dismiss的使用方法 dismiss是底部父V

iOS气泡提示工具BubblePopup的使用

在平时的开发中,通常新手引导页或功能提示页会出现气泡弹窗来做提示。如果遇到了这类功能通常需要花费一定的精力来写这么一个工具的,这里写了一个气泡弹窗工具,希望能帮你提升一些开发效率。 使用方法 1.从gitHub上下载代码到本地,代码地址:https://github.com/zhfei/Bubble

在Bamboo上怎么使用iOS的单元测试

本教程将使用北汽登录模块为例,一步一步和大家一起搭建单元测试用例,并在Bamboo上跑起来,最终测试结果和代码覆盖率会Bamboo上汇总。

《吐血整理》高级系列教程-吃透Fiddler抓包教程(32)-Fiddler如何抓取IOS系统中Flutter应用程序的包

1.简介 上一篇讲解了安卓手机可以通过VPN代理来抓取Flutter应用程序的包,iOS(iphone)同样使用上一篇中VPN方法(原理与android是一致的),同样需要使用到VPN,在iOS也有许多与drony功能类似的软件,大家可以自己选择自己喜欢的使用,宏哥这里使用的是Shadowrocke

iOS开发基础135-Core Data

Objective-C (OC) 中使用 Core Data 是iOS应用开发中管理模型层对象的一种有效工具。Core Data 使用 ORM (对象关系映射) 技术来抽象化和管理数据。这不仅可以节省时间,还能减少编程错误。以下是使用 Core Data 的详细介绍,包括示例代码,以及深入底层的一些

Swift中UITableViewDiffableDataSource的使用

在 iOS 13 中 Apple 为 UITableView 和 UICollectionView 引入了 DiffableDataSource, 让开发者可以更简单高效的实现 UITableView、UICollectionView 的局部数据刷新。 新的刷新的方法为 apply 通过使用 app

Flutter 借助SearchDelegate实现搜索页面,实现搜索建议、搜索结果,解决IOS拼音问题

使用Flutter自带的SearchDelegate组件实现搜索界面,通过魔改实现如下效果:搜素建议、搜索结果,支持刷新和加载更多,解决IOS中文输入拼音问题。