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所示

    表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所示

    表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命令行工具使用详解的更多相关文章

  1. 第九章 kubectl命令行工具使用详解

    1.管理k8s核心资源的三种基础方法 陈述式管理方法:主要依赖命令行CLI工具进行管理 声明式管理方法:主要依赖统一资源配置清单(manifest)进行管理 GUI式管理方法:主要依赖图形化操作界面( ...

  2. JMeterPluginCMD命令行工具使用详解

    MeterPluginCMD命令行工具生成png图片和csv统计文件 Jmeter是个纯java的开源的轻量级性能测试工具,功能强大.因为是轻量级的,与loadrunner相比,报告统计的相对较少.不 ...

  3. Wireshark命令行工具tshark详解(含例子)-01

    Wireshark命令行工具tshark使用小记 1.目的 写这篇博客的目的主要是为了方便查阅,使用wireshark可以分析数据包,可以通过编辑过滤表达式来达到对数据的分析:但我的需求是,怎么样把D ...

  4. Windows下SVN命令行工具使用详解

    根据我的记忆,似乎Windows 7下自自带一个svn命令行工具.如果你的机器没有,不必担心.你可以从http://subversion.tigris.org获 取subversion for win ...

  5. Oracle--DBV命令行工具用法详解及坏块修复

    一,介绍 DBV(DBVERIFY)是Oracle提供的一个命令行工具,它可以对数据文件物理和逻辑两种一致性检查.但是这个工具不会检查索引记录和数据记录的匹配关系,这种检查必须使用analyze va ...

  6. Redis进阶实践之十四 Redis-cli命令行工具使用详解第一部分

    一.介绍       redis学了有一段时间了,以前都是看视频,看教程,很少看官方的东西.现在redis的东西要看的都差不多看完了.网上的东西也不多了.剩下来就看看官网的东西吧,一遍翻译,一遍测试. ...

  7. Redis进阶实践之十五 Redis-cli命令行工具使用详解第二部分(结束)

    一.介绍           今天继续redis-cli使用的介绍,上一篇文章写了一部分,写到第9个小节,今天就来完成第二部分.话不多说,开始我们今天的讲解.如果要想看第一篇文章,地址如下:http: ...

  8. Redis进阶实践之十四 Redis-cli命令行工具使用详解

    转载来源:http://www.cnblogs.com/PatrickLiu/p/8508975.html 一.介绍 redis学了有一段时间了,以前都是看视频,看教程,很少看官方的东西.现在redi ...

  9. Android中使用am命令实现在命令行启动程序详解

    在Android中,除了从界面上启动程序之外,还可以从命令行启动程序,使用的是命令行工具am. 复制代码代码如下: usage: am [subcommand] [options] start an ...

  10. Jmeter(三十八) - 从入门到精通进阶篇 - 命令行运行JMeter详解(详解教程)

    1.简介 前边一篇文章介绍了如何生成测试报告,细心地小伙伴或者同学们可以看到宏哥启动Jmeter生成测试报告不是在gui页面操作的,而是在gui页面设置好保存以后,用命令行来生成测试报告的.这一篇宏哥 ...

随机推荐

  1. You Don't Know JS阅读笔记

    JS特性查漏补缺 [1,2,3]=="1,2,3" //true 前者会隐式转换,用逗号组合成字符串 212>'22' //true 有一个值不是number就会隐式转换成n ...

  2. 使用 nvm 管理 node.js 版本

    简介 在实际的前端开发过程中,可能会经常遇见 node.js 的版本问题,不同的项目需要使用不同的 node.js 版本. 直接安装的话,只能安装和使用 node.js 的一个版本.可以使用 nvm ...

  3. 学Java的第5天,今天做了个双色球系统

    今天是学JAVA的第5天,刚刚把方法学完,然后就在这做黑马的题. 用了一个多小时时间,把他的 这些题都做完了 但是最后一道题,这个双色球系统我感觉挺有意思的 我看到这个题,分析后感觉需要4种方法: 1 ...

  4. mitudesk的pytorch基础

    pytorch定义张量的方法和Numpy差不多 2. 标量才能对张量求导,代表其在各个方向上的偏导数,结果是一个张量 3. 在pyt中张量可以对张量求导,前提条件是求导时传一个1,1,1,1,进去,其 ...

  5. 中值滤波 ordfilt2函数

    滤波是过滤掉信号中没用的波段 ordfilt2函数语法格式为:B=ordfilt2(A,order,domain)B=ordfilt2(A,order,domain,S)B=ordfilt2(..., ...

  6. 解决VSCode无法显示Unity代码提示和源代码

    1,先删除项目目录下的配置文件,也可以理解为除文件夹外的其他文件 2,先把vscode选中,下拉框中没有vscode的找到文件就可以导进来再选中.然后红框里的不要勾选,因为我是这么做的,你也可以试着勾 ...

  7. 关于uniapp图片默认的空隙处理方案

    display:block; 或者 display:flex;

  8. PHP操作MySQL批量Update的写法,各框架通用防注入版

    使用别人的扩展遇到了问题,发现没有做SQL注入的处理.我又写了个轮子,根据自己需求扩展了下,有需要的小伙伴可以直接取用. 这里就直接粘贴源码了,会用PHPD ,基本都会如何把它运用到各个框架里的. 本 ...

  9. NOIP2012普及组

    T2]寻宝 读懂题目!! 是逆时针,第几个有钥匙的房间,还有能够直接上楼的是作为第一个有钥匙的房间,而不是就从这里直接上楼了 #include<iostream> #include< ...

  10. linux行去重的一种方法

    awk '{x[$0]++}END{for(i in x)print i}' newsub > newsub2// orcat oldword| awk  -F "\t" ' ...