陈江川

邮箱:jiangchuanc@gmail.com

项目管理

因为在公司维护了一个gitbook,所以个人的博客最近很少更新。前些日子和朋友聊天问我最近怎么没写博客,想想还有零星几个朋友关注着,让我觉得博客还是有必要维护下去。

模块化的工作已经陆续开始,为了实现开发过程中的正规化,这段时期做了以下几件事:

1)制定代码规范;
2)git-flow,实现本地代码仓库管理;
3)搭建Phabricator,实现Code-Review;
4)使用OCLint,实现静态代码分析;
5)Jenkins自动化构建。

文中不会过多涉及服务的搭建,一些安装配置问题google吧,自己动手丰衣足食!

Thinking

Zero. 现在

两个月没写blog了,8月中旬开始一直忙着封装公司核心业务的SDK,以及完善之前的封装的Sip静态库。OCLint一直想写第二篇文章,但涉及到一些原理的东西,需要大篇幅讲解,加上又劳心着SDK的封装,所以一直没动手。

想让iOS组开发走上一个正规化的流程,为什么会有这个想法?

  1. 入职公司第一次打开项目的时候,先从AppDelegate入手,第一感觉:无序,杂乱;然后再打开Main.storyboard,我用的Macbook Pro 8G内存 + SSD,加载用了1min,里面竟然有30多个控制器,至此Main.storyboard没打开过;
  2. 随便打开一个ViewController,代码行数随随便便2000+;
  3. 属性命名乱七八糟、注释乱七八糟、逻辑处理乱七八糟...

这个项目大概3年前开始做,中间经过了N个人的手,又没有一套规范,各自按自己的风格来写,最后变成了烂摊子,大家都不想动这个项目,但是有新需求还是得硬着头皮改。

Code Review-OCLint系列开篇(2018-04-27更新)

为什么要在团队中加入Code Review的环节?现在公司iOS团队中共8人,每个人的水平不同,导致编程风格各异,代码中出现一些容易犯错的问题。很多问题都可以在Code Review环节中解决,而不是到测试环节才解决。

初衷并没有想做得这么深入,只想简单把代码风格统一,方案是利用git的合并分支请求,然后人工进行对比。但想到“人工”两字,完全不符合程序员的风格。于是搜Objective-C Code Review的工具,看到OCLint这玩意,然后就入坑了。

时隔大半年,在实际项目中实践OCLint,回头看这篇文章,发现其中有些未写明的地方,且忽略了诸多细节,前些日子,朋友看了这篇文章,也向我反馈了一些问题,所以决定更新这篇文章。-- 2018·4-27

设计模式 - 桥接模式

先抛出问题:设计一个跨平台视频播放器框架,可以在Windows、Linux、Unix平台上播放rmvb、avi、mpeg、wmv格式的视频文件。

  • 方案一:每个平台都提供一套解码和视频操作接口;
  • 方案二:平台视频操作接口和解码独立出来,根据实际的视频格式先解码,然后再在不同的平台上对解码后的视频数据进行操作。

iOS项目开发中组件化的应用

在之前的几篇文章中写了iOS组件化的两个方案,这两个多月没有更新的blog,是因为手上有三个模块需要组件化,利用这次机会实践了这两个方案。workspace的方案很顺利,并没有棘手的问题,下面以CocoaPods方案为例。

iOS组件化之路

目前主流的iOS组件化方案有两种:
1)基于一个Workspace,关联多个Project;
2)CocoaPods私有库。

Xcode8如何使用插件

插件对我个人来说是非常重要的,尤其是XVim。废话就不多说了,直奔主题。

Xcode更换签名

  1. 进入“钥匙串访问”

  2. 点击“钥匙串访问”->“证书助理”->“创建证书...”

工厂方法模式和抽象工厂方法模式的区别

工厂方法模式 抽象工厂方法模式
通过类继承创建抽象产品 通过组合对象创建抽象产品
生产单一的产品 生产多个系列的产品
通过子类化Creator,并且重载父类的工厂方法创建产品 子类化Creator,不重载父类的工厂方法,但是通过修改父类的多个接口,达到创建多个产品

podspec

分析

.podspec文件里面描述了库所有信息,所以怎么修改这个文件还是要花点时间,所以在这分析下该文件里面的内容还有有必要的。

Pod::Spec.new do |s|
  s.name             = 'HoriHomeModule'
  s.version          = '1.0.7'
  s.summary          = 'this is hori home module'
  s.description      = <<-DESC
                        TODO: Add long description of the pod here.
                        add BeeHive
                       DESC
  s.homepage         = 'https://gitlab.com/chenjiangchuan/HoriHomeModule'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'jc' => 'jiangchuanc@gmail.com' }
  s.source           = { :git => 'https://chenjiangchuan@gitlab.com/chenjiangchuan/HoriHomeModule.git', :tag => s.version.to_s }

  s.ios.deployment_target = '8.0'
  s.source_files = 'HoriHomeModule/Classes/**/*'
  s.frameworks = 'Foundation'
  s.dependency 'BeeHive'
end