xcodebuild命令行工具使用详解
xcodebuild命令行工具使用
如何通过命令行编译ios项目?
xcodebuild是一个命令行工具,允许你从命令行对Xcode项目和工作区执行编译、查询、分析、测试和归档操作。它对项目中包含的一个或多个目标或项目或工作区中包含的方案进行操作。xcodebuild提供了几个执行这些操作的选项,如其手册页所示。默认情况下,xcodebuild将命令的输出保存在Xcode应用程序的locations首选项窗格中定义的位置中。
有关各种xcodebuild用法,请参见下文。在运行以下任何命令之前,请确保导航到终端中包含项目或工作空间的目录。
要列出工作区中的所有方案,请在终端中运行以下命令:
xcodebuild -list -workspace <your_workspace_name>.xcworkspace
<your_workspace_name>是指你项目里工作空间的名字。
列出MyApplication工作区中的所有方案:
要列出项目中使用的所有目标、生成配置和方案,请在终端中运行以下命令:
xcodebuild -list -project <your_project_name>.xcodeproj
<your_project_name>是指你的项目名。
列出有关MyProject(一个Xcode项目)的所有信息:
要在项目中构建方案,请在终端中运行以下命令:
xcodebuild -scheme <your_scheme_name> build
其中<your_schemename>和build分别是要构建的方案的名称和要对方案执行的操作。
构建tvOS方案:
注意:xcodebuild支持可以在目标或方案上执行的各种构建操作,如构建(build)、分析(analyze)和归档(archive)。然而,当未指定任何操作时,默认情况下会执行构建。
要使用配置文件构建目标,请在终端中运行以下命令:
xocdebuild -tartget <your_target_name> -xcconfig <your_configuration_file>.xcconfig
其中的<your_target_name>和<your_configuration_file>分别是要构建的目标的名称和配置文件的名称。
使用配置文件来编译iOS目标:
要更改xcodebuild命令的输出位置,请使用SYROOT(生成产品路径)和DSTROOT(安装生成产品位置)生成设置,它们分别为Debug product和.dSYM文件以及release product指定一个位置。
为iOS程序的Debug版本设置位置:
为iOS程序的Release版本设置位置:
如何通过命令行来执行单元测试?
xcodebuild工具提供了一些选项来执行单元测试。
要通过命令行编译执行单元测试,可在终端执行以下命令:
通过命令行编译但不运行单元测试,可在终端执行以下命令:
通过命令行运行单不编译单元测试,可在终端运行以下命令的一种
测试操作需要指定方案(scheme)和目标(destination)。
-workspace选项用于指定你的工作空间的名字,该选项应在你的方案里包含工作空间时使用。
-project选项用于指定你的xcode project的名字,该选项应在你的方案里包含xcode project的时候使用。当同一目录中有多个Xcode项目时,它是必需的,否则是可选的。
-destination选项用于为你的单元测试指定一个目标,它接受一个参数,该参数描述要用作目标的设备、模拟器或Mac。它由一组逗号分隔的key=value对组成,它们取决于所使用的设备、模拟器或Mac。
-only-testing和-skip-testing选项是可选的,它们分别表示运行或跳过指定的测试,它们接受一个参数,该参数指定要执行或跳过的测试,格式如下:
TestTarget[/TestClass[/TestMethod]]
TestTarget是必需的,是测试包的名称。TestClass和TestMethod都是可选的,它们分别表示类的名称和要测试的方法的名称。
对于Mac OS应用程序, destinationspecifier支持platform和arch两个key, 如表1所示,这两个key是在macOS上运行单元测试所必须的
表1:
以下是在macOS中执行测试方案的示例,其中destinationspecifier设置为“platform=macOS,arch=x86_64”。
xcodebuild test -scheme macOS -destination 'platform=macOS,arch=x86_64'
对于iOS和tvOS应用程序,destinationspecifier支持的key为platform、name和id,如表2所示
在udid为965058a1c30d845d0dcec81cd6b908650a0d701c的设备上测试iOS方案:
xcodebuild test -workspace MyApplication.xcworkspace -scheme iOSApp -destination 'platform=iOS,id=965058a1c30d845d0dcec81cd6b908650a0d701c'
在iPhone上测试iOSApp方案:
在iPhone上测试但跳过“iOSAppUITests”:
xcodebuild test -workspace MyApplication.xcworkspace -scheme iOSApp -destination 'platform=iOS,name=IPhone' -skip-testing:iOSAppUITests
只测试iOSAppTests单元测试中的第二个测试类中的testExampleB:
对于iOS模拟器和tvOS模拟器应用程序,destinationspecifier支持的key为platform、name、id、OS。如表3所示
name和id键可与平台交互使用,平台是必需的键,OS键是可选的。
在iPad(12.9英寸)iOS 10.2的模拟器上测试iOS方案:
xcodebuild test -scheme iOS -destination 'platform=iOS Simulater,name=iPad Pro(12.9-inch),OS=10.2'
在D6FA2C2A-E297-406A-AA22-624B4834ACB2标识的tvOS模拟器上测试tvOS方案:
xcodebuild test -scheme tvOS -destination 'platform=tvOS Simulater,id=D6FA2C2A-E297-406A-AA22-624B4834ACB2'
destination选项还允许您在多个目标上运行相同的单元测试。这是通过多次将其添加到xcodebuild测试命令中完成的,如下所示。
在模拟器和iPod touch上测试iOS方案:
xcodebuild test -scheme iOS -destination 'platform=iOS Simulater,name=Iphone 6s,OS=10.3' -destination 'platform=iOS,name=iPod touch'
注:xcodebuild按顺序运行测试。例如,在上面的例子中,xcodebuild将首先在模拟器中测试iOS,然后在iPod touch上执行它。
如何通过命令行分别实现为测试编译和测试但不编译?
xcodebuild为Xcode的Product>build for>testing特性提供了操作。你必须指定一个方案来使用它。要使用它,请在终端中执行以下命令:
使用D6FA2C2A-E297-406A-AA22-624B4834ACB2标识的tvOS模拟器在tvOS方案中构建测试和相关目标:
xcodebuild build-for-testing -scheme tvOS -destination 'platform=tvOS Simulator,id=D6FA2C2A-E297-406A-AA22-624B4834ACB2'
build-for-testing生成一个xctestrun文件,保存在driverData文件夹中。
xcodebuild为Xcode的Product>Perform action>test without building特性提供了test-without-building命令。test-without-building要求你指定方案或xctestrun文件。
使用方案时的用法:
重要提示:使用方案时,test-without-building在构建根目录(SYMROOT)中搜索捆绑包。因此,在运行此命令之前,请确保构建目标或构建根目录包含要测试的捆绑包。
在模拟器中使用iOS 10.1在iPhone SE上测试iOSApp方案:
xcodebuild test-without-building -workspace MyApplication.xcworkspace -scheme iOSApp -destination 'platform=iOS Simulater,name=iPhone SE,OS=10.1'
使用xctestrun文件时的用法:
<your_xctestrun_name>是指包含测试运行参数的文件的名称。
重要提示:当使用xctestrun文件时,test-without-building将在文件中指定的路径上搜索捆绑包。因此,在运行此命令之前,请确保捆绑包位于指定路径。
使用6DC4A7BA-EA7F-40D6-A327-A0A9DF82F7F6标识的iOS模拟器测试iOSApp_iphonesimulator.xctestron中指定的捆绑包和其他参数:
使用3D95DF14-E8B7-4A05-B65B-78F381B74B22标识的iOS模拟器,测试除iOSApp_iphonemasimulator.xctstrun中指定的iOSAppUITest之外的所有测试:
xcodebuild test-without-building -xctestrun iOSApp_iphonesimulater.xctestrun -destination 'platform=iOS Simulator,id=3D95DF14-E8B7-4A05-B65B-78F381B74B22' -skip-testing:iOSAppUITests
注:build-for-testing和test-without-building为持续集成系统提供支持
xcodebuild命令行工具使用详解的更多相关文章
- 第九章 kubectl命令行工具使用详解
1.管理k8s核心资源的三种基础方法 陈述式管理方法:主要依赖命令行CLI工具进行管理 声明式管理方法:主要依赖统一资源配置清单(manifest)进行管理 GUI式管理方法:主要依赖图形化操作界面( ...
- JMeterPluginCMD命令行工具使用详解
MeterPluginCMD命令行工具生成png图片和csv统计文件 Jmeter是个纯java的开源的轻量级性能测试工具,功能强大.因为是轻量级的,与loadrunner相比,报告统计的相对较少.不 ...
- Wireshark命令行工具tshark详解(含例子)-01
Wireshark命令行工具tshark使用小记 1.目的 写这篇博客的目的主要是为了方便查阅,使用wireshark可以分析数据包,可以通过编辑过滤表达式来达到对数据的分析:但我的需求是,怎么样把D ...
- Windows下SVN命令行工具使用详解
根据我的记忆,似乎Windows 7下自自带一个svn命令行工具.如果你的机器没有,不必担心.你可以从http://subversion.tigris.org获 取subversion for win ...
- Oracle--DBV命令行工具用法详解及坏块修复
一,介绍 DBV(DBVERIFY)是Oracle提供的一个命令行工具,它可以对数据文件物理和逻辑两种一致性检查.但是这个工具不会检查索引记录和数据记录的匹配关系,这种检查必须使用analyze va ...
- Redis进阶实践之十四 Redis-cli命令行工具使用详解第一部分
一.介绍 redis学了有一段时间了,以前都是看视频,看教程,很少看官方的东西.现在redis的东西要看的都差不多看完了.网上的东西也不多了.剩下来就看看官网的东西吧,一遍翻译,一遍测试. ...
- Redis进阶实践之十五 Redis-cli命令行工具使用详解第二部分(结束)
一.介绍 今天继续redis-cli使用的介绍,上一篇文章写了一部分,写到第9个小节,今天就来完成第二部分.话不多说,开始我们今天的讲解.如果要想看第一篇文章,地址如下:http: ...
- Redis进阶实践之十四 Redis-cli命令行工具使用详解
转载来源:http://www.cnblogs.com/PatrickLiu/p/8508975.html 一.介绍 redis学了有一段时间了,以前都是看视频,看教程,很少看官方的东西.现在redi ...
- Android中使用am命令实现在命令行启动程序详解
在Android中,除了从界面上启动程序之外,还可以从命令行启动程序,使用的是命令行工具am. 复制代码代码如下: usage: am [subcommand] [options] start an ...
- Jmeter(三十八) - 从入门到精通进阶篇 - 命令行运行JMeter详解(详解教程)
1.简介 前边一篇文章介绍了如何生成测试报告,细心地小伙伴或者同学们可以看到宏哥启动Jmeter生成测试报告不是在gui页面操作的,而是在gui页面设置好保存以后,用命令行来生成测试报告的.这一篇宏哥 ...
随机推荐
- vivado程序示例
//full_add.v 全加器 module full_add( input a, input b, input carry, output sum, output count ); assign ...
- Java8中Stream的用法
Java8中Stream的用法 1.概述 Stream APl ( java.util.stream)把真正的函数式编程风格引入到Java中.这是目前为止对Java类库最好的补充,因为Stream A ...
- can't convert CUDA tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.
predict=predict.data.numpy() 这一行报错意思是:如果想把CUDA tensor格式的数据改成numpy时,需要先将其转换成cpu float-tensor随后再转到nump ...
- 字符流 -->字符节点流 FlieWrite 用法 FileReader 用法
1创建字符输出节点流(采用的是环境默认的编码)FileWriter fw = new FileWriter("存值的路径");2输出内容fw.write(2209);可以建立数组来 ...
- 《JavaScript高级程序设计》Chapter04 变量,作用域,内存
原始值&引用值 原始值(primitive value):Undefined, Null, Boolean, Number, String, Symbol 按值访问,直接操作存储在变量中的实际 ...
- activiti引擎的表结构(仅记录用)
act_hi_*:'hi'表示 history,此前缀的表包含历史数据,如历史(结束)流程实例,变量,任务等等.act_ge_*:'ge'表示 general,此前缀的表为全局通用数据,用于不同场景中 ...
- nodejs <a>带参数返回路由标记执行数据库操作
今天在测试mongo数据库操作维护的时候,测试了一下直接在表内添加操作列来完成数据的删除操作,直接返回数据库ID,页面表格如下: 通过点击删除,即可完成对应条目数据库删除操作. 1.mongo数据操作 ...
- 1011.Django状态保持以及表单
一.session保持状态 状态保持: 1. http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态: 2. 客户端与服务器端的一次通信,就是一次会话实现状态保持的方式:在客户端或服 ...
- mysql-开启日志记录功能
开启日志记录功能 -- 开启功能 SET GLOBAL general_log = ON; -- 保存到文件 SET GLOBAL log_output = 'file'; 查看日志内容 -- 查看日 ...
- 转发:前端组件化之Monorepo方案实战
前言 在上一篇的前端组件化方案探究中,我们研究了什么是组件化以及我们为什么需要组件化.也调研和测试了一些开源项目,并且在使用.学习.研究.对比之后最终确定了以 pnpm + workspace + c ...