2016年,在一家互联网公司经历了两个app的兴衰.这一年有欢笑,有泪水,有经验,有教训. 第一个应用是关于经营移动流量的app.第二个应用是给政府做的基于区块链实名认证的app.
第一个项目是在2016年上半年完成的,2016年春节过后才开始上架,名为途流.非常经典的主流框架结构,UINavigationController+UITabBarController.
为了早日上架,设计也是偏大众化的基本样式.首页是用UIViewController +UICollectionView搭建的.其他界面基本是UIViewController+UITableView.
做项目久了,你会发现用 UIViewController架构的好处是灵活性强,修改需求快捷.如果你把当前界面纯粹的设计成了UITableViewController或者其他,
后期老板要换成仅靠UITableViewController实现不了的样式,你就苦逼了.
总结:使用灵活性的控件(UIViewController+需求样式控件),会让你在不断更改需求的时候不那么怨恨老板,所以这也是一条经验.
经验二:使用xib+代码的开发模式,你会发现优势不言而喻. 第一个项目是从外包接手过来的,全部是由storyboard搭建的,打开storyboard一看,密密麻麻,30多个storyboard,我靠!
姐姐又不是画图的,看着这30多个storyboard,还有,密密麻麻的连线,点击事件,这不是给自己找麻烦么?修改需求定位太难.而且这份代码完全没有按照MVC的架构模式去开发,所有的控制器都放到一个文件包下了.
没有功能逻辑分组.又臭又长的像裹脚布一样,所有的控制器遍地开花.看到这里,我感觉到了任务的艰巨性和恶心程度.重写大家也知道,要理清需求,实现所有功能,完全上架,没有一两个月肯定搞不定.怎么办?想出对策,一步一步修改呗!
先不着急优化这个烂工程,先把功能理顺了,产品经理增加需求时,起码不至于手忙脚乱. 不慌,镇定! 赶紧领会别人写代码的逻辑性.让总监给你3-5天时间,理顺这个项目修改大的bug.一边研究项目,一边优化.
一周过后相信做过开发的基本能理清思绪了.实在看不顺眼的你可以动动手脚,一定要保证没有坑在里面再修改,否则不要轻易动别人的代码,你可能修改一个bug又来n多个坑等着你.首先,我做了性能测试和内存泄漏,把能修复的内存泄漏先修复了.
内存泄漏说白了就是该释放的没有释放,项目中用到加密或者第三方sdk造成的内存泄漏比较多,如果是项目中的控制器存在内存泄漏就赶紧改掉,能看懂的你就修改,看不懂得往后放,成熟的sdk有一两个内存泄漏影响也不是非常大.反正我是都修复了的.
我们项目中还有不少连线crash,网络请求弹框没做优化,反复弹框等问题,也是第一周做的事.还有我看不惯的一些语法问题,也都修改了.保证项目没有大的漏洞,先上架了第一版.时间有点长了,忘记第一周还做什么事情了.
这时你会无比怀念xib+代码的开发模式, UIViewController和xib一一对应,简直太爽了,找什么都能迅速定位. storyboard+ UIViewController导致遍地开花,调整控制器还需要写一长串代码.
如果用纯代码的项目,完全不用storyboard和xib,修改约束的弊端也很大,你想修改哪个控件,你还得去分析代码,哪段代码指的是左右的哪个按钮,上下的哪个UIImageView.然后再上移下移约束试试,还得运行看效果,修改的约束是否合适.
所以UIViewController +xib修改约束更直观简介灵活,xib有个属性Multiplier,可以做屏幕适配,设置控件的比例.
例如按钮宽度是控制器宽度的0.8倍,就将Multiplier设置成0.8. 不要设置成,距离控制器左右间距为20之类的,因为在5s上,按钮会显得太大,6p上又显得太小.设置比例就好.
UIViewController +xib开发,push跳转控制器更加简洁.
1. storyboard+控制器跳转时需要这样写:
UIStoryboard *board=[UIStoryboard storyboardWithName:@"ForgetStoryBoard" bundle:nil];
ForgetTableViewController *forgetvc=[board instantiateViewControllerWithIdentifier:@"ForgetTableViewController"];
[self.navigationController pushViewController:forgetvc animated:YES];
2. xib+控制器跳转就很简洁了:
ForgetTableViewController *forgetvc=[ForgetTableViewController alloc] init];
[self.navigationController pushViewController:forgetvc animated:YES];
第二个项目:基于区块链底层技术的实名认证app.
经验一:从0开始搭建--任务要求两周一个app--利用自己最常用的MVC架构模式迅速开发,实现最基本的功能需求.(随机数生成-调用第三方sdk加密算法-声音采集-用户注册-折叠动画卡片效果-二维码生成和保存-扫描二维码登录第三方网站-文件签名函数加密算法-用户信息读取和特征声明,用户头像本地缓存等).麻雀虽小,五脏俱全.老板需求旺盛--增加了折叠透明卡片的效果,类似于苹果手机中的搜索栏中常见应用.利用tableview实现,通过调整alpha值和frame约束以及block传值实现了透明的折叠卡片效果. 两周的功能基本完成,在会议中进行了app预演和测试,没有大的纰漏和bug.
第三周第四周:1.根据服务返回的数据类型动态的生成schema界面,要用字典进行处理数据了,字典转模型不好使了.
因为服务器的需要的元素类型和数量增减你是无法预判的.
(动态生成文本框的数量和内容,日期选择器的内容和数量,民族的内容和数量等).
调整第三方登录的参数,配合接口人员进行相关的测试和调整.
2. 优化文件签名接口和数据处理模式.
3.增加TouchID指纹或者密码解锁功能.
经验二:打破固有的常规开发模式,敢于尝试不同的后台架构.
技术人员有限,后台接口一个架构师,为app写了3个数据接口.而app界面多达几十个.
界面中需要的数据只能通过上层界面的传递或者根据能取到的数据自行组织结构,达到适应界面的需求.
这给前端开发造成了很大的弊端和麻烦. 如果用户量很大的话,数据处理放到前端,app的流畅度和体验性会差一些.
但是现状如此,只能硬着头皮去处理.毕竟是初创app,前期的工作艰辛和曲折也不可避免.
作为技术人员,我们能做的就是会根据现有条件把事情做好,否则你去说服老板讨论技术架构或者跳槽.
大量的数据处理放到前端,也是第一次接触,当你无力说服老板并且后台不具备这样的技术开发人员时,去挑战一下也未尝不可,在哪里都是做技术.
第二个月:根据新的UI设计调整界面,字体大小,删减界面元素,修改之前搭建的折叠卡片效果,使用新的动画卡片翻转效果和点击卡片处理事件操作.
第一个月的开发从始至终是没有ui设计和产品经理的,作为女孩子,毕竟有点画图的天赋.
我利用了一周的时间快速领会老板的意图和对产品风格的喜好,画了一些流程图和项目架构图,又设计了ui界面和功能需求.
经验三:积累折叠卡片处理经验,混合swift开发.
第三个月--新增需求和改版.本地模糊搜索功能,保存数据至本地,改版设计界面,统一适配.
新增用户登录界面,用户密码重置,后台运行自动登出功能,调用自己开发的sdk,生成各种key值加密解密.
关联智能合约,数据上链,混合swift动画开发等等.然后就春节了.这一年累并快乐着.
新年新需求,第三方sdk库重写,前端重新调用新的sdk生成各种key,数据接口相应做了调整,需要开启多线程处理数据请求.
新增二维码识别,身份导入和挂失等功能,看来又是不平凡的一年.祝我好运!swift开发走起.