说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

前Twitter iOS技术团队负责人:使用第三方库的四大准则

HTML文档下载 WORD文档下载 PDF文档下载
直接使用第三方库能够最大程度缩短开发时长,开发者很难抵挡着近在眼前的“短期红利”,但“魔法神奇库”也有可能阻碍程序排错。本文作者Ben Sandofsky曾领导Twitter iOS应用技术团队,他给出了挑选库时的几条原则。

CSDN移动将持续为您优选移动开发的精华内容,共同探讨移动开发的技术热点话题,涵盖移动应用、开发工具、移动游戏及引擎、智能硬件、物联网等方方面面。如果您想投稿、参与内容翻译工作,或寻求近匠报道,请发送邮件至tangxy#csdn.net(请把#改成@)。 


如果今天能拿到50美元或1年后拿到100美元?你肯定选择前者;但五年后拿到50美元或6年后拿到100美元,你肯定选择后者。这真是不可思议,因为两种选择的时间差仍旧是1年而已。经济学家将这种现象称为双曲贴现(Hyperbolic Discounting),指在面临两种相似选择的情况下,人们往往倾向于更简洁及时的结果,暂且将其称之为“短期红利”吧。

在iOS App上加载第三方库曾是颇费周折的一件事,我们不禁停下脚步扪心自问:这一切真的值吗?后来CocoaPods(OS X 和 iOS 应用开发的第三方库管理工具)将加载过程缩减到秒,开发者就更难抵抗这近在眼前的“短期红利”了。


“短期红利”最吸引人之处在于省时,比如你的App需要一个REST API封装器,那么你是愿意用“魔法神奇库”只花1个小时搞定,还是花1天自食其力呢?

如果是创建原型,那么推荐使用现成的库。我让学生在初始阶段这么做,一来不想让繁琐的细节打击了他们的积极性,二来不想他们错过上交作业的最后期限。

但要开发一个数年屹立不倒的App就不是“一小时 vs 一天”的差别了,而是“100小时 vs 101小时”。这“魔法神奇库”适用于简单一致的API;而Production API牵扯到商业逻辑、边缘情况(edge case)和技术债务(technical debt)等等。产生式系统(production system)并不是十全十美的,“魔法神奇库”也可能阻碍程序排错。

此文无关库或CocoaPods本身,而是给你提个醒(见文章:“due diligence”)。一个团队吃饱了撑的才会花数周来寻找测试员测试代码;转而Google第三方库,选择搜索页面上第一条那个有10,000行代码的,也聪明不到哪儿去。

要知道库的成本并不是一劳永逸的。举个例子,苹果公司一向不怎么待见Core Data的“lock”方法,那要运行时下流行的Core Data封装器的最新版本怎么办?——可以先升级库,但填补5,774行代码空缺谈何容易?升级rename方法就意味着损害App。如果直接运行旧的Core Data,“lock”方法的顾虑也就不复存在了。

CocoaPods能解决依赖图(dependency graph)的问题,但应对不了API混乱(API churn)。如果你直接无视pod版本还能在半年后返回到原点(见文章:“return to the project after six months”),那真是个奇迹了。

总而言之,尽量别太依赖第三方库,能免则免。而且所幸你也用不了那么多。Cocoa网站背景引人注目,但它实际上是个一应俱全的框架,以创新方式提供动画、网络、持久化等App所需元素。

挑选一个库时,我秉持这几条原则。无法获得百分之百赞同是肯定的,但想反驳我,最好准备充分的理由。

1. 高级API避免使用abstraction。

iOS工程师在设计框架时,充分考虑了开发者自由发挥的“度”的问题。UIKit团队本来可以将UITableView进一步抽象,但他们知道要达到60FPS的速度,开发者必须考虑cell循环的问题。

总的来说,苹果公司为C语言提供低层API,为Objective-C提供高层API。如果需要一个简单的照片选择器,用UIImagePickerController,麻烦一点用AVFoundation。苹果公司也会犯错,比如iOS Keychain,还有复杂繁琐的Address Book API。前者已用封装器解决,后者已通过苹果的新Contacts.framework解决。

管理过程中,时不时出现的键盘会拖慢进程。重新布置所有Input View,把它们放在显而易见的位置。如果单纯把问题丢给库来解决,一旦遇到View Controller限制,那么abstraction就会漏洞百出,跟筛子似的。想想automaticallyAdjustsScrollViewInsets失败了多少次啊,它在UIKit里就是View Controller属性。

2. 别太把Boilerplate当一回事儿。

设定Core Data栈需要的20行代码,就好比巫师施法没有祭品一样让人匪夷所思。你可以使用一个Core Data封装器1行代码的Setup,但我的做法是直接复制粘贴样板文件。没错,复制粘贴而已。

