XCode Run Script

由于在尝试使用Carthage导入FileKit库,发现xcode还有这么牛逼的功能。


转自龙思

XCode Build和version

version是app发布时用户看到的版本号。

build的为了方便开发者多次提交binary, 比如被苹果reject后。

例如,第一次提交version和build都是1.0.

假如审核没过,那么修改代码后新的构建的version还是1.0,build改为1.0.1就ok了。


翻译自[mokacoding](http://www.mokacoding.com/blog/better-

XCode Run Script

build-phase-scripts/)

Xcode提供让开发者在编译程序时运行自己定义的代码。XCode Run Script_第1张图片

它提供了一些便利的方法:
* 动态设置Build和version ..
* 加载调试选项来改变运行环境
* 为图标添加build号或者调试模式水印

不仅如此,第三方工具例如Carthage和CocoPods依靠Build phases Script来集成

不幸的是Xcode提供给我们用于操作这些脚本的界面不是最适用的。

首先,在这个区域写作和编辑是不理想的,尤其在XCode8.2 beta
1中这个文本区域不能调整大小。

XCode Run Script_第2张图片

更糟糕的是这段代码被保存在project文件中:所有的显示在一行!谁应该如何理解这样的差异呢。XCode Run Script_第3张图片

让这段代码更难被阅读的是当它第一次添加时或者修改后。

这里写图片描述

你能认出这里面的区别吗?

对于团队开发成员而言,代码的可读性和可维护性是首要的,所有的代码修改都被记录在版本控制中。

更重要的是,如果你已经使用过一段时间的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

XCode Run Script_第4张图片

现在你和你的同事可以通过修改这个脚本文件的脚本代码而不是project.pbxproj,让代码比对更容易理解。

XCode Run Script_第5张图片

修改名字

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在编译失败时打印所有的环境变量,这样你就有能力确定你的假设正确与否。
XCode Run Script_第6张图片

在你的脚本开始处添加set -x来让shell打印所有的它执行的所有命令,这对帮助你找都哪一行代码出错非常有帮助。

记得使用 echo “error:message”和 echo “warning:message”来打印额外的信息帮助你调试问题。


运行脚本构建阶段非常有用,可以帮助您自动化一系列任务和改进你的代码库的总体质量。
我希望这篇文章为你提供了有用的技巧如何编写更好的脚本,如果你有问题,发现了一个错误,或需要帮助设置运行脚本请在下面留下你的评论,或者在Twitter上@mokagio取得联系。

你可能感兴趣的:(mac-cocoa)