iOS 8:【转】让构建和测试变得更轻松:xctool

源地址:http://yangfei.me/blog/xctool/

控制了一门语言的构建系统(build system),就控制了这门语言的命运,以及它的生态和社区。

Objective-C 用很短的时间,取得了非常大的变化。在短短几年间,这门语言从 NeXT 的“废墟”中走出,成为颇具影响力的一门语言。开源社区对于 Objective-C 有着巨大的贡献,其中一个很重要的方面是:开发工具。

例如 CocoaPods,它充分证明了科技和社区结合的威力。两年间,有超过 2700 个开源的库或框架被添加进去,你只需要简单的命令行 - pod install,就可以轻松管理第三方库。

开源社区对于 iOS 和 Mac OS X 开发的各个方面都有着巨大贡献,第三方库管理只是其中一个,其他方面还包括自动配置和分发报告BUG文档检索等。

但是本周,我们聚焦于这样一个工具:它重新定义了构建过程,是新一代开发集成的基础——xctool。

xctool 是 Fred Potter 的开源项目,来自于他在 Facebook 工作中创建的自动构建系统。xctool 用于替换 Xcode.app 中的 xcodebuild

在 Xcode 中点击“Build & Run”,所有的 project、build target 和 scheme settings 都被传到 xcodebuild,xcodebuild 调用构建的命令行,然后执行 .ipa 文件运行在真机或模拟器上。

这个过程我们只能祈祷它顺利了,因为 Xcode 将自己的构建系统封闭起来,我们从外部很难访问和控制。当我们试图通过 Terminal.app 和 xcodebuild 交互的时候,会发现真的很难用。

与其使用上个时代的工具,狂打断点去遍历所有错误,不如让 xctool 来告诉你什么是现代的解决方案。

美学和风格

xctool 给人的第一印象是它那漂亮、彩色的输出样式。

我们自己作为苹果硬件和软件的用户,对设计绝对不会轻视。xctool 也是。 它把构建过程的每一步都组织的很整洁,通过 ANSI 标准色 和 Unicode 符号输出易懂、易读的报告。

但是 xctool 的美丽不仅是外在,build 的过程中可以生成用其他工具可读的报告:

  xctool -reporter plain:output.txt build

报告类型:

  • pretty:(默认)输出样式使用 ANSI 标准色和 Unicode 符号
  • plain:类似 pretty,但没有 ANSI 标准色和 Unicode 符号
  • phabricator:将构建/测试的结果输出为 JSON 数组,可导入到 Phabricator 这个 code-review 工具
  • junit:生成兼容 JUnit/xUnit 的 XML 格式的测试结果
  • json-stream:输出构建/测试的事件流 ( JSON 字典格式),一行一个(如图)
  • json-compilation-database:输出 JSON Compilation Database,可用于基于 Clang Tooling 的工具,如 OCLint

集成构建系统

相对于 xcodebuild,xctool 另一个重大改进是可以和 Xcode.app 一样运行测试(xcodebuild 并不能分辨哪些 target 是 test target,从而单独运行它们)。

单单这个原因,对于 Objective-C 社区的持续集成测试这个领域,xctool 就有非常大的意义。

Travis CI

Travis CI 为开源项目提供免费的持续集成服务(商业项目收费),支持 Objective-C。它可以在你每次提交到 GitHub 时自动运行你的测试代码,如果最新的提交导致构建失败它会通知你。

在你的 Objective-C 项目中添加 Travis CI,你需要创建账号绑定 GitHub,然后在你的 repo 中添加 .travis.yml 文件:

.travis.yml

language: objective-c
before_install:
    - brew update
    - brew install xctool
script: xctool -workspace MyApp.xcworkspace -scheme MyApp test

OCLint

OCLint 是一个静态代码分析器,可以检测 Objective-C 代码(同时支持 C 和 C++),发现常见的问题:例如 if/else/try/catch/finally 声明出错、未被使用的本地实例和参数、过度复杂(有效代码行数 和 循环复杂度太高)、冗余代码、代码异味、以及其他不好的代码。

还记得 xctool 的 json-compilation-database 格式吧,这种格式可以被 OCLint 直接读取,进而进行神奇的静态分析。

在我写这篇文章的时候,离构建系统集成被广泛接受还有很长的路,但我的希望是,既然已经开始, 大家就应该齐心协力,让这个有前途的工具变得更加的强大。

这就像一座城市,随着人口的增长,基础设施就需要改变。通过各种各样的方式,通过本地政府、新兴组织,或者其他。总之,环境需要改变,以适应人口的增长。

Objective-C 已经并且还将随着 iOS 设备的流行而快速进化。为更多新进开发者提供必要的基础设施是社区的责任,当然这离不开与苹果的协作(有时是反对或抗议)。我们在这方面做得如何,决定了我们是否真正理解并传达了作为专业开发者应当扮演的角色,以及应当的承担责任。

我们是该成为平庸的业余者,还是该成为改善技术的关键角色?

xctool,和社区的其他工具一样,为这门语言的未来和生态,提供了希望和灵感。让我们继续创造这样强大的工具,创造我们为之自豪的开发体验。

注:本文译自 NSHipster

时间: 2024-12-29 06:41:33

iOS 8:【转】让构建和测试变得更轻松:xctool的相关文章

通过四种方式让PHP编码变得更轻松

