首页 > 其他分享 >xcodebuild命令行工具使用详解

xcodebuild命令行工具使用详解

时间:2023-02-16 18:11:06浏览次数:55  
标签:xcodebuild 命令行 destination iOS platform 详解 测试 test

xcodebuild命令行工具使用

如何通过命令行编译ios项目?

xcodebuild是一个命令行工具,允许你从命令行对Xcode项目和工作区执行编译、查询、分析、测试和归档操作。它对项目中包含的一个或多个目标或项目或工作区中包含的方案进行操作。xcodebuild提供了几个执行这些操作的选项,如其手册页所示。默认情况下,xcodebuild将命令的输出保存在Xcode应用程序的locations首选项窗格中定义的位置中。
有关各种xcodebuild用法,请参见下文。在运行以下任何命令之前,请确保导航到终端中包含项目或工作空间的目录。

  • 要列出工作区中的所有方案,请在终端中运行以下命令:

    xcodebuild -list -workspace <your_workspace_name>.xcworkspace
    

    <your_workspace_name>是指你项目里工作空间的名字。

    列出MyApplication工作区中的所有方案:

    image-20230216105502024

  • 要列出项目中使用的所有目标、生成配置和方案,请在终端中运行以下命令:

    xcodebuild -list -project <your_project_name>.xcodeproj
    

    <your_project_name>是指你的项目名。

    列出有关MyProject(一个Xcode项目)的所有信息:

    image-20230216111534424

  • 要在项目中构建方案,请在终端中运行以下命令:

    xcodebuild -scheme <your_scheme_name> build
    

    其中<your_schemename>和build分别是要构建的方案的名称和要对方案执行的操作。

    构建tvOS方案:

    image-20230216112145940

    注意:xcodebuild支持可以在目标或方案上执行的各种构建操作,如构建(build)、分析(analyze)和归档(archive)。然而,当未指定任何操作时,默认情况下会执行构建。

  • 要使用配置文件构建目标,请在终端中运行以下命令:

    xocdebuild -tartget <your_target_name> -xcconfig <your_configuration_file>.xcconfig
    

    其中的<your_target_name>和<your_configuration_file>分别是要构建的目标的名称和配置文件的名称。

    使用配置文件来编译iOS目标:

    image-20230216134827409

  • 要更改xcodebuild命令的输出位置,请使用SYROOT(生成产品路径)和DSTROOT(安装生成产品位置)生成设置,它们分别为Debug product和.dSYM文件以及release product指定一个位置。

    为iOS程序的Debug版本设置位置:

    image-20230216140039931

    为iOS程序的Release版本设置位置:

    image-20230216140229101

如何通过命令行来执行单元测试?

xcodebuild工具提供了一些选项来执行单元测试。

要通过命令行编译执行单元测试,可在终端执行以下命令:

image-20230216141254837

通过命令行编译但不运行单元测试,可在终端执行以下命令:

image-20230216141647420

通过命令行运行单不编译单元测试,可在终端运行以下命令的一种

image-20230216142341062

image-20230216142412078

测试操作需要指定方案(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:
    image-20230216151549651

    以下是在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
    image-20230216162259616

    在udid为965058a1c30d845d0dcec81cd6b908650a0d701c的设备上测试iOS方案:

    xcodebuild test -workspace MyApplication.xcworkspace -scheme iOSApp -destination 'platform=iOS,id=965058a1c30d845d0dcec81cd6b908650a0d701c'
    

    在iPhone上测试iOSApp方案:

    image-20230216163213309

    在iPhone上测试但跳过“iOSAppUITests”:

    xcodebuild test -workspace MyApplication.xcworkspace -scheme iOSApp -destination 'platform=iOS,name=IPhone' -skip-testing:iOSAppUITests
    

    只测试iOSAppTests单元测试中的第二个测试类中的testExampleB:

    image-20230216164030901

  • 对于iOS模拟器和tvOS模拟器应用程序,destinationspecifier支持的key为platform、name、id、OS。如表3所示

    表3
    image-20230216164637538

    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特性提供了操作。你必须指定一个方案来使用它。要使用它,请在终端中执行以下命令:

    image-20230216171658148

    使用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文件。

    • 使用方案时的用法:
      image-20230216172843729

      重要提示:使用方案时,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文件时的用法:
      image-20230216174306280

      <your_xctestrun_name>是指包含测试运行参数的文件的名称。

      重要提示:当使用xctestrun文件时,test-without-building将在文件中指定的路径上搜索捆绑包。因此,在运行此命令之前,请确保捆绑包位于指定路径。

      使用6DC4A7BA-EA7F-40D6-A327-A0A9DF82F7F6标识的iOS模拟器测试iOSApp_iphonesimulator.xctestron中指定的捆绑包和其他参数:

      image-20230216174708715

      使用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,命令行,destination,iOS,platform,详解,测试,test
From: https://www.cnblogs.com/wang-wang-blog/p/17127781.html

相关文章

  • String详解
    String对象的不可变原因,String对象的内存布局,及String对象之间的执行==,equals,+运算时的分析。Author:MsuenbDate:2023-02-16java.lang.String类代表字符串。String......
  • 【IMX6ULL学习笔记】三、U-BOOT Makefile详解
    00、通识版本号VERSION=2016//主版本号PATCHLEVEL=03 //补丁版本号SUBLEVEL= //次版本号EXTRAVERSION=//附加版本信息NAME= //名字有关的,一般......
  • Quartz定时任务Cron表达式详解
    Quartz定时任务Cron表达式详解cron表达式用于配置cronTrigger的实例。cron表达式实际上是由七个子表达式组成。这些表达式之间用空格分隔。1.Seconds(秒)2.Minutes(分)3.H......
  • awk命令详解
    参考:https://www.cnblogs.com/My-IronMan/p/15721682.htmlawk作用:处理文本awk语法格式awk[参数][处理内容][操作对象]awk使用方法1print打印2NF统计总字段......
  • DNS详解
    DNS(DomainNameSystem,域名系统),互联网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住IP。通过访问域名,最终得到该域名对应的IP地......
  • List详解
    List代表有序的,元素可以重复的集合。ArrayList和LinkedList区别ArrayList的实现是基于数组,LinkedList的实现是基于双向链表;对于随机访问ArrayList要优于LinkedList,A......
  • 狂神说Markdown语法详解 || 笔记
    Typora文本编辑总结标题:#空格+标题名称 回车后为一级标题##空格+标题名称 回车后为二级标题...往后以此类推添加#到六级标题字体:**+文本+** 回车后显示为粗......
  • 视频监控AI视频智能分析平台EasyCVR黑名单功能优化详解
    随着互联网的快速发展,网络安全问题也日益增多。保护用户的数据隐私安全也成为我们研发平台功能的重要关注点。EasyCVR视频融合平台支持白名单与黑名单功能,能极大保障设备的......
  • kubectl命令详解
    一、kubectl基本命令1、陈述式资源管理方法:1、kubernetes集群管理集群资源的唯一入口是通过相应的方法调用apiserver的接口2、kubectl是官方的CLI命令行工具,用于与ap......
  • 神经网络基础部件-卷积层详解
    前言在全连接层构成的多层感知机网络中,我们要通过将图像数据展平成一维向量来送入模型,但这会忽略了每个图像的空间结构信息。理想的策略应该是要利用相近像素之间的相互关......