和Charles同样强大的iOS免费抓包工具mitmproxy

现阶段给iOS设备进行网络抓包的手段非常之多,除了我之前介绍的tcpdump,wireshark之外,还有Charles,以及和Charles同样好用的mitmproxy,其实还有更多,比如更小众的debookee。似乎知道Charles的同学更多一些,但其实Charles有的功能mitmproxy基本都有,mitmproxy还免费,而且对于terminal用户来说使用起来更亲近。 如何使...

Wireshark抓包iOS入门教程

网络抓包是个基础技能,对于网络协议的掌握有一定的要求。iOS上实现网络抓包可以用Charles(针对http和https),tcpdump(快速分析网络包),和Wireshare。之前写过一篇介绍tcpdump抓包的入门文章,和tcpdump相比,Wireshark提供丰富的GUI交互,而且能分析所有的网络协议,关键还是免费的,掌握好Wireshark就能应付绝大部分需要分析网络协议的场景了...

Http文件上传进度为什么不准

做过客户端文件上传的同学会明白,基于HTTP的文件上传并没有看起来那么简单。按我过去经验,至少有两块工作会比看上去要麻烦一些,第一个是断点续传,第二个是进度展示。断点续传想要优化的好要花不少力气,后面有机会再写,这篇先看上传进度的问题。 首先说现象:我们调用第三方http framework上传文件的时候,都会有API回调告诉我们上传的具体进度,这个进度值都是不准的。 比如下面代码使用a...

UILabel中一个很多人都会踩的坑