初学编码时,别人就告诫你:“切忌重复”。但往往开发者非得浪费几百个小时为干巴巴的代码排错后,才突然明白原来自己一直在“重复”。

如果样板文件让你觉得天旋地转了,就将它重构进类方法吧。这也嫌麻烦的话,就创建一些模型对象(model object)。总而言是目标是迭代为领域模型(domain model)。苹果的框架只负80%的责是有原因的,剩下的20%得靠你了——因为毕竟是你自己的App。

3. 多多不一定益善。

在《代码大全(Code Complete)》一书中,Steve McConnell解释道:project的成本跟代码库规模并非线性扩展的关系。所以做小一点的project比较明智,这不足为奇。

AFNetworking这可能是最受欢迎的开源iOS库了,具有请求序列化、可达性监测以及安全保障等诸多特点。今年四月,研究者却发现了两个严重的安全漏洞,涉及2.1及以上版本用户,两个版本之间时间跨度长达一年。大多数App并不需要使用AFNetwork,为了降低安全风险肯定也不会用到“证书锁定(Certificate pinning)”。

4. 如果问题超出了熟知领域,推荐使用库。

千万不要走极端,自己不了解的东西出了问题,也是要承担责任的。为OAuth排错?还是省点力气吧,库虽然并非完美的解决方案,但它是更好的选择。曾经有人说:“要是库能解决问题,干嘛还费劲搞明白OAuth?”

iOS 5 Beta推出后,我的团队发现了苹果系统中OAuth库的漏洞。多文件上传(Multipart-upload)有问题,照片上传往往失败。那时候iOS 5 API是锁住的,而苹果看样子也没有及时修复问题的意思。所幸我们能善加利用OAuth,最终将苹果框架“糊弄了过去”,解决了问题。

没必要专门去了解OAuth,但是如果你的App用到了OAuth,那么了解至关重要。没有人会在乎是代码出了问题还是库出了问题。关键是——这是你的App,你难辞其咎。

(翻译/张新慧 审校/唐小引)

文章来源:Medium

作者简介:

Ben Sandofsky,iOS应用开发者,现任CodePath创业公司顾问;曾任HBO(美国付费有线和卫星联播网)的硅谷题材剧集《Silicon Valley》的技术顾问;曾领导Twitter iOS应用(iPhone、iPad和Mac)技术团队。


预告:  2015中国移动开发者大会(MDCC 2015)将于10月15-16日在北京新云南皇冠假日酒店召开。大会特设五大技术专场:平台与技术iOS、平台与技术Android、产品与设计、游戏开发、企业移动化、虚拟现实专场。此外,大会更是首次举办国内极具权威影响力的IoT技术峰会,特设硬件开发技术与嵌入式开发两大专场。大会将聚集国内最具实力的产品技术团队,与开发者一道进行最前沿的探讨与交流。 

第一时间掌握最新移动开发相关信息和技术,请关注mobilehub公众微信号(ID: mobilehub)。


