由于在尝试使用Carthage导入FileKit库,发现xcode还有这么牛逼的功能。
转自龙思
version是app发布时用户看到的版本号。
build的为了方便开发者多次提交binary, 比如被苹果reject后。
例如,第一次提交version和build都是1.0.
假如审核没过,那么修改代码后新的构建的version还是1.0,build改为1.0.1就ok了。
翻译自[mokacoding](http://www.mokacoding.com/blog/better-
build-phase-scripts/)
它提供了一些便利的方法:
* 动态设置Build和version ..
* 加载调试选项来改变运行环境
* 为图标添加build号或者调试模式水印
不仅如此,第三方工具例如Carthage和CocoPods依靠Build phases Script来集成
不幸的是Xcode提供给我们用于操作这些脚本的界面不是最适用的。
首先,在这个区域写作和编辑是不理想的,尤其在XCode8.2 beta
1中这个文本区域不能调整大小。
更糟糕的是这段代码被保存在project文件中:所有的显示在一行!谁应该如何理解这样的差异呢。
让这段代码更难被阅读的是当它第一次添加时或者修改后。
你能认出这里面的区别吗?
对于团队开发成员而言,代码的可读性和可维护性是首要的,所有的代码修改都被记录在版本控制中。
更重要的是,如果你已经使用过一段时间的Xcode,那你一定知道解决project.pbxproj文件的冲突问题有多让人抓狂,所以让所任何技术人员都可以修改这个文件是不可能的。
让我们看看怎样让我们的工作和维护build phase脚本更简单的几个步骤/
最简单有效的方式就是导出你的代码到一个单独的文件中,如果你能从这边文章中学到一些东西,那我希望就是这个。导出脚本。
导出脚本最好的方式就是在你的工程目录创建一个”Build-Phases”文件夹,然后在文件夹里面my-scripts.sh。
你可以通过修改创建的脚本的权限来让你的脚本可以执行。
chmod u+x Build-Phases/my-script.sh
最后你可以替换Xcode build phase编辑器中的文本区域
$SRCROOT/Build-Phases/set-build-number
现在你和你的同事可以通过修改这个脚本文件的脚本代码而不是project.pbxproj,让代码比对更容易理解。
Xcode会自动为每个新的模块命名为”Run Script”,当你有多个的时候很容易让人困惑。双击Run Script来显示一个文本区域来修改名字。
随着项目的增长,你很可能需要不止一个build phase 脚本,一个让你保持整齐并且避免改变project.pbxproj文件的方法就是讲多个脚本整合到一个控制脚本。
这个观点就是在Xcode中只调用一个脚本文件,通过这个脚本执行别的脚本。
这个技术可以帮助你扩展你的代码,改变它们的顺序…整洁有序而且容易理解。
唯一需要明白的是你所有的脚本需要在预定义的build phases中执行,在这种情况下你需要把他们每个设置在它们需要的顺序。
你可以输出编译错误或者警告通过Xcode的方式。
echo "error:Your error message"
echo "warning: Your warning message"
这很方便,允许你通过代码和别的开发者进行交流。你可以使用这个来作为一个因为缺少软件的编译失败的提示示例。
一个常见的使用script build phases的例子就是在编译过程中集成第三方工具,但是当开发者的电脑中没有安装这个工具时该怎么办?一个好的方法就是取消这个编译而且通知他们他们的配置不正确.
set -e
if ! which > /dev/null; then
echo "error: is missing"
exit 1
fi
例如如果你想要确定新的开发者已经安装了SwiftLint,你可以这样
set -e
if ! which swiftlint > /dev/null; then
echo "error:SwfitLint is not installed.visit http://github.com/realm/SwiftLint to learn more."
exit 1
fi
或者如果你认为结束这个编译太严厉,你可以只是抛出一个警告
if ! which swiftlint > /dev/null; then
echo "warning:SwfitLint is not installed.visit http://github.com/realm/SwiftLint to learn more."
exit 1
fi
几乎所有的软件,scripts phase经常不会第一次就正确(至少对我而言是这样的),这里有2个调试建议
确保”Show environment variables in build log”选中框被选中,这回让XCode在编译失败时打印所有的环境变量,这样你就有能力确定你的假设正确与否。
在你的脚本开始处添加set -x来让shell打印所有的它执行的所有命令,这对帮助你找都哪一行代码出错非常有帮助。
记得使用 echo “error:message”和 echo “warning:message”来打印额外的信息帮助你调试问题。
运行脚本构建阶段非常有用,可以帮助您自动化一系列任务和改进你的代码库的总体质量。
我希望这篇文章为你提供了有用的技巧如何编写更好的脚本,如果你有问题,发现了一个错误,或需要帮助设置运行脚本请在下面留下你的评论,或者在Twitter上@mokagio取得联系。