题图来源:微博 @tango2010
大概在 2011-12 年,上学的时候就一直在折腾自己的个人主页,开始时注册了姓名拼音的 .CN 域名 kangzubin.cn
,后面又注册了 .COM 国际顶级域名 kangzubin.com
感觉逼格会高一些,然后兴致勃勃地跑去工信部备了案(京ICP备14046576号-1),所以,这可能是国内为数不多的有在工信部备案的个人技术博客了。
2015 年元旦,在阿里云买了台服务器,基于 WordPress 搭建了自己的第一个博客,写了篇《Hello, world!》,零零散散地又写了几篇之后,就基本没再写了。
2016 年,毕业上班后,用 Hexo 重新搭建了自己的静态博客,开始用 Markdown 写作,在写了篇《Hello New World》之后,也是三天打鱼两天晒网,没有坚持下来。
2018 年,今年稍微坚持写得了多了一些,博文质量都不高,主要都是工作中的一些技术总结以及平时的一些思考和积累,年底终于可以跟风象征性地写个简单的总结了。
iOS 知识小集
今年 3 月份,我的前部门 iOS Leader @南峰子 找我说,想不想加入他组织的“知识小集”小组,主要是每周在微博上分享 iOS 开发中的一些小知识,并定期要在公众号(iOS-Tips)上发一些原创性的技术文章。我当然是欣然接受了。
每周写 iOS 知识小集的意义在于,能把实际项目开发中的遇到的一些问题和解决方案沉淀下来,并在整理成文时需要去查更多的资料与文档,确保对外分享时的准确性,这是一种无形的自我督促。
回顾了一下,今年我大概写了 31 条 #iOS知识小集#,虽然很零散,涉及的面也比较杂,但每一条小集都至少要占用我晚上下班回家后 2 个小时的时间来整理,在分享给别人的同时,也能方便自己日后回顾查询。
- 使用 otool 命令查看 App 所使用的动态库
- Xcode 10 / iOS 12 获取 WiFi 信息
- Xcode 工程添加 “动态” Framework 的几种方式
- 对于“静态库”和“动态库”的理解总结
- Xcode 10.1 并没有修复由于 Assets 引起的在 iOS 9 上的崩溃问题
- Xcode 的 Build Settings 选中 Levels 时不同列的含义
- iOS 获取设备型号最新总结
- iOS App “去评分” 功能的几种实现总结
- 检测设备是否为 iPhone X/XS/XR 的几种方式
- iPhone 屏幕分辨率终极指南
- iOS 金额字符串格式化显示的方法
- iOS App 启动时间测量
- iOS App 的反调试(Anti-Debug)
- 使用 Keychain 存储登录态需要注意的一个坑
- UIViewController 设置导航栏和标签栏不同 title 的问题
- 配置 xcodebuild 命令打包支持 Bitcode
- Xcode 断点调试时打印变量值报错的问题(编译优化相关)
- 两种 App 启动连续闪退检测策略
- Objective-C import 第三方库头文件总结
- Xcode 设置代码只在 Debug 下起效的几种方式
- 再谈 iOS 输入框的字数统计/最大长度限制
- UIScrollView 拖拽滑动时收起键盘
- iOS 自带九宫格拼音键盘与 Emoji 表情之间的坑
- 再谈 UITableView 的 estimatedRowHeight
- 使用 YYFPSLabel 快速检测页面滑动的流畅度
- Objective-C 可变容器对象的初始化方法使用总结
- 使用 LLDB bugreport 命令导出 App 运行崩溃日志
- 如何优雅地获取 ScrollView 的滚动方向
- 使用 LLDB expression 命令调试动态更新 UI
- iOS9 以后 openURL 和 canOpenURL 使用限制的小误区
- 解决 WKWebView 无法处理 URL Scheme 和 App Store 链接的问题
关于知识小集小组其他小伙伴们分享的小集,可以参见 @南峰子 整理的这本“知识小集 2018 年汇总”的 GitBook,以及我们的 GitHub 仓库。从今年 3 月份开始到年底,我们一共发布了 42 期合集,共收录 190+ 条 iOS 开发的 tips。
iOS 技术文章
由于平时工作遇到的大部分知识点都写成了小集,iOS 相关的长篇技术文章写得相对少了一些。
年底重新温习了下 Objective-C Runtime 相关的知识,自己整理了两篇水文,主要总结了早期版本和现行版本的 Objective-C 中最基础的两个概念,类与对象:
根据 Xcode 10.1 的 Release Note,翻译了一篇:
以及另外的两篇短文:
然后在网上搜罗了一圈,发现很多大佬之前都写了一系列关于“运行时”以及“组件化”的文章,深入浅出,真是让人难以望其项背,收集如下:
WWDC 2018
苹果每年 6 月份的 WWDC 大会,可以算是每一位 iOS 开发者的盛宴吧。今年,在 @卓同学 的组织下,老司机周报 x 知识小集 x SwiftGG 翻译组联合出品针对 WWDC 2018 整理了 28 篇技术文章,详见这个专题目录。
我有幸也能参与其中,写了篇关于 Swift Package Manager 的总结文章:
大前端
最近这两年,在移动端各种跨平台的开发方案如雨后春笋般涌现,让人眼花缭乱,HTML5、Hybrid App、React Native、Weex、Flutter、PWA、小程序 … 等等,相信每一个技术你多少都有耳闻目染过。
今年年中,我整理了一篇水文,介绍了目前都有哪些比较流行的跨平台开发方案:
小程序
从 2016 年 9 月底,微信针对开发者发布了第一个内测版的小程序开发工具开始,我就一直在关注小程序的发展(这句话说得感觉自己牛逼哄哄的样子…,其实不是那个意思),2017 年 1 月份,微信小程序正式发布后,一发不可收拾。
两年多过去了,之前一直处于观望状态,今年终于能有时间研究下小程序开发,整理+转载了以下几篇文章:
- 微信小程序适配 iPhone X 总结
- 浅析微信小程序 App() 和 Page() 函数的内部实现
- [转] 从源码看微信小程序启动过程
- 微信小程序“反编译”实战(二):源码还原
- 微信小程序“反编译”实战(一):解包
然后,上线了知识小集的微信小程序,它是我的小程序处女作,源码已开源,放在 GitHub 上。截至今日,累计有 6.1k+ 用户,小小成绩,欢迎扫码体验,主要是存档了 iOS 开发的 Tips 和公众号文章。
此外,也有机会参与开发了部门的一些小程序试点项目。
Flutter
今年,移动技术圈都在唱衰 React Native,热捧 Google 新秀 Flutter,每一个新技术的出现必然都会经历一段吹捧期,然后回归正常平稳发展。
12 月初,Flutter 1.0 正式版发布,我终于也有理由开始研究它了,写了篇 Flutter 环境搭建笔记:
还有一些,躺在 to do list 的 Flutter 博文标题,一直没有时间去写(主要是懒,坚持是一种多么难能可贵的品质),
Flutter 与 iOS 原生混合页面栈管理实践与总结Flutter 混合工程(CocoaPods)最佳实战Flutter 适配 iPhone X 总结从 url_launcher 窥探 Flutter Plugin 的工作方式
后来,在公司内部的一个 App 新项目上,终于有机会使用了 Flutter 与 Native 原生混合开发,实现了几个简单页面。
其他文章
最近,重温了 C 语言这门古老的语言,收获颇多,整理了两篇文章:
年初的时候,原本计划写一个 GitHub 客户端,用 PHP 写了一个简单的爬虫用于抓取 GitHub Trending 趋势数据,以获取最近 GitHub 上相关编程语言有哪些优秀项目和哪些开发者最火。
但最终也没有坚持下来,主要是看到 App Store 上已有不少开发者发布了很多优秀的 GitHub 第三方客户端,无法说服自己再去造一个(还是懒)。
技术分享
我一直比较喜欢有技术氛围的团队,大家能定期分享一些技术相关的东西。年初的时候,部门 Leader 也倡导我们要自发地定期进行技术分享和 Code Review。但由于平时业务需求比较繁忙,加上每个同事对分享这件事的看法不同,最终也没能坚持下来。
今年我一共做了两次分享,一次是在小部门内,一次是在公司大部门的 FLAME 计划-技术课堂,得到的收获是:还是要多参与分享,提升自己的表述能力和锻炼演讲能力。
- 详解 HTTPS 和 HTTP/2 及 SSL 数字证书的签发与校验
- 深入理解微信小程序开发
技术尝试
今年,部门的业务需求相对少了一些,也让我有机会去专研一些技术方面的工作,总结如下:
长连接
基于 MQTT 协议封装的长连接服务,主要用于前后端主动通信,实时交互数据,多设备登录管理,IM 聊天场景等。热修复
基于 JSPatch 混淆封装的热修复服务,主要用于实时修复线上 Bug,动态下发配置,动态更新简易模块。不过今年 Apple 加强了对 App 动态修改功能的审核力度,热修复这条路终归是要凉凉了。移动安全
包括客户端与服务端网关通信的加解密逻辑和降级方案,以及学习 iOS App 的反调试,防动态注入,防 tweak 依附,防 hook 方法等一些逆向的知识。关于安全这方面,前人已经总结了很多非常完善的技术栈了,我只能算是“站在巨人的肩膀上”,做一些皮毛工作。开发框架整理
今年终于有时间也有机会对参与项目的工程做一个彻头彻尾的梳理了,最终整理并抽离了几个 CocoaPods 私有库,涵盖了开发一个 iOS App 的基本要素,也算是对自己几年来 iOS 开发技术栈的一个总结。
开源项目
XMNetworking 是 2016 年底,在 @南峰子 指导下,我开源的一个轻量级的 iOS 网络库,在微博大佬们的帮忙转发下,两年过去了,虽然获得了 890+ stars,问题不少,但一直没有动力去更新它。以前我还信誓旦旦说过,一个优秀的开源项目作者,都应该认真关注 GitHub 上的每一个 issue。但是目前 XMNetworking 这个仓库已有几十个未处理的 issue 和 pr,一直静静地躺在那里,未处理,sad…。
- XMFramework
每一个技术人,在积累了一段时间后,都会想自己造轮子。之前我也曾想像 @ibireme 大神开源的 YYKit 一样,把自己积累的 iOS 开发相关的东西整理成 XMFramework 对外开源,奈何自己能力和影响力有限,并且重复造轮子也没有意义。主要还是因为懒惰,没能坚持,最后不了了之。
在新的一年里,希望自己对以上两个计划的开源项目能有新的贡献。
简单总结
这两年,不少有唱衰移动端的声音,“iOS 开发又没人要啦…”。
确实,不可否认的一点是,相比于服务端开发或者算法工程师岗位,移动端/前端,门槛低,行业大牛凤毛麟角,大部分开发者最终都是会归于平庸的,每天忙碌于业务需求,很多人的心态是,“讨口饭吃,做啥都是做”,这并没什么不好。
但作为移动端开发从业者,技术路线窄,真的是岌岌可危,矫情一点说,有时甚至会焦虑得难以入眠。很难想象,3-5 年后,我会在干嘛。
之前在网上看到一篇短文,有这么一段节选:
埋头在电脑前敲代码的王石伟,正是大时代变迁下的小人物缩影。他苦思冥想,改动了一个参数,终于使一款 500 万人使用的 App,支付跳转快了 0.1 秒。但这,连浩荡历史中的一粒尘埃都不是。
不管怎样,“打铁还需自身硬”,给 2019 年的自己简单立几个 Flags:
时间管理
决定什么事该做,什么事不该做。克服惰性与拖延症
这点真的是老生常谈了,就连这一篇本该在 2018 年 12 月 31 日前写完的年终总结,也是拖到 2019 年元旦中午才匆忙赶完。学会沟通与换位思考
善于表达⾃己的观点和想法,⽽不是沉默不言,尽早抛出问题,及时解决。学会换位思考,减少争吵与抱怨。多看书
毕业这两年多,很少有像样地深度看几本书。多交流
多与行业从业者交流,结识更多朋友。早睡早起,少熬夜
坚持总结,写博文
此外,今年在工作上也有很多新的感悟,当然是只能烂在心里,不适合拿出来与大家分享。
最后,分享一句来自罗曼·罗兰的鸡汤,图片摘自罗振宇 2018 “时间的朋友” 演讲文稿:
虽然,以我目前的阅历还远远达不到认清生活真相的高度,但我仍然应该热爱生活,不是吗?
Hello, 2019!
从 2009 来北京上学,到 2019 年,本科 + 硕士求学 7 年,毕业工作将近 3 年,整整 10 年了,时间真的很快。10 年前,我很迷茫,10 年后,依旧很焦虑。
2019 年,期待工作上有一个全新的开始,以及,我的小生命的诞生。
最后
了解我更多,请点击这里》关于我