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页面设置好保存以后,用命令行来生成测试报告的.这一篇宏哥 ...
随机推荐
- 关于js数组方法filter()
1. filter() 都是数组方法,这个方法和forEach()的方法的区别又是什么呢? 2. 先说结论 filter() 和 forEach() 都是遍历数组的方法,甚至它们匿名函数的形参都是一样 ...
- PTA_Maximum Subsequence Sum
Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to be { N ...
- javascript原型,继承
//普通对象 //函数对象(有原型 prototy 的属性) //原型的应用 继承 function Amial(){ this.type = '小于' } function cat(name){ t ...
- 乘积小于K的子数组
乘积小于K的子数组 给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目. 示例 1: 输入:nums = [10,5,2,6], k = 10 ...
- vs 2015 默认管理员启动
方法一: 找到 VS快捷方式 所在位置,并对其高级属性中的"用管理员身份运行"进行勾选,然后进行确定. 此方法 如果是通过sln文件的快捷方式打开的,不是管理员 方法二: 1.打开 ...
- FCC 高级算法题 验证电话号码
Validate US Telephone Numbers 如果传入字符串是一个有效的美国电话号码,则返回 true. 用户可以在表单中填入一个任意有效美国电话号码. 下面是一些有效号码的例子(还有下 ...
- 去除python中数据的0值
import numpy as np a = [0, 1, 2] a = np.array(a) a = a[a != 0].tolist() print(a) //a = [1, 2]
- lcd 驱动程序框架分析
在嵌入式产品中,lcd的用途可谓很大,很多产品都会用到lcd作为人机交互的接口,在linux内核中当然也有lcd的驱动,内核中都是做好了框架,用平台设备来添加和管理不同的lcd驱动程序,因为每款arm ...
- 视频播放-videojs
视频播放-video-js组件 安装 yarn add video.js --save npm install video.js --save 代码 import React, { useEffect ...
- Arduino优化 减少重复代码 例2
Example->Blink: void setup() { pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUI ...

