消息发送和转发流程可以概括为:消息发送(Messaging)是 Runtime 通过 selector 快速查找 IMP 的过程,有了函数指针就可以执行对应的方法实现;消息转发(Message Forwarding)是在查找 IMP 失败后执行一系列转发流程的慢速通道,如果不作转发处理,则会打日志和抛出异常。

本文不讲述开发者在消息发送和转发流程中需要做的事,而是讲述原理。能够很好地阅读本文的前提是你对 Objective-C Runtime 已经有一定的了解,关于什么是消息,Class 的结构,selector、IMP、元类等概念将不再赘述。本文用到的源码为 objc4-680 和 CF-1153.18,逆向 CoreFoundation.framework 的系统版本为 macOS 10.11.5,汇编语言架构为 x86_64。

Read More

UIAutomation 是苹果提供的自动化测试框架,但依然需要我们手动为控件添加可访问性(Accessibility)。如何让一个控件的可访问标签在当前页面唯一且不变呢?当然纯手工在代码中插入加标签的逻辑代码肯定是可行的,但费时费力,所以我在这里做一些用程序自动化添加标签尝试性的探索。

Read More

工作时经常会收到同事发来的一些链接,有的带空格的链接会断开,不能直接点击查看,需要手动复制完整链接并粘贴查看。所以我做了个 Mac 系统上的 URL 辅助工具,在复制 URL 时自动将其打开。还实现缓存常用链接、自动/手动连接切换、登录时启动等功能。开发语言为 Swift 和 AppleScript。

Read More

这周花了一天半的时间做了个 Mac OS X 上的小工具,用来查找相似内容的图片。起因是公司的 iOS 项目中已有的图片管理混乱,有些图片文件名不规范,还有一些内容重复但文件名不同的图片。现在视觉要给出一些 3x 分辨率的图片,如何与已有的低分辨率图片匹配,这又是个问题。人工一个个去找固然好,但这种技术含量低的体力活很浪费精力和时间。

Github 地址:https://github.com/yulingtianxia/SimilarImageHunter

Read More

来腾讯实习正好一个月了,因为项目已经进入了成熟期,接了两个需求,改了二十几个 bug。所以把这期间的一些思考写下来,发了邮件分享给组内同事们。我把一些自己觉得不合适的内容刨除出去,选取邮件的部分内容写在这里:)

Read More

iOS 上有很多浏览器都有“看图模式”这一功能,实现这一功能可能有很多种途径,最近接触到了这方面的工作,所以在此把我的思路记录下来。过程虽然比较简短,但日后可能会用到,如有更好的方案也可以对比下,取长补短。

Read More