一个很严肃的问题,平常你是怎么设置UILabel的高度的? 我见过不少如下普遍的写法: UILabel *lb = [UILabel new]; lb.text = @"gyjq"; lb.font = [UIFont systemFontOfSize:30]; lb.backgroundColor = [UIColor clearColor]; [self.view addSubvie...

应届生应聘iOS岗位的面试建议

每年都有大量的应届毕业生投入到iOS开发大军当中,我过去3年也面试过不少应届生,总体感觉出类拔萃者相当稀少,泯然众人者还是占多数,大部分人对iOS技术面试会是什么样没什么概念,更不知道该怎么去准备一场面试。其实毕业季学校都留给了每个人充足的自由时间去准备学习,对于,仅以过来人提些切实可行的建议帮助刚毕业的同学们,以下这些建议花三个月准备绰绰有余。 相信自己的选择,全力以赴 在开始准备面试...

realm之于iOS

Realm是除了CoreData和Sqlite之外的第三个选择,一个近几年兴起的全新的数据库方案,一直保持着活跃的更新,而且引起了iOS开发圈广泛的关注。Realm到底好不好用,又有哪些闪光点呢?下面通过一个实际的demo综合比较CoreData和Realm在使用体验上的差别。 Realm Realm For iOS正式诞生于2014年左右,一开始就引起了不小的关注,两年多的快速迭代使其...

iOS端数据库解决方案分析

很早之前就想写一篇iOS端数据库相关的总结文章,梳理下使用移动端数据库的一些重要知识点,再综合对比下sqlite和CoreData的优缺点,希望能帮助一些这方面经历较少的同学少走一些弯路。 为什么要用数据库 iOS端持久化的方案选择比较多,NSUserDefault,Keychain,File,sqlite都可以帮助存储关键的业务数据。NSUserDefault和Keychain都是轻量...

一些NSArray,NSDictionary,NSSet相关的算法知识

iOS编程当中的几个集合类:NSArray,NSDictionary,NSSet以及对应的Mutable版本,应该所有人都用过。只是简单使用的话,相信没人会用错,但要做到高效(时间复杂度)精确(业务准确性),还需要了解其中所隐藏的算法知识。 在项目当中使用集合类几乎是不可避免的,集合类的使用场景其实可以进行抽象的归类。大多数时候我们需要将若干个对象(object)暂时保存起来,以备后续的业...

iOS开发之玩转蓝牙CoreBluetooth

之前详细谈过不少关于HTTP协议的知识点,TCP/IP也通过tcpdump做过简单的介绍,但网络协议的本质其实是连接,设备或者端之间连接的方式有多种,常见的http或者基于tcp的socket只是森林一叶,还有些不那么常见的协议比如蓝牙。适当脑洞,也能玩出不少新花样来。 关键概念 谈到蓝牙,很容易让人联想到蓝牙穿戴设备,好像听起来更靠近硬件层一些。苹果其实对iOS和OSX上的蓝牙已做了一...

iOS被忽视的Extension开发

估计现在有过iOS App Extension开发经验的朋友还不太多。说来惭愧,我也是最近以Extension的方式写过Xcode的一个插件之后,才把Extension相关的知识点梳理了一遍,技术和想法上都有些新的收获。顺便写篇文章介绍推广下App Extension开发。 何谓App Extension? iOS生态圈向来以其封闭性闻名,封闭一方面提高了第三方应用的质量,另一方面也使得...

深度重构UIViewController

UIViewController是iOS应用的基础业务单位,每个iOS程序员都写过无数的Controller。今天和大家一起来深度解剖Controller,看看怎么来做一次深度的重构。 重构的前提 我们应该谨慎的去重构我们的代码。iOS系统提供的UIViewController一定程度上可以很好的应付简单的页面单位,对于复杂的页面,我们也可以采用市面上主流的MV(X)系列模式,比如MVP...

一款Xcode合法插件EasyCode,快速生成代码

一直想着要做个新插件提升Xcode下写代码的效率,之前的FastStub虽然能省去很多方法的生成,但还是有不少“体力劳动”型代码要敲,这些天趁着空了一些新写了一款Xcode“合法”插件,之所以说合法,是因为Xcode 8开始禁用了之前所有的第三方插件,新开发的插件要通过安全性检验,必须使用官方的Xcode Editor Extension来做。这款EasyCode插件就是基于Extensio...

一次iOS App优化(踩坑)之旅

未经深思熟虑的优化是bug之源,这句话做过深度优化的同学一定能明白其中的辛酸。今天和大家分享下博主一次优化CoreText的填坑经历。记得那时候,iPhone 4s还算市面上的主流机型。 优化起因 当时正在做一款IM App,产品经理觉得每次第一次进入聊天界面的时候有点慢,而且进入之后的第一次滑动有点卡。正是由于慢和卡,导致了后面一系列的优化。在开始介绍优化方案之前,先说下「首次体验问题...

iOS网络请求在Controller退出后是否应该被取消?

一个编写iOS代码的经典场景:用户进入某个Controller,发起Http网络请求从Server获取数据,在数据返回之前用户退出了Controller。此时是否需要Cancel之前发出的网络请求呢? 如果请求的数据只在当前Controller产生内容,结论当然是需要Cancel,虽然我知道不少iOS程序员因为偷懒而忘了取消。我们用工程的思维,深入本质,一起看下这背后都发生了什么,如果不C...

深度优化iOS网络模块

几乎每一个讲究的iOS项目都会有一个「网络模块」,大部分的网络请求都是通过HTTP完成,使用成熟的第三方库诸如AFNetworking很容易搭建一个功能简易的网络模块。但这一模块要优化好却没那么简单,是个旷日持久的工作,笔者根据自己多年的“填坑”经验,总结一下深度优化iOS项目网络模块的方方面面,也给自己做下知识梳理。 预热 网络模块的接口设计不在本文讨论之列,设计思路有些偏个人口味,我...

iOS应用架构现状分析

iOS从2007年诞生至今已有近10年的历史,10年的时间对iOS技术圈来说足够产生相当可观的沉淀,尤其这几年的技术分享氛围无论国内国外都显得异常活跃。本文就iOS架构这一主题,结合开发圈里讨论较多的几种主流方式,再配以博主自己的理解,做下现状分析。给自己做下知识梳理的同时,也期望能引入新的思考。 架构的定义 过去6年多几乎绝大部分时间都浸淫在iOS平台,翻阅过不少关于架构的文章,发现众...

iOS应用UI线程卡顿监控

iOS设备虽然在硬件和软件层面一直在优化,但还是有不少坑会导致UI线程的卡顿。对于程序员来说,除了增加自身知识储备和养成良好的编程习惯之外,如果能一套机制能自动预报“卡顿”并检测出导致该“卡顿”的代码位置自然更好。本文就可能的实现方案做一些探讨和分析。先贴出最后方案的github地址。 解决方案分析 简单来说,主线程为了达到接近60fps的绘制效率,不能在UI线程有单个超过(1/60s≈...

一份"有点难"的iOS面试题

之前一时兴致在知乎上出过一份iOS的中级面试题,引起一些关注,不少同学表示对”隐藏关卡“感兴趣。升级版iOS面试题来了,目测难倒90%iOS程序员,目测一大波程序员撸着袖子在靠近。每道题都不难,对知识广度有要求,请摸着良心回答,不要百度。 声明:这份面试题和iOS程序员本身技术水平没任何关联,无论你能否全部答出,都不要对自己产生任何正面或消极的评价,权当做闲暇之余的消遣。 1.NSStr...

一个让脑子快速进入编程状态的小Tip

写代码是门耗费脑力的手艺活。普通人一天约有40%的身体能量被大脑消耗,作为大脑的重度使用者,程序员每天对大脑的使用率可想而知。 特别是像我这样的高龄程序员,如果昨晚熬夜加过班,第二天一大早很容易脑子昏昏沉沉。 有很多大众鸡汤可以帮助Refresh Brain。比如:保持充足的睡眠,每天一杯咖啡,使用GTD,番茄工作类app,听听轻音乐等等。 今天给大家介绍一款适合程序员的小Tip。 ...

iOS组件化方案

最近在思考团队扩张及项目数量增加的情况下,如何持续保障团队高效产出的问题,很自然的想到了组件化这个话题。重翻了前段时间iOS开发圈关于组件化的讨论,这里做下梳理和自己的思考。 组件化的驱动力 在开始讨论组件化技术方案之前,可以先思考下驱动项目组件化背后的原动力。我们假设这样一个场景,公司有 A,B,C三个项目在appstore运作,三个项目分别由Team A,Team B,Team C开...

Hosted by Coding Pages