纯IPv6环境App适配的坑

苹果从2016年6月1号开始,强制所有app必须支持纯IPv6的网络环境。这项举措将对IPv6的普及起到一定的推动作用,也体现了Apple作为国际大厂的担当。 大部分App由于使用的是高层API,并不需要做任何的更改就能自然度过这次IPv6的考核,只是对于少部分手写IPv4地址连server的同学,生活有一点点影响。 请好好学习TCP/IP协议 每次苹果对技术的推动,都是一次很好的充电...

高效使用Xcode(10分钟视频教程)

简单高效的小技巧,帮助提升Xcode使用效率。 代码浏览 快速启动Xcode 项目之间切换 cmd+~ .h和.m之间切换 ctrl+cmd+ ↑ or ↓ 定位类文件 cmd+shift+J 类文件查找 cmd+shift+O 方法调用者查看 ctrl+1 类结构预览 ctrl+2 代码生成 常用代码快捷方式 导入头文件 ctrl+cmd...

一只快速生成代码的Xcode插件FastStub

插件github地址,这款插件的灵感来源于Android Studio,在AS当中按 cmd+N 可以呼出generate code菜单,快速生成一系列模板代码。比如自动解析出super class当中还没有被override的方法,比如自动生成Constructor,并选择要传入的参数等。 插件原型 在Android Studio中可以这样重载父类的方法。 支持多选,按回车一键插...

Mac下提升工作效率的方式

Mac系统一向以提供高效的工作环境著称,iOS,Android和server端程序员都可以轻松的在Mac上搭建舒适的开发环境。笔者主要从事iOS开发,一般在macbook上工作,以下是这些年累积下来的一些提升工作效率的方式,和大家分享。 熟记快捷键 快捷键对提升效率的帮助最大,但初期掌握曲线也比较陡。熟记一些常用快捷键之后,能感受到立竿见影的效果。比较实用的有: cmd+c, cmd+...

魔法数字“3”

作为24k高纯度理工技术男,从大量和女性朋友交流的经历中,我发现一个有意思的现象:男性在聊天的时候,一般会习惯就某一个话题持续深入的探讨,而女性总是在无意识当中频繁的切换话题。如果将话题的切换比作线程的context switch,男人的并发执行能力和女人相比,简直弱爆了。在经历无数的挫败之后,我也终于发现了和女性朋友愉快聊天的关键法则:不要尝试去记住10分钟之前的聊天内容。 男人的大脑虽...

Android线程的正确使用姿势

线程是程序员进阶的一道重要门槛。对于移动开发者来说,“将耗时的任务放到子线程去执行,以保证UI线程的流畅性”是线程编程的第一金科玉律,但这条铁则往往也是UI线程不怎么流畅的主因。我们在督促自己更多的使用线程的同时,还需要时刻提醒自己怎么避免线程失控。除了了解各类开线程的API之外,更需要理解线程本身到底是个什么样的存在,并行是否真的高效?系统是怎么样去调度线程的?开线程的方式那么多,什么样的...

App安全之网络传输安全

移动端App安全如果按CS结构来划分的话,主要涉及客户端本身数据安全,Client到Server网络传输的安全,客户端本身安全又包括代码安全和数据存储安全。所以当我们谈论App安全问题的时候一般来说在以下三类范畴当中。 App代码安全,包括代码混淆,加密或者app加壳。 App数据存储安全,主要指在磁盘做数据持久化的时候所做的加密。 App网络传输安全,指对数据从客户端传输到...

搭建数据驱动型Android架构

之前的文章里介绍了如何搭建iOS平台下的数据驱动型架构,iOS和Android系统在平台特性和应用场景下其实有很高的相似性,在不少架构的整体实现思路上基本都一致,只是由于语言特性的差异在实现方式上会有些不同而已。简而言之,内功心法一致,变的只是招式。这里我们用相同的思路来搭建Android系统平台下的DDA(Data Driven Architecture)架构。附GitHub Demo地址...

用Swift搭建数据驱动型iOS架构

上篇博客里介绍了一种架构iOS App应用层的方式,Context Driven Design。CDD可以让应用层UIViewController的结构以细粒度,低耦合的方式组合,不过CDD只能适用于应用层,对于具备一定业务规模的App来说有些捉襟见肘。这次我们尝试来用Swift搭建一个完整的数据驱动型架构,这种架构将有更清晰的层次结构和数据流向,当然也能支撑更复杂的业务系统。核心思想是基于...

iOS应用层架构之CDD

