project.pbxproj 文件被包含于 Xcode 工程文件 *.xcodeproj 之中,存储着 Xcode 工程的各项配置参数。它本质上是一种旧风格的 Property List 文件,历史可追溯到 NeXT 的 OpenStep。其可读性不如 xml 和 json,苹果却一直沿用至今,作为一家以创新闻名的公司可能这里剩下的就是情怀吧。

本文谈了下 project.pbxproj 的知识,并总结了一些操作工程文件的优秀轮子,并在最后给出了自己的解决方案 pbxprojHelper

Read More

iOS 系统自带的 UIActionSheet 无法满足开发中高度个性化的 UI 风格和代码风格,所以我决定自己动手丰衣足食,于是 TBActionSheet 诞生了:

Github:https://github.com/yulingtianxia/TBActionSheet

TBActionSheet 不仅还原了 UIActionSheet 的几乎所有功能和 API,还在此基础上支持如下功能:

  1. block 语法
  2. 插入自定义的 Header 视图
  3. 自定义字体、颜色、尺寸、圆角等
  4. 将毛玻璃效果支持到了 iOS7,且可以定义颜色
  5. 支持 Cocoapods 和 Carthage
  6. 支持在 Title 下面设置 Message
  7. 支持点击背景关闭
  8. 可以在显示后动态更新 UI

Read More

消息发送和转发流程可以概括为:消息发送(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 是苹果提供的自动化测试框架,iOS 不像 Android 那样可以在 xml 文件中自动生成唯一的 id 作为标签,需要我们手动为控件添加可访问性(Accessibility)。如何让一个控件的可访问标签在当前页面唯一且不变呢?当然纯手工在代码中插入加标签的逻辑代码肯定是可行的,但费时费力,所以我在这里做一些用程序自动化添加标签尝试性的探索。

Github 传送门: TBUIAutoTest

Read More

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

Read More

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

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

Read More