Gocy's home page

把热爱的事情做好

0%

前言

经过前两篇文章的尝试,我们已经成功的实现了一个无用代码检查插件。但是一个成熟的项目,其中的代码复杂度远比前文的 Demo 要高得多,要想真正在项目工程中运行插件,检查无用代码,还有许多坑要踩。本篇文章中,我将分享自己在从 Demo -> 实际项目的适配过程中所遇到的问题一些问题。

阅读全文 »

前言

最近组里的项目遇到了一个瓶颈问题:代码段超标,简单的说,就是编译后输出的可执行文件太大了,来看看 官方文档 中的相关规定:

For iOS and tvOS apps, check that your app size fits within the App Store requirements.
Your app’s total uncompressed size must be less than 4GB. Each Mach-O executable file (for example, app_name.app/app_name) must not exceed these limits:

For apps whose MinimumOSVersion is less than 7.0: maximum of 80 MB for the total of all __TEXT sections in the binary.
For apps whose MinimumOSVersion is 7.x through 8.x: maximum of 60 MB per slice for the __TEXT section of each architecture slice in the binary.
For apps whose MinimumOSVersion is 9.0 or greater: maximum of 500 MB for the total of all __TEXT sections in the binary.

可以看到,iOS 9+ 支持 500MB 的代码段体积,而 iOS 8.x 只支持 60MB。面对不断增加的业务代码,我们需要一个手段,来及时删除已经废弃的代码,以减小代码段体积。

在尝试分析 LinkMap 文件无果之后,我找到了另外一个路线,那就是分析 Clang AST,在静态分析时从语法树中,找到未被显示调用到的方法。尽管由于 oc 的动态特性,即便静态阶段其未被显示调用,它依然可能在动态期间被调用,但不论如何,我们都可以通过分析 AST 来得到未被静态调用的方法,对它们进行校对、确认。

阅读全文 »

上一篇文章中,我利用 Node.js 搭建了简单的聊天服务器,并支持了 HTTP 以及 WebSocket 两个传输协议。网络数据传输是互联网时代最常见的一种数据传输形式,从 Web 到客户端,每个平台都有许许多多优秀的库,将网络请求封装起来。上文中,不论是服务端的 nodejs-websocket 库,还是客户端使用的 AlamofireSwiftWebSocket,都提供了极其便利的接口,让我们能快速搭建起完整的应用。本篇文章中,我们先从抓取网络请求说起,分析一个个 TCP/HTTP/WebSocket 请求,再看看这几个库的关键源码,了解别人是如何处理这些请求的。

阅读全文 »

前言

终于写下第三篇啦!本篇将利用 Node.js 实现中转服务器,在 iOS 上实现一个简单的聊天室。

本文是 iOS 程序员的 JavaScript 之旅 系列的第三篇,这个系列主要用于记录我在学习 JavaScript 中的一点心得,文中内容由于参考文献版本不一定是最新 & 个人理解水平有限,可能出现一些错误,还请谅解。如果有任何讨论 / 建议 / 意见,欢迎评论留言或是邮件联系。

阅读全文 »

从接触 iOS 开发的第一天起,就被 Xcode 的证书、签名的一堆验证流程弄得晕头转向。从一开始的弹窗 Fix issue,到 Xcode 8 之后出现了 Automatically manage signing,苹果正努力让整个签名的过程变得简单透明。但这个机制出现的原因、背后的机理是什么呢?本文将记录我就这一问题的学习心得。

阅读全文 »

前言

新年第一篇,没想到到一月下半旬才有空写,实在是忙啊。

本文是 iOS 程序员的 JavaScript 之旅 系列的第二篇,这个系列主要用于记录我在学习 JavaScript 中的一点心得,文中内容由于参考文献版本不一定是最新 & 个人理解水平有限,可能出现一些错误,还请谅解。如果有任何讨论 / 建议 / 意见,欢迎评论留言或是邮件联系。

阅读全文 »

尽管使用 Storyboard / XIB 来构建应用界面的做法饱受批判,但不得不承认,一个可视化的界面,其在易读性、创建原型的速度、对于新手的友好度等等方面的优势还是非常明显的。我也是一名 Storyboard / XIB 的重度用户,尽管我知道 Autolayout 布局效率很低,也见过极其复杂的 XIB ,删一个约束就满屏的红色,但在版本快速迭代中、界面随时要调整的情况下,我还是更偏爱可视化布局控件(更别提有时候看别人的代码,其命名与对应控件天差地别的情况了)。正好今天遇到一个相关的问题,因此写文章来记录一下。

阅读全文 »

转眼便来到了 2016 年的最后一周。不得不说,2016 对我而言是充满变化的一年,在这圣诞之际,写一篇博客记录一下即将过去的这一年。

阅读全文 »

前言

本文是 iOS 程序员的 JavaScript 之旅 系列的第一篇,这个系列主要用于记录我在学习 JavaScript 中的一点心得,文中内容由于参考文献版本不一定是最新 & 个人理解水平有限,可能出现一些错误,还请谅解。如果有任何讨论 / 建议 / 意见,欢迎评论留言或是邮件联系。

基础知识

如果你是完完全全的 JavaScript 小白,那么我建议你先对 JavaScript 的语法进行学习,你可以参考 MDN 上的基础教程,或是阅读其他的书籍进行学习,而我正在阅读的是 《 JavaScript 编程全解 》 ;如果你和我一样,以一个 iOS 程序员的角度初学 JavaScript ,并且对 JavaScript 中的 this 感到疑惑的话,那么这篇文章或许会对你有帮助。

阅读全文 »