我的 2019

Posted by Matt Reach on December 30, 2019

2019 年回顾

工作

今年一直在做 macOS 开发,技术上熟练了好多,所负责的产品 - - - 搜狐影音共计迭代了 10 个版本,相比去年功能上可谓完备。

翻看了下 2018 年定下的五个 Flag,除了没有使用 Swift 混编之外,其他的都完成了,虽然没有混编,也不是一点没有看 Swift,抽了点时间使用 Swift 写了个从 .car (xCode Assert 压缩后的一种文件格式)文件里提取图片的工具:CarExtractor.

1、使用 development pod 进行模块化开发

今年做了很多的功能,如果工程上没有一点结构性,一直垒代码的话,我想一年下来这十个版本搞下来工程就变得很不好维护了,因此我在开发各个功能时,就讲功能按模块进行开发,我觉得要想做到模块,首先要进行环境隔离,做到不能过多的依赖其他模块,做好是做成输入和输出型的!

谈到隔离,在 iOS/macOS 开发经常用的就是独立工程了,早期我们都是手动创建工程,然后跟主工程放到一个 workspace 里,我之前负责 SDK 开发工作时确实也是这么做的,但是 2019 不同了,我做的是一个独立项目,是时候使用 Cocoapods 来管理了工程依赖关系了,使用工具的结果就是省时实力!

Cocoapods 玩法很多,经过摸索决定模块均使用 development pod 进行开发,之所以采用这种方式是因为修改源码及其方便,不像 pod 库修改的源码在 pod install 之后就丢了,之所以丢是因为代码的源没有改,而 development pod 的源码就在你的工程里,所以 pod install 之后 不会丢失!并且只有新增删除文件才需要重新 install,还可以为 development pod 建立相应的测试 demo,前期开发以 demo 为主,功能趋于完善后,集成到主工程,后续改 bug 基本都是在主工程直接改了,这个 demo 的主要作用就是提升集成质量,为单元测试提供最小环境。

我也有尝试过做私有 Pod 库,但实际开发效率并没有 development pod 高,因为私有 Pod 库的发布流程跟公有库一样繁琐!需要将源码提交到 git 仓库,然后将 spec 文件 push 到私有 source git 仓库中,然后集成者 pod update,这一过程会浪费不少时间,并且私有 Pod 库的 demo 一般也不是真正的集成环境,也就意味着集成后可能会由于环境不一致集成后出现问题,出了问题就又需要修改源码重来一遍,很是麻烦!

使用 Pod 库的另外一个好处是可以减少代码冲突,由于 Pod 库是独立的工程,因此天然具有隔离性,避免了代码重度耦合!development pod 为后续实现一键切换 Pod 二进制或源码库,做了铺垫。截止目前所有的组件和三方库均实现了二进制化,想要修改源码时只需修改下 Podfile 里的配置,运行下脚本即可,源码修改完毕,测试无误后,只需要运行下脚本将库打成二进制发布即可,在全部是二进制库的情况下编译速度提升了 70% 左右!

这是当前的项目结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
├── DevelopmentPods
│   ├── MRFoundation
│   ├── MRMoviePlayerKit
│   ├── SCNetworkAgent
│   ├── SCNetworkKit
│   ├── SHBarrageKit
│   ├── SHDownloadKit
│   ├── SHShareMovieKit
│   ├── SHUploadKit
│   └── ...
├── Podfile
├── Pods
│   ├── CocoaAsyncSocket
│   ├── CocoaAsyncSocket.xcodeproj
│   ├── ...
├── README.md
├── SHVideoPlayer
├── SHVideoPlayer.xcworkspace
├── ruby
└── sh

2、去年使用 Angular 开发的工具箱小网站,最近几天全部改成 React 开发了,没有什么特殊原因,就是想学习下 React 练个手而已,网站地址: https://debugly.cn/mr-zone/

2020 年规划

  • StudyFFmpeg 今年几乎荒废的情况下收到了几颗 Start,明年一定要继续更新,达到一个音视频开发工程师的标准!
  • 搜狐影音我想做的两件事:实现投屏,自动更新!
  • 我不喜欢读书,但是又买了好多的书,必须要看完 3 本!