从2010年开始接触iOS开发到现在,折腾过不少app的架构。从MVC到MVVM,VIPER,MVP,以及最新的ReactiveCocoa都做过实战尝试,还有其他变种,诸如猿题库iOS客户端架构设计,也做过一些学习研究。这些技术概念如果不熟悉,建议每个链接都点开好好研读下,不要对你的大脑太温柔。在开始架构讨论之前,再推荐一些其他非常值得一读的文章:唐巧-被误解的 MVC 和被神化的 MVVM...

iOS,Android网络抓包教程之tcpdump

现在的移动端应用几乎都会通过网络请求来和服务器交互,通过抓包来诊断和网络相关的bug是程序员的重要技能之一。抓包的手段有很多:针对http和https可以使用Charles设置代理来做,对于更广泛的协议可以使用tcpdump或者wireshark。wireshark提供GUI,方便做深入全面的数据分析。tcpdump则输出原始的包内容,好处是快速高效,之前写过一篇简单的微信红包图片的破解教程...

HTTP 2.0的那些事

在我们所处的互联网世界中,HTTP协议算得上是使用最广泛的网络协议。最近http2.0的诞生使得它再次互联网技术圈关注的焦点。任何事物的消退和新生都有其背后推动的力量。对于HTTP来说,这力量复杂来说是各种技术细节的演进,简单来说是用户体验和感知的进化。用户总是希望网络上的信息能尽可能快的抵达眼球,越快越好,正是这种对“快”对追逐催生了今天的http2.0。 1. HTTP2.0的前世 h...

微信iOS朋友圈红包图片抓包教程

使用mac系统自带tcpdump即可以抓包获取朋友圈的红包图片内容。不需要第三方软件,步骤如下: 第一步:将手机usb连接itunes,获取iphone设备的udid: 第二步:开启终端(terminal)并输入rvictl -s 418d838461a891b5d7161a05a163888c9f107780。把418d838461a891b5d7161a05a163888c9f1...

iOS网络请求优化之DNS映射

绝大多数网络请求的第一步都是DNS解析,解析请求根据当时网络情况不同,各平台的DNS缓存策略差异等因素,对移动端app整体网络性能会产生或大或小的影响。移动端app网络性能优化涉及到很多方面,DNS映射只是其中一环,也是十分重要的一环,因为它带来的好处不仅仅是降低网络请求的延迟。 降低DNS请求带来的延迟 客户端app的请求第一步都是DNS解析,但由于cache的存在使得大部分的解析请求并...

轻松理解多线程同步基础概念

现在在移动平台(iOS,android)上编程使用到多线程是很常见的事情了。多线程编程的关键在于处理好各线程间多资源占用的同步处理。涉及到的概念有semaphore,mutex,lock,condition等等,这里简单的介绍下这几个关键的概念。 Semaphore(信号量) Semaphore是多线程编程时一个很重要的概念,概念本身并不复杂,但要做到正确使用却不容易。这里我们从面向对象...

Android UI性能优化详解

设计师,开发人员,需求研究和测试都会影响到一个app最后的UI展示,所有人都很乐于去建议app应该怎么去展示UI。UI也是app和用户打交道的部分,直接对用户形成品牌意识,需要仔细的设计。无论你的app UI是简单还是复杂,重要的是性能一定要好。 UI性能测试 性能优化都需要有一个目标,UI的性能优化也是一样。你可能会觉得“我的app加载很快”很重要,但我们还需要了解终端用户的期望,是否...

iOS 中级面试题

半年前在知乎浏览到一个帖子,是关于如何面试iOS工程师。由于当时公司正在招聘iOS工程师,自己也面试了不少同学,就饶有兴致的把自己的面试问题清单贴了出去,却意外的引来了不少关注。还有不少同学认真回答并将答案私信于我交流的,还有求隐藏关卡的:(。由于工作太忙,私信和评论后面都没怎么回复,这里一并做下总结回复:p 一份面试题的意义 我把收到的私信和一百多条评论都仔细读了遍,发现大家之所以会关注...

iOS Push的门道

iOS在诞生之初为了最大程度的保证用户体验,做了一些高瞻远瞩且影响深远的设计。APNs(Apple Push Notification service)就是其中一项。 基本功 早期iOS设备的内存和CPU资源都很有限,为了让前台活跃的app拥有尽可能多的系统资源,以及节约设备电量,iOS一开始就“不允许”普通app的进程常驻后台。这个决定很大程度上保障了用户体验和延长了手机的待机时间,但...