Third Party Tools
0x00 前言
这篇文章是自己在学习 CFHipsterRef Chapter 15 Third Party Tools 时做的笔记。
0x01 appledoc
Cocoa 开发者中有一句谚语,Objective-C 的冗长有助于自文档化(self-documenting)代码。在 longMethodNamesWithNamedParameters:
和这些参数的显式类型之间,Objective-C 方法不会留下太多的想象。
但是即使是自文档化代码可以通过文档来改进,只需少量的工作就能对他人产生显著的好处。
在 Objective-C 中,选择的文档工具是 appledoc
。appledoc
能够从 .h
文件中生成 HTML 和 Xcode 兼容的 .docset
文档,看起来跟 Apple 的官方文档几乎一样。
Objective-C 文档由任何 @interface
或 @protocol
之前的 /** */ 注释块(注意额外的初始星号)以及任何方法或 @property
声明所指定。文档可能还包含系统字段的标签,如参数或返回值:
- @param [param] [Description]:描述了应该传递什么值或此参数
- @return [Description]:描述了一个方法的返回值
- @see [selector]:提供“参见”相关项目的参考
- @discussion [Discussion]:提供额外的背景情况
- @warning [description]:调出异常或潜在的危险的行为
appledoc
可以通过遵循项目页面上提供的最新的安装说明或使用 Homebrew 安装:
1 | $ brew install appledoc |
要生成文档,可以在一个 Xcode 项目的根目录中执行 appledoc
命令,传递元数据比如项目和公司名称:
1 | $ appledoc --project-name CFHipsterRef \ |
这会从目标目录中找到的头文件中生成并安装一个 Xcode .docset
文件。
额外的配置选项,包括 HTML 输出,可以通过传递 --help
找到:
1 | $ appledoc --help |
0x02 xctool
xctool
是 xcodebuild
的替代,xcodebuild
是 Xcode.app 下的工具。
xctool
的优美不只是表面上的,构建进度也可以格式化报告,可以由其他工具读取:
1 | $ xctool -reporter plain:output.txt build |
- pretty:( 默认 )一个基于文本的报告器(reporter),其使用 ANSI 颜色和 unicode 符号来美化输出。
- plain:如
pretty
,但是没有带颜色或 Unicode。 - phabricator:输出一个 JSON 数据的构建/测试结果,可以输入到 Phabricator 代码 review 工具中。
- junit:生成具有测试结果的 JUnit / xUnit 兼容的 XML 文件。
- json-stream:一个构建/测试流作为 JSON 字典,一行(示例输出)。
- json-compilation-database:输出构建事件的 JSON 编译数据库,其可以通过基于 Clang Tooling 的工具使用,例如 OCLint。
对 xcodebuild
的另一个改进是 xctool
会以 Xcode.app 相同的方式在项目中运行应用程序测试。
仅仅因为这个原因,xctool 对 Objective-C 社区中持续集成测试的新兴学科具有重大含义。
要安装 xctool
,运行下面命令:
1 | $ brew install xctool |
0x03 OCLint
OCLint 是一个静态代码分析器,用于检查 C 代码是否存在常见的问题源,想空的 if/else/try/catch/finally
语句,未使用的局部变量和参数,具有高 NCSS(非注释源语句,Non Commenting Source Statements)复杂代码,冗余代码和其他不良做法。
安装 OCLint 最佳的方式是使用 Homebrew Cask:
1 | $ brew cask install oclint |
还记得 xctool 的 json-compilation-database
报告器选项吗?与 oclint-json-compilation-database
一起使用来启动 OCLint:
1 | $ xctool -workspace NSHipster.xcworkspace \ |
0x04 xcpretty
xcpretty
类似于 xctool
,它改进了 xcodebuild
构建输出,但不是尝试替换 xcodebuild
,而是扩展并改进它。
事实上,xcpretty
通过获取 xcodebuild
的管道输出,而不是直接调用来例证 Unix 可组合性的哲学:
1 | $ xcodebuild [flags] | xcpretty -c |
这种方法的一个主要好处是它真的很快 —— 事实上,在某些情况下,xcpretty
实际上比直接调用 xcodebuild
还要快一点,因为它节省了打印到控制台的时间。
与 xctool
另一个共性是报告器功能,其特点是格式化输出为 jUnit 风格的 XML,HTML 或 上述 OCTool 兼容的 json-compilation-database 格式。
xcpretty
可以使用 RubyGems 安装,其在 OS X 中已经默认安装:
1 | $ gem install xcpretty |
0x05 Nomad
Nomad 是用于 iOS 和 OS X 开发的世界级命令行工具的集合。它自动化常见的管理任务,以便于开发者可以专注于构建软件。
每个工具都可以独立地安装,或者用一条命令一起安装:
1 | $ gem install nomad-cli |
0x06 Cupertino
应用程序 provisioning 的过程被所有 Apple 开发者普遍厌恶。
除了整个过程是一个噩梦的开始到结束,许多操作需要通过 Web 界面进行交互。这不仅需要大量额外的点击,而且使其很难自动化。
Cupertino 提供了一个 CLI 用来管理设备,provisioning profiles,app IDs 和 证书(certificates)。
1 | $ ios devices:list |
0x07 Shenzhen
有一件事 web 开发者相对于 iOS 是可以在几秒钟之内连续部署代码,与为 Cupertino 的批准(有时候拒绝!)一个更新而等待几天截然不同。
幸运的是,一个家庭手工业随着开发和企业分发而兴起。第三方像 HockeyApp,DeployGate 和 TestFlight 提供开发者一个更简单的方式去注册测试用户和发送最新的 QA 版本。
Shenzhen 是一个进一步自动化此过程的工具,通过构建 .ipa
文件然后分发到一个 FTP/SFTP 服务器,S3 bucket 或任何上述第三方服务。
1 | $ cd /path/to/iOS Project/ |
0x08 Houston
Houston 是一个用于发送 Apple Push Notifications 的简单工具。传递凭据,构造消息,并将其发送到设备。
1 | $ apn push "<token>" \ |
此工具特别适合用于测试远程通知 —— 特别在一个新的 app 中实现功能。
0x09 Venice
应用内购买(In-app Purchase)已经,或多或少,成为 app 开发者最有利的商业模式。
Venice 是一个用于验证 Apple 应用内购买收据的 CLI,并且用收据数据检索相关联的信息。
1 | $ iap verify /path/to/receipt |
就像 Houston,Venice 具有一个客户端库组件,允许它部署在一个 Rails 或 Sinatra 应用程序。验证服务器上的收据允许保留他们自己过去购买的记录,这对于最新的指标和历史分析是有用的。因此,关于 IAP,这是推荐的做法。
0x0A Dubai
Passbook 管理登机牌,电影票,零售优惠券和会员卡。使用 PassKit API,开发者可以注册 web services 以自动更新通信证上的内容,比如登机牌上的登机口更改或向会员卡添加积分。
Dubai 可以很容易地从脚本或命令行生成 .pkpass
文件,允许快速迭代你的 passes 的设计和内容,或生成一次性的动态。
1 | $ pk generate Example.pass -T boarding-pass |
一旦一个 pass 生成,它可以用 Dubai 通过 HTTP 开启一个本地服务,允许 passes 在 iOS 模拟器上动态地预览:
1 | $ pk serve Example.pass -c /path/to/certificate.p12 |