iOS系统提供开发环境下命令行编译工具:xcodebuild
2016-08-17 20:02
441 查看
iOS系统提供开发环境下命令行编译工具:xcodebuild【3】
Workspace:简单来说,Workspace就是一个容器,在该容器中可以存放多个你创建的Xcode Project, 以及其他的项目中需要使用到的文件。
使用Workspace的好处有:
1),扩展项目的可视域,即可以在多个项目之间跳转,重构,一个项目可以使用另一个项目的输出。Workspace会负责各个Project之间提供各种相互依赖的关系;
2),多个项目之间共享Build目录。
Project:指一个项目,该项目会负责管理生成一个或者多个软件产品的全部文件和配置,一个Project可以包含多个Target。
Target:一个Target是指在一个Project中构建的一个产品,它包含了构建该产品的所有文件,以及如何构建该产品的配置。
Scheme:一个定义好构建过程的Target成为一个Scheme。可在Scheme中定义的Target的构建过程有:Build/Run/Test/Profile/Analyze/Archive
BuildSetting:配置产品的Build设置,比方说,使用哪个Architectures?使用哪个版本的SDK?。在Xcode Project中,有Project级别的Build Setting,也有Target级别的Build Setting。Build一个产品时一定是针对某个Target的,因此,XCode中总是优先选择Target的Build Setting,如果Target没有配置,则会使用Project的Build Setting。
弄清楚上面的这些概念之后,xcodebuild就很好理解了,官网上对其作用的描述如下:
xcodebuild就是用了构建产品的命令行工具,其用法可以归结为3个部分:
可构建的对象
构建行为
一些其他的辅助命令
可以构建的对象有,默认情况下会运行project下的第一个target:
workspace:必须和“-scheme”一起使用,构建该workspace下的一个scheme。
project:当根目录下有多个Project的时候,必须使用“-project”指定project,然后会运行
target:构建某个Target
scheme:和“-workspace”一起使用,指定构建的scheme。
……
构建行为包括:
clean:清除build目录下的
build: 构建
test: 测试某个scheme,必须和"-scheme"一起使用
archive:打包,必须和“-scheme”一起使用
……
辅助命令包括:
-sdk:指定构建使用的SDK
-list:列出当前项目下所有的Target和scheme。
-version:版本信息
…...
关于xcodebuild更多详细的命令行请参见:https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/xcodebuild.1.html
下图是使用XcodeBuild运行一个scheme的build的结果:
了解了xcodebuild的用法之后,接下来分析一下xcodebuild的主要缺陷:
从上图直接可以得到的感觉,其脚本输出的可读性极差,
只能要么完整的运行一个target或者scheme,要么全部不运行。不能指定运行Target中特定的测试。
最令人发指的是,XCode 4中的xcodebuild居然不支持iOSUnitTest的Target【5】,当我尝试运行一个iOS App的测试target时,得到如下的错误:
对于上面提到的缺陷,Facebook给出了他们的解决方案:xctool:
xctool is a replacement for Apple's xcodebuild that makes it easier to build and test iOS and Mac products. It's especially helpful for continuous integration.
其作用是替代xcodebuild,目的是让构建和测试更加容易,更好的支持持续集成。从个人感受来看,它的确成功取代了xcodebuild。但是xctool说到底只是对xcodebuild的一个封装,只是提供了更加丰富的build指令,因此,使用xctool的前提是xcodebuild已经存在,且能正常工作。
xctool不支持target构建,只能使用scheme构建。
支持“-only”指令运行指定的测试。
支持多种格式的build报告。
例子:
下图是我使用xctool运行test的效果:
解决方法:到Project Setting中,把"Build Active Architecture Only"设置为NO
Code Sign error: A valid provisioning profile matching the application's Identifier 'dk.muncken.MyApp' could not be found
解决方法:通过“-sdkiphonesimulator”指定SDK,从而能够使用符合iOS约定的application Identifier。
xcodebuild
在介绍xcodebuild之前,需要先弄清楚一些在XCode环境下的一些概念【4】:Workspace:简单来说,Workspace就是一个容器,在该容器中可以存放多个你创建的Xcode Project, 以及其他的项目中需要使用到的文件。
使用Workspace的好处有:
1),扩展项目的可视域,即可以在多个项目之间跳转,重构,一个项目可以使用另一个项目的输出。Workspace会负责各个Project之间提供各种相互依赖的关系;
2),多个项目之间共享Build目录。
Project:指一个项目,该项目会负责管理生成一个或者多个软件产品的全部文件和配置,一个Project可以包含多个Target。
Target:一个Target是指在一个Project中构建的一个产品,它包含了构建该产品的所有文件,以及如何构建该产品的配置。
Scheme:一个定义好构建过程的Target成为一个Scheme。可在Scheme中定义的Target的构建过程有:Build/Run/Test/Profile/Analyze/Archive
BuildSetting:配置产品的Build设置,比方说,使用哪个Architectures?使用哪个版本的SDK?。在Xcode Project中,有Project级别的Build Setting,也有Target级别的Build Setting。Build一个产品时一定是针对某个Target的,因此,XCode中总是优先选择Target的Build Setting,如果Target没有配置,则会使用Project的Build Setting。
弄清楚上面的这些概念之后,xcodebuild就很好理解了,官网上对其作用的描述如下:
xcodebuild builds one or more targets contained in an Xcode project, or builds a scheme contained in an Xcode workspace or Xcode project.
xcodebuild就是用了构建产品的命令行工具,其用法可以归结为3个部分:
可构建的对象
构建行为
一些其他的辅助命令
可以构建的对象有,默认情况下会运行project下的第一个target:
workspace:必须和“-scheme”一起使用,构建该workspace下的一个scheme。
project:当根目录下有多个Project的时候,必须使用“-project”指定project,然后会运行
target:构建某个Target
scheme:和“-workspace”一起使用,指定构建的scheme。
……
构建行为包括:
clean:清除build目录下的
build: 构建
test: 测试某个scheme,必须和"-scheme"一起使用
archive:打包,必须和“-scheme”一起使用
……
辅助命令包括:
-sdk:指定构建使用的SDK
-list:列出当前项目下所有的Target和scheme。
-version:版本信息
…...
关于xcodebuild更多详细的命令行请参见:https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/xcodebuild.1.html
下图是使用XcodeBuild运行一个scheme的build的结果:
了解了xcodebuild的用法之后,接下来分析一下xcodebuild的主要缺陷:
从上图直接可以得到的感觉,其脚本输出的可读性极差,
只能要么完整的运行一个target或者scheme,要么全部不运行。不能指定运行Target中特定的测试。
最令人发指的是,XCode 4中的xcodebuild居然不支持iOSUnitTest的Target【5】,当我尝试运行一个iOS App的测试target时,得到如下的错误:
对于上面提到的缺陷,Facebook给出了他们的解决方案:xctool:
xctool
xctool在 其主页直接表明了其目的:xctool is a replacement for Apple's xcodebuild that makes it easier to build and test iOS and Mac products. It's especially helpful for continuous integration.
其作用是替代xcodebuild,目的是让构建和测试更加容易,更好的支持持续集成。从个人感受来看,它的确成功取代了xcodebuild。但是xctool说到底只是对xcodebuild的一个封装,只是提供了更加丰富的build指令,因此,使用xctool的前提是xcodebuild已经存在,且能正常工作。
安装
xctool的安装非常简单,只需要clone xctool的repository到项目根目录就可以使用, 如果你的机器上安装有Homebrew,可以通过“brew install xctool”命令直接安装。(注意:使用xctool前一定要首先确认xcodebuild已安装且能正确工作)。用法
关于xctool的用法就更加人性化了,几乎可以重用所有的xcodebuild的指令,配置。只需要注意一下几点:xctool不支持target构建,只能使用scheme构建。
支持“-only”指令运行指定的测试。
支持多种格式的build报告。
例子:
path/to/xctool.sh -workspace YourWorkspace.xcworkspace -scheme YourSchemetest -only SomeTestTarget:SomeTestClass/testSomeMethod
下图是我使用xctool运行test的效果:
常见问题:
No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=armv7 armv7s).解决方法:到Project Setting中,把"Build Active Architecture Only"设置为NO
Code Sign error: A valid provisioning profile matching the application's Identifier 'dk.muncken.MyApp' could not be found
解决方法:通过“-sdkiphonesimulator”指定SDK,从而能够使用符合iOS约定的application Identifier。
相关文章推荐
- 【JZOJ 4710】Value
- Java BlockingQueue
- 【NOIP2016提高A组模拟8.17】(雅礼联考day1)Value
- vs 2015 unique处理重复字符的怪异方式
- Easyui-交互式消息弹出框
- 让Activity UI普通控件具有弹性效果(一)
- JZOJ4710 Value
- 详解: private static final long serialVersionUID = 1L
- zzuil G
- 【NOIP提高】Value
- queryRuner如何获得bean对象,当这个bean对象中包含其他对象的时候
- 改NavigationView的MenuItem的字体颜色并修改默认选中的item
- 建造者模式
- iOS开发之状态栏UIStatusBar图标操作
- ueditor 设置默认字体、大小和颜色;回车事件捕获
- UIScrollViewDelegate 代理方法和表格的Delegate 方法冲突
- ueditor使用小结
- hdu 1005 Number Sequence
- Bluetooth在andriod下的开发基本操作
- SurfaceView原理分析与应用