Yuguo.us

iOS界面开发

Introduction

user

余果

全栈工程师,《Web全栈工程师的自我修养》作者。


Featured

iOS

iOS界面开发

Posted by 余果 on .

过去一个月我都在推进团队项目流程上的改变:把APP界面和逻辑分开开发,让两个团队去做自己擅长的事。

为什么要分离界面和逻辑?传统的iOS开发流程是这样的:

  1. 设计师设计完PSD稿之后,做好标注,切出各种状态的图片,给到开发。
  2. 开发拿到切片,根据标注设计稿和切片,同时实现实现界面和逻辑。

从工程质量和进度上讲,有这样几个问题:

  1. 开发周期长。因为一个开发要同时完成界面和逻辑的部分,所以二者只能串行进行,需要较长的开发期。如果发生了设计或者逻辑的变更,他会需要更多的时间去修改。
  2. 代码耦合强。一个人去实现一个模块的时候,代码中难免出现耦合比较强的情况,没有很好地MVC分离。这为后期的修改带来了隐患。
  3. 沟通成本高。因为设计师跟开发人员之间是通过标注和切片来沟通,但是标注首先就是很不可靠的,一个标注了所有间距的设计稿往往并不是我们需要的,我们需要的是一些常量,以及当界面发生变化时的“规律”。再比如标注了按钮与按钮之间的距离是20px并无意义,因为按钮周围可能会有空白区域。如果开发人员迷信标注上的数字,在代码中直接写标注的数字,就会和设计稿效果出现很大的偏差。
  4. 设计还原质量低。因为开发在逻辑、健壮和成本上有非常敏锐的把控能力,但是再设计还原和用户体验方面的经验就略差一些。而且由于设计师和开发沟通之间的问题,还有开发时间紧急的问题,代码耦合的问题,综合导致设计还原的质量低。

所以我希望推进的流程是从web开发中借鉴经验,让我们原本擅长用户体验的前端同学来进行APP界面开发,整个流程大概是这样:

  1. 界面开发拿到需求单和设计稿之后,跟逻辑开发一起沟通明确哪些界面是新做,哪些可以复用界面或者组件。
  2. 界面开发对于修改已有的界面,而无需动逻辑的,直接修改提测。
  3. 界面对于新增的界面和逻辑,跟逻辑开发约定API之后,自己在view中实现API的细节,并且在controller中使用假数据来提醒开发如何使用API。逻辑开发则同时启动工作,关注后台和APP逻辑,涉及视觉层就调用约定的API。
  4. 界面和逻辑一起在测试环境上联调。

关于API的制定和沟通细节,在后面的文章会单独讲。

理想状态下,这个方案能解决上面的所有问题。

但是在大公司推进新的流程往往不会很容易,仔细分析下,会有这样几个风险点:

  1. 前端同学自己的iOS开发能力不够,造成项目延误或者bug骤增。
  2. PM不信任前端同学的能力,担心bug骤增。
  3. 开发leader不信任前端同学的能力,担心项目延误。

其实信任是相对的,如果没有经验和产出,空口无凭让人信任是很难的。好在我曾经有iOS APP上架的经验,团队里还有一位Android开发经验的同学,所以就尝试在一个小项目中开始接入。从产品和设计入手,他们是最希望改进产品质量的人。然后拉开发leader求着接入代码权限,算是取得了小小的一步进展。

要在任何流程中做出改变,推进自己的理念,自己一定要让所有人都觉得比以前更舒服。所以第一点是要做超出自己责任外的事情,对开发而言,把界面的API第一时间给到他,跟他讨论,方便他设置信息。对PM而言,时刻主动反馈进度,在项目群里在互动沟通。第二点是对自己不熟悉的项目,反而要更快地输出成果,付出的代价就是自己要加倍工作。

比如自己评估一周可以完成的项目,就跟PM说预留一周的时间(甚至更短)。但是自己实际上工作可能不止是5天8小时了,可能是5天14小时。刚开始那段时间我基本每天都是9点以后离开。

说句比较鸡汤的话,要想人前显贵,必须人后受罪,还是很有道理的。

最终这个项目比较成功,跟我接口的开发对合作方式很满意,时间和质量上也让PM很满意,设计师更加高兴,所以一步一步,我终于能把自己的理念在更多、更大的项目中铺开,现在唯一的问题就是我们没有足够多的iOS和Android界面开发同学。

那就发个广告,腾讯ISUX招聘iOS和Android的界面开发,希望你:

  • 非常熟悉iOS或者Android的界面实现和动画效果
  • 熟悉界面相关的性能优化
  • 擅长沟通
  • 有推行MVC或MVP的理念
  • 为自己的APP运行在几亿手机里感到光荣
  • 有其它灵活的加分项

所以本篇文章算是一个预告,自己在过去的界面开发中积累了一些经验,所以后面会分几篇文章沉淀一下。大部分内容都是自己已经整理的一些资料,然后进行一些编排。我个人主要是负责iOS端的代码,所以经验也只适用于iOS。

user

余果

https://yuguo.us

全栈工程师,《Web全栈工程师的自我修养》作者。