EMC收购闪存初创公司DSSD,走出联合储存战略第一步 创业失败的七个原因及解决之道 集结号:最受开发者欢迎的跨平台游戏引擎 Cocos2d-x v3.0正式版本发布!优化C++、Lua、JavaScript接口 定价99元首发1万台 360安全路由器启动预约 AMD新产品线曝光 首次实现X86与ARM针脚融合 IT界最难以替代的9个角色 《近匠》英特尔® XDK:从开发、测试到部署,一站式HTML5开发工具 手游云测工具TestBird:测试走入垂直细分领域 阿里巴巴赴美IPO的种种及马云内部邮件全文 盘点EMC World 2014三大看点 2014年Q1:智能手机总销量下滑,WP同比反增119% 着眼无人驾驶技术 英特尔投资日本ZMP公司 移动云服务UCloud快速扩张 成立北京分公司 精准推送 个推推出2.0产品“Smart Push” 从张小龙的七大价值观说开去 2014高德LBS应用大赛正式启动 助力打造生态圈 专访永洪科技CEO何春涛:管理者的炼成及国内大数据公司的挑战 R语言如何发展?商业支持或许可行 专访InMobi CEO Naveen Tewari:Banner广告已经OUT 效力苹果18年的资深高管Katie Cotton将退休 主打“全、新、独、准”,华为推出游戏中心平台 阿里云计算出海挑战亚马逊 首站香港及东南亚 TIOBE 2014年5月编程语言排行榜:Adobe ActionScript挤进Top20 秒杀iPad Mini?微软或将下月发布Surface Mini 大道手游:详解应用内购买的定价趋势与技巧 与英特尔软硬合作,Cloudera将在中国建立业务机构 准备迎接第一个量子计算软件公司吧! 搜狗搜索发布新LOGO和移动App 正全面入驻腾讯各条产品线 做好扁平化设计-视觉篇 关于敏捷研发的跨界反思 除了面板上的控件之外,其他一些VC自带的控件在哪里? 谁能把本期的变成擂台题目概要贴一下? 小的是菜鸟,想问一个查询问题 在平面上如何实现三维坐标的模拟定位?(在线急等) 在VB中怎样压缩磁盘中的文件或文件夹 如何在平面上实现三维坐标的模拟?(在线急等) 请问各位高手《Delphi 6程序设计从入门到精通》里的例子代码谁有? 在平面坐标里如何实现三维坐标的模拟定位(在线急等) 怎样实现这个简单的功能? “将事件写入日志”选项不能改动了?奇怪 如何在平面上实现三维坐标的模拟?(在线急等) 如何比较两个字符串 NCNE--国家网络技术水平考试介绍 在问个简单的问题:Delphi中引号的问题 怎样知道windows的应用程序的路经 哪位高手给俺讲讲with xx as xx do 的用法,谢谢! 很菜的问题 请前辈进,请高手进!!! 那位仁兄有JAVA开发的五子棋游戏,我用一套软件交换 怎样用com技术C/S三层做中间件和使用,谈一点原理和实例。 高手请进 100分!!!!!!!!!!! NCNE 国家网络技术水平考试 介绍 软键盘的问题?UP有分 关于装配件的问题 想购买一套人事管理系统的源代码!!!!!!!!!!!!!!!!!!!!!!! 对话框中标题栏上面的颜色如何改? 对服务器来说,内存更重要还是运算更重要? 关于jdk与windows xp 我举报:信息产业部的领导根本没有学习好“三个代表” 聘驱动开发人员!!! 本人在运行REALPLAY8.0的时候出现了这样的错误窗口. 普通常量与符号常量有何区别,怎样使用? 怯怯地问: 问题一:我的网页是用表格分的区域,把表格线设为0 ,但加了背景后 ,背景上总是有一小条白线 ,那是表格的边框线 , 问怎么办? 这个不是太难,但很不简单! 报错---[Linker Fatal Error]Fatal:Expected a file name:,什么原因?大虾指教,在线等待 远程调用时传输数据的问题! 2000 不能正常关机 初当网管,请教大家都用什么工具? IIs重新启动一个web服务出现死机,怎么回事? 问题二 :我做了个POP窗口 ,我想在POP窗口打开时是固定大小的 ,不能调整, 该怎么弄? 希望有一个网络安全的开发专版 关于中国万网的域名解析问题。急救! IIs重新启动一个web服务出现死机,怎么回事? 系统提示有错啊! 请教各位高手,本人在运行REALPLAY8.0时出现以下错误提示! 用javascript如何判断textbox中的串是否是汉字及其个数? 用DELPHI的都是一些比较菜的程序员的工具!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 数据更新的问题 QueryString 多参数如何分隔?? 《C++ Primer》和《C++ Language Programming》有类似吗?是否都买来看? 张鸿铭任杭州市委副书记 提名为市长候买房配套利用率不高 业主争论12万改东站乘车设施不完善 网络购票需提前取杭州气象台发布高温报告 未来最高温可温州整顿行政审批搭车服务 对强制收费高铁开放五种买票方式 换乘时间要预留宁波首趟高铁列车发车17分钟时速达3杭州东站换乘有攻略 每层都设购票点宁波今明最高气温达38℃ 夏季小儿易杭州朝晖六区房屋变形 倾斜远超危房标杭州昨首发高温橙色预警 今明预计最高宁波到上海高铁昨天中午在杭州东站停靠金华市区公办中小学报名首次执行人户一宁波高温不断攀升 马路隆起包孩子都病暑期户外隐患多 儿童安全莫停课5081万千瓦 浙江用电新高两个三峡杭州东站进入暑运状态 前往福建动车票市中医院一天收14个蛇伤病人 夏天出一个小区有两个物业 能耗纠纷业主吃亏义乌黎明小学招收181名借读生 报名金华天气突变热 25岁小伙上班中风实现营收101亿元我省招培55名政法干警北京:旅游车导游专座新华社济南8月26日电(王瑶 莫小亮参与三江湿地公园规划赛前声音沪指险跌破2200点拒用黄赌毒艺人北京四大鬼宅《诡八楼》再上银幕明明是腐败,别假装“人情往来”中秋何处去赏月 ?社保费用不落实不批征地“经济型月饼”走俏《卫子夫》造型获赞到印尼乌布感受海岛田园创纪录签约迪马利亚“走读干部”走失民心安倍政府将进行首次政策精准发力 决战经济下半场早餐真那么重要么?我省举办智慧旅游 专题培训
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