通过四种方式让PHP编码变得更轻松 尽管已经目前PHP语言已经建立起属于自己的软件文化,但要找到它令人抓狂的弊端也绝对不是难事.我们曾经在之前的文章中列出过该语言最让开发人员难以接受的十二大糟糕特性. 不过在过去几年当中,PHP已经发生了一系列变动——从语言本身到相关生态系统再到对开发者社区的支持——这些确实值得我们加以关注.尽管已经抛弃了PHP并投身于Python或者Ruby的用户们不太可能在短时间内被吸引回来,但已经有迹象表明确实有人在不遗余力地对PHP加以完善.下面我们就一同来了解PHP语

CoreCRM 开发实录——Travis-CI 实现 .NET Core 程度在 macOS 上的构建和测试 [无水干货]

猿教程_-webapi教程-WebAPI教程 猿教程_-webapi教程-Web API概述 猿教程_-webapi教程-新建Web Api项目 猿教程_-webapi教程-测试Web API 猿教程_-webapi教程-Web API Controller 猿教程_-webapi教程-配置Web API 猿教程_-webapi教程-Web API路由 猿教程_-webapi教程-参数绑定 猿教程_-webapi教程-Action方法返回类型 猿教程_-webapi教程-Web API Requ

软件构建、测试和部署自动化

不管是传统瀑布式开发模式还是现如今互联网行业流行的敏捷开发模式其整个过程必不可少存在软件代码编写.代码构建.软件测试(代码静态分析.单元测试.模块测试和系统集成测试等).软件部署等主要阶段.传统的做法往往是通过人工的投入方式一个阶段一个阶段的去执行实施,这好比传统的家庭作坊式手工生产工业品时代或劳动密集的工厂加工时代.现如今工业品的生产已逐步走向自动化生产流水线而解放出来的人力更多地是投入到自动化生产线无法替代的产品设计上.那反观软件产品的生产过程,我们会发现它在国内仍也大部分处于家庭作坊或大规

【转1】Appium 1.6.3 在Xcode 8, iOS 10.2(模拟器)测试环境搭建 经验总结

Appium 1.6.3 在Xcode 8, iOS 10.2(模拟器)测试环境搭建 经验总结 关于 Appium 1.6.3 在Xcode 8, 10.2 的iOS模拟器上的问题很多,本人也差点放弃,最终成功运行,确实不容易,故此写篇文章,供大家参考,让大家少走弯路.一. 安装Appium(1) 先安装node-js,然后通过node-js命令安装 Appium     在https://nodejs.org/en/download/ 下载 macOS Installer (.pkg) 安装,

selenium结合docker构建分布式测试环境

selenium是目前web和app自动化测试的主要框架.对于web自动化测试而言,由于selenium2.0以后socker服务器由本地浏览器自己启动且直接通过浏览器原生API操作页面,故越来越多的人不再使用selenium RC了.大家使用的大多数是selenium-client,python版本的selenium-client最新版本是3.3.3(2017-04-04发布),却忽略了selenium server!事实上在大型的Grid分布式布局中必须要使用selenium server,

译:基于Spring Cloud Stream构建和测试 message-driven 微服务

原文链接:https://piotrminkowski.wordpress.com/2018/06/15/building-and-testing-message-driven-microservices-using-spring-cloud-stream/ 作者: Piotr Mińkowski 译者: helloworldtang img Spring Boot和Spring Cloud为您提供了一个利用不同的通信方式快速构建微服务的解决方案.您可以基于Spring Cloud Netfli

Spring Boot -05- 多模块结构项目构建与测试(详细图文教程)IDEA 版

Spring Boot -05- 多模块结构项目构建与测试(详细图文教程)IDEA 版 百度很多博客都不详细,弄了半天才把 Spring Boot 多模块项目构建开发整的差不多,特地重新创建配置,记录一下,也分享给有需要的人 本篇也会非常详细的介绍涉及的基础知识点,更多都写在注释上了 先放成功截图: (1)项目结构: (2)启动: (3)测试主子模块: (4)测试子模块依赖: 第一步:创建父模块,子模块 (1)打开创建项目窗口,点击 Create New Project (2)填写 (3)填写

雷林鹏分享:使用Yaf Codes Generator工具构建YAF测试环境

成功安装YAF框架后,我们将通过Yaf Codes Generator工具构建YAF测试环境. Yaf Codes Generator工具在安装包/tools/cg 目录中,下面介绍一下YAF测试环境的构建方法: 1.进入/tools/cg 目录 cd /tools/cg 2.执行命令 php yaf_cg Sample 3.成功后,生成已个 output 目录,目录中有个 Sample目录,测试环境的程序都在 Sample 目录中,把 Sample 目录复制到网站根目录,通过浏览器访问可以看到

如何利用Azure DevOps快速实现自动化构建、测试、打包及部署

前两天有朋友问我,微软的Azure好用吗,适不适合国人的使用习惯,我就跟他讲了下,Azue很好用,这也是为什么微软云营收一直涨涨涨的原因,基本可以再1个小时内实现自动化构建.打包以及部署到Azure服务器上.利用周末的时间,写了这篇文章,分享给大家,希望能帮助一些人快速入手如何使用Azure DevOps自动化构建.测试以及部署自己的服务. 今天,我给大家一步一步详细介绍,如何在1个小时内,创建一个Web API项目,实现服务的自动化构建.打包,并自动化部署到Azure上. 1. 创建一个Azu