使用Charles Proxy提升iOS开发效率
以前做前端开发的时候,使用最多的工具就是 Fiddler ,用来定位问题、模拟特定场景非常方便,极大提升了开发效率。
而转做 iOS 开发以后,一大头疼的问题是 Fiddler 没有 Mac 版,幸亏找到了 Charles Proxy 这个还不错的替代工具,不过使用上与 Fiddler 还是有不少区别
另外据我不完全的观察,不少 iOS 开发工程师并不习惯于使用 HTTP 抓包工具……因此我觉得还是有必要写一篇文章介绍下 Charles
试用 & 正版 & 破解
Charles 是收费软件,可以免费试用 30 天。试用版本每次使用时间不能超过 30 分钟,使用过程中不定时会中断 5 秒钟,并且启动时将会有 10 秒种的延时。因此,该试用方案对广大用户还是相当友好的,只是当你需要长时间进行封包调试时,会因为 Charles 强制关闭而遇到影响。
如果手头经济宽裕,建议上官网购买正版。
除此之外,网上也有破解版,在 http://charles.iiilab.com/ 这个网站可以下载到Charels各个版本的破解版。
使用与配置
鉴于 Charles 的使用教程非常多,本文不打算写成入门教程,而是针对常见的开发场景,介绍如何使用 Charles 提高开发效率
基础的使用,可以参考 iOS开发工具——网络封包分析工具Charles
Charles 本质上是一个 HTTP 代理服务器,因此需要在 iOS 设备上配置代理,不过这也意味着 Charles 只能抓取手机连接 WIFI 时的 HTTP 包,而 3G/4G 则不行
另外强烈建议使用之前先简单了解一下 HTTP 协议,Charles 毕竟只是个工具而已
使用场景
快速定位 BUG 原因
App 开发中最常见的问题是,某个界面需要通过后端 HTTP 接口获取数据并展示,而测试妹子给你提了个 BUG,告诉你这个界面没数据或者数据有误
初级工程师常犯的错误是:一开始就打断点 Debug 或者一口咬定是后端问题,这常常会造成时间的浪费
正确的做法是先缩小 BUG 原因范围,再准确定位,通常我会按照这样的顺序来诊断:
1. Charles 抓到相应的 HTTP 包了吗?没抓到请 debug App 代码
2. 抓到的包 HTTP 响应正确吗?
* 如果无响应,或者 HTTP status 是4xx/5xx/,责任果断推给后端
* 响应是否符合接口文档定义?完全不符合或者多了/少了JSON 字段,责任果断推给后端
* 响应符合定义,但是是报错信息,那么可能是 HTTP 请求不正确,对照请求与文档定义,如果无误,说明文档有错漏……责任依然推给后端
3. 以上都正确,那么问题应该在 App 端,请开始 debug 代码
记得拿着 Charles 的抓包结果截图去找后端,这比 Xcode 控制台打出来的信息更容易说服他们
禁用响应缓存
关于查看响应的部分,有一点需要注意的是,现在不少后端服务都会开启 Etag (不了解的请看维基百科)
而如果你使用了 AFNetworking ,那么可能在 Charles 中看不到响应内容(304响应没有 body)
解决方法是点击菜单Tools → No caching,在界面中开启全局或针对特定域名的缓存禁用模式
快速构造请求中、请求失败
通常 App 在发起请求时会有过渡效果(比如转菊花⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄),在请求失败时会有错误提示
不过在开发过程中由于同在一个局域网请求过程通常非常短,一般也不会失败,那怎么去调试这两种界面呢?
一种方式是使用 OHHTTPStubs 这个库通过 Mock 来构造响应,缺点是要写代码,另一种就是使用 Charles 了
先启动 App 发起一次请求,然后在 Charles 中找到相应的请求,点击右键勾选『Breakpoints』
这样,下次 App 再发起同样 URL 的请求时,Charles 会给你一个断点界面,你可以选择 Excute 或者 Abort
如果要调试请求失败的界面,那就点 Abort,App 会进入 HTTP 请求失败的处理流程
如果要调试请求中的界面,那就停在这个断点界面即可,调试完了再点 Abort 或者 Excute
实际操作过程中会发现 Excute 需要点击两次才能完成一次 HTTP 请求,这是为什么呢?请看下节
构造期望的响应数据
App 中常有一些界面会根据后端数据的不同而展现不同的样式,那么在开发过程中就期望后端接口能返回一些特定的数据。如果巴望着后端同学替你『造数据』那就不太现实了,可行的方式依然是上面提到的两种,通过 OHHTTPStubs mock,或者使用 Charles
而 Charles 里要构造数据又有两种方式
实时修改响应
前面提到需要点击两次 Excute 才能完成一次 HTTP 请求,原因是,Charles 的断点功能分别提供了修改 HTTP Request 和 Response 的机会
在点击第二次 Excute 之前,我们可以实时修改响应的内容,点击『Edit Response』,然后选一种合适的展示面板修改即可,比如如果是 JSON 响应的话,推荐使用 JSON 面板
映射本地文件
另外一种方式就类似于 OHTTPStubs 了,可以将本地文件指定为特定 URL 的响应
首先依然需要先让 Charles 抓取到相应的 HTTP 请求,然后在请求上点右键,选择最下面的『Map Local』
然后在弹出界面中选择本地文件
这种方式最大的用处是,当后端接口开发尚未完毕时,App 端可以『自给自足』地完成完整的界面流程。
另外 Charles 还提供了对已有 Map 规则的导入导出功能,这样就可以将编好的整套规则共享给其他同事了,方法是点击菜单 Tools → Map Local,在弹出界面中点击 Export
最后剧透下,我正在考虑如何通过工具将 Map Local 与后端开发流程连接,更高效地实现 App 开发,至于时间点嘛……哈哈
使用Charles Proxy提升iOS开发效率的更多相关文章
- fir.im Weekly - 17 个提升 iOS 开发效率的必备工具
本期 fir.im Weekly 精选了一些iOS 开发工具和动画源码分享,希望每个开发者能专注效率.实用.灵感. iOS开发工具--如何优化ipa包大小 @iOS程序犭袁 推荐了关于"如 ...
- iOS之17个提升iOS开发效率的必用工具
时间就是金钱.编码效率的提升意味着更多的收入.可是当我们的开发技巧已经到达一定高度时,如何让开发效率更上一层楼呢?答案就是使用开发工具!在这篇文章中,我会向你介绍一些帮助我提升编码速度和工作效率的工具 ...
- 17个提升iOS开发效率的必用工具
时间就是金钱.编码效率的提升意味着更多的收入.可是当我们的开发技巧已经到达一定高度时,如何让开发效率更上一层楼呢?答案就是使用开发工具!在这篇文章中,我会向你介绍一些帮助我们提升编码速度和工作效率的工 ...
- 10个提升iOS开发效率的必用工具
Xcode插件 几乎所有开发者都知道Alcatraz是一个开源的包管理工具,可以让我们更轻松地管理各种插件.接下来就介绍下我的最推荐的10个插件: 10.HOStringSense 在编辑字符串的时候 ...
- iOS-提高iOS开发效率的方法和工具
提高iOS开发效率的方法和工具 介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先要说的肯定是IDE了,说到IDE,Xcode不能跑,当然你也可能同时 ...
- iOS开发——实用篇&提高iOS开发效率的方法和工具
提高iOS开发效率的方法和工具 介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先要说的肯定是IDE了,说到IDE,Xcode不能跑,当然你也可能同时 ...
- 【老孟Flutter】6种极大提升Flutter开发效率的工具包
老孟导读:本文介绍6种极大提升Flutter开发效率的工具包. [1] 强大的日志软件包 在开发 Flutter 的过程中打印日志是常用的调试方式之一,但 Flutter 内置的日志打印非常简单,下面 ...
- Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725
Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725 1. DSL主要分为三类:外部DSL.内部DSL,以及语言工作台. 1 2. DSL ...
- atitit.提升软件开发效率大的总结O5
atitit.提升软件开发效率大的总结O5 #---平台化.组件化 1 #--cbb公用模块的建设 1 #---内部最佳流程方法跟实践的总结 2 #---内部知识体系的建设 2 #---问题Qa库的建 ...
随机推荐
- 1129: 零起点学算法36——3n+1问题
1129: 零起点学算法36--3n+1问题 Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted: 4541 ...
- ios app网址说明
URLforBrowser = 'https://itunes.apple.com/cn/app/wan-huo-shi-shang-zhu-li-ren/id1077705***'; URLfori ...
- 装饰器模式(Decorator)——深入理解与实战应用
本文为原创博文,转载请注明出处,侵权必究! 1.初识装饰器模式 装饰器模式,顾名思义,就是对已经存在的某些类进行装饰,以此来扩展一些功能.其结构图如下: Component为统一接口,也是装饰类和被装 ...
- 100_remove-duplicates-from-sorted-array
/*@Copyright:LintCode@Author: Monster__li@Problem: http://www.lintcode.com/problem/remove-duplica ...
- uiautomator+cucumber实现自动化测试
前提 由于公司业务要求,所以自动化测试要达到以下几点: 跨应用的测试 测试用例可读性强 测试报告可读性强 对失败的用例有截图保存并在报告中体现 基于以上几点,在对自动化测试框架选型的时候就选择了uia ...
- 卷积神经网络CNN总结
从神经网络到卷积神经网络(CNN)我们知道神经网络的结构是这样的: 那卷积神经网络跟它是什么关系呢?其实卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进.比如下图 ...
- hdu1166树状数组
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...
- 案例分享|某医药集团的BI建设案例
相比于传统型BI,越来越多的企业开始接受并青睐新型的自助式BI,因其项目上线快,失败风险小,简单易用,颇受赞誉.以下是某医药集团上线帆软BI系统FineBI的案例,从用途架构.指标分析.和信息交互几方 ...
- Docker - 容器直连
本文是在原文基础上的实际操作验证记录和细节补充. 默认情况下,容器连接到虚拟网桥docker0提供的虚拟子网中,容器之间通过默认网关(虚拟网桥docker0接口地址)建立连接. 如果不使用虚拟网桥,用 ...
- OC—NSDictionary和NSMutabelDictionary 可变字典和不可变字典