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

前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)。


基于VB的通用折行打印程序 基于VB和EXCEL的报表设计及打印 VB建立多级目录 -VB资料 VB建立快捷方式-VB资料 VB建立文件关联 -VB资料 将RichTextBox 之中被选取的内容复制到剪贴簿-VB资料 将我的程序的文本直接送到WORD中(不用粘贴)-VB资料 开启文件属性窗口 -VB资料 快速读取 TextBox 第 N 行的资料 -VB资料 快速选择里List全部项目-VB资料 VB利用 App.Path 读取「应用程序所在之目录」 VB利用 EM_LINESCROLL 信息控制 TextBox 的卷动。 命名的技巧 -VB资料 目录所占的字节数-VB资料 VB判断文件是否在IE的缓存中 屏蔽文本框的右键菜单-VB资料 VB取得长文件名 VB取得临时文件名 VB取得某个目录底下所有文件大小总和 VB取得文件的扩展名 VB取得文件内容 确定 TextBox 有几行-VB资料 确定是 WINDOWS 的可执行文件-VB资料 让打印机只打印一行-VB资料 VB如何把批处理文件转换成EXE文件? VB如何调用 Office VB如何将文件删除到回收站 VB如何快速移动文件? VB如何让文本框输入完后,直接跳入下一行? VB如何使用vb取得一个文件的控制权 VB如何使用文件复制对话框? 有关WINAMP 的问题? 处理字符串以修改数据库 开机显示the secondry IDE channel no 80 cable …… <input type=file name=pic>如何取值,如何设置初始值???? 么样判断一个客户机是否能够连上服务器上数据库,在线等待 在RAVE中如何加上总页数和当前页数? 有缺邮箱用的吗>?现在有了哦,穷人快来啊。。哈哈,我也是其中一个。 请问一个 应用程序登陆SQl Server 时密码的问题? 菜鸟提问! Outlook Express邮件丢失 非典嚣张的日子里的北京(希望惊起大家对SARS的关注)!!! 问一个简单的概念性问题,分却很多.......还可加哦 一个数据映射错误 关于进程通讯的问题 问一个简单的概念性问题,分却很多.......还可加哦 哪里可以找到关于OA方面的资料?越多越好,100分送上 高手请进,怎么监测到一个文件将被覆盖 请问如何屏蔽F1查看帮助的功能? 高手请进,怎么监测到一个文件将被覆盖 能提供解码器么? 在tdi中,怎样获取封包ip头? 神啊!救救我吧!!!!(在线等待) 我看SARS危机 求助 我该怎么办??? 管理登陆问题解决?? 一个简单的问题,如何对字符串进行减操作? 谁用过struts,进来交流一下! 请大侠看看俺的小程序,哪里错了(关于不规则图形填充) delphi查询问题(急需) 急求:从硬盘安装windowsxp时电脑出显不能安装,找不到eula!如何解决? 系统分析员VS博士 C#连接Oracle? 关于<BASE> 那里有WebDB下载啊. 在ListCtrl里加类似Combo Box的东西,能实现吗? windows2000下vb的一个小问题~~ 如何把当前路径加入查找路径中?立即给分! 对选用不同的纸张大小,在预览中能看出效果吗? 请问怎么在PB6.0中实现Foxpro(*.dbf)的数据导入,到ASA库中 j2me里怎么才能实现图象的滤镜效果?waiting... CDbSet m_dbSet(NULL)在哪一步才能得到一个CDatabase对象的错针? 新手提问:“镜象”是什么意思 求教,如何配置使性能达到最佳,详情见文 怎样在广域网中提高传屏响应速度?帮帮忙!急啊. 在文件钩子当中如何判断是打开文件操作,还是创建文件操作 怎样在applet程序中显示一幅jpeg图片?该图片存在于c:\image\下。 去年12月是谁发的帖子“做项目经理难么” 关于图层拖拽的问题 我有一块硬盘,迈托4.3G,开格式化分时说错误设备或0磁道损坏,后来fdisk分区,启动无效 这是个什么错误啊~ 第一次做控件不明白 给点指点啊 “协议草案”的英语是“draft agreement”还是“agreement draft”?为什么? "截距相等"用看符号吗 contract什么意思 怎样区别agreement和contract? 两直线平行是截距相等么 胡椒粉加水进入眼睛会怎样 我想问问招远金矿和山东黄金集团哪个好些? 氧化性Al3+>Mg2+>Na+,则元素金属性顺序? 如何检验正庚烷溶剂是否合格我们用正庚烷做去渍溶剂 山东招远金矿因开采造成的生态破坏 1摩尔C17H18最多与几摩尔氢气发生反应 正庚烷在70摄氏度的密度,比热容,粘度,导热率 金矿在招远的分布 这个物质最多能和几摩尔氢气发生反应?生成什么?为什么? 电子分析天平可以检测什么项目? 招远金矿事故我最大的难题就是看不到你,得不到你的消息我烦的不行 第二个问是什么意思,截距表示什么. 云母屏风烛影深指的是什么时间 如何证明π是圆周率? 二次函数的截距是什么意思?怎么算还有公式啥的,求详细解释!谢谢! 云母屏风烛影深,长河渐落晓星沉.的意思是什么? 在图书馆前站着的那些人是谁?Who are the persons ____ ____ standing in front of the library? 云母屏风烛影深的意思是什么? 苗苗按比例描摹油画(秋千)已知原画长83cm,宽66cm,她画的画长是16.6cm,她选用的比例尺是多少请例出算式 accord,pact,treaty,compact的用法与区别如题,不要到网上copy别人写的那些没有用东西.如果有用我也就不发贴了.下面我再发一下此4个同意词各自的英文注解,都出至Longman当代词典第5版.accord---a formal ‘云母屏风烛影深,长河渐落晓星沉.的意思是什么 大豆异黄酮是从黄豆还是蚕豆中提取的?含雌激素较多的食物有哪些? 想做离子色谱 不知道样品怎么处理 能做吗 什么能够快速产生大量二氧化碳或者能大量消耗氧气?或者说,能起到灭火作用?最好是材料低价,反应迅速,效果明显的,试验成功后可再增加赏金~ 用钡餐检查出胃里面有一个阴影是怎么回事 有人用上海精科的万分之一电子分析天平么?效果怎么样我先买了一个沈阳龙腾的,计监局来检了一次不合格,换了一台,还是不合格,10g的砝码称出来9.9983g.计监局的说需要重新选个品牌,谢谢( 什么东西能与吗柠檬酸生成大量的CO2要经济点的写出公式 秋千如何画,请发铅笔稿. 听人讲.中药也会有重金属成份? C6H4CNSCH3用重铬酸钾氧化产物是什么?CN和SCH3在苯环上是相邻的能把CN氧化成氨氮吗? 固相萃取和液相色谱的关系固相萃取跟液相色谱有什么关系?固相萃取重点是什么啊,在什么方面重要点?想买一台仪器该考虑哪些呢? 降解中药材重金属含量的方法 云母屏风烛影深,长河渐落晓星沉的意思简单一点,越简单越好,不要太简单加上:云母屏风烛影深,深的意思,长河渐落晓星沉,长河的意思和沉的意思 国内哪家的色谱四氢呋喃质量好? 品种 莲的美食和药用 莲的名胜古迹 莲的诗文、故事、传说 I have to assume beyond any doubts that. ..这个that引导的是宾语从句还是同位语从句 为什么. 有么有描写人物的故事?可以是自己人也可以是陌生人 云母屏风烛影深,长河渐落晓星沉.的意思要句意,不要故事要这两句的句意,别的什么都不要 云母屏风烛影深 长河渐落晓星沉的意思.(短句) 李阳在家中吃饭时对厨房里的一瓶醋产生了兴趣,他很想知道醋的密度,于是找到了如下器材:小铁块(密度已知为ρ铁)、细线、弹簧测力计和一只足够深的水杯,他利用学过的知识,测出了醋 云母屏风烛影深 长河渐落晓星沉是什么意思 看例子填空百合是( )的( )与( )的( );玫瑰是( )的( )与( )的( );康乃馨是( )的( )与( )的( );向日葵是( )的( )与( 云母特性有哪些? 什么是水体富氧 怎样将分析天平调整到水平 云母的特点有哪些? assume位于句子开头,引导that从句时,用什么形式 请同学们读例子填空. 人大代表建议的写作格式 试证曲面√x+√y+√z=√a(a>0)上任何点处的切平面在各坐标轴上的截距之和等于a 沙眼衣原体DNA-CT-DNA 3.这是感染还是没感染呢? "agreement"和"contract"有什么异同点?I don't need MAYBE,by the way.我再自己多查查. H3AlO3,CH3COOH,C6H5OH,H2CO3,HCO3-酸性排列顺序,还有其水溶液的盐碱性排列顺序.什么什么盐类水解啦之类的,总是记不住.求大神简便的记忆方法,求理解. 过点(0,3),且在两坐标轴上截距之和等于5的直线方程是? 日媒:亚洲的战争与和平取决于中国如何日本3男女光天化日在公园拍AV被警方英媒:中共十八届三中全会将酝酿深刻变澳媒:部分中国城市规划者的“雄心”过港媒:中美两国领导人都想借商贸实现和美国洛杉矶国际机场发生枪击事件日媒:亚洲的战争与和平取决于中国如何快递员不满被辞退欲纵火烧办公室 老保中国雾霾飘到韩国?韩国称口罩销售增六杭州一辆黄沙车右转弯撞死一对老夫妻俄总理:美国窃听外国领导人的行为“无英媒:《新快报》社长等负责人被免除职日本三栖夺岛军演被疑剑指钓鱼岛衢州学生体格最棒 温州学生体质最弱浙江大一新生最新体质健康测试结果公布10个督察组今起明察暗访杭州启动最高规格专项督查 严惩公款请美第一夫人搭档\"芝麻街\"小伙伴宣芝加哥农产品期价1日涨跌不一印度开建182米高世界最高雕塑 呼吁王毅:多签免签协议提高中国护照“含金需要“教练”未来十年是线上线下融合的十年<小样说彩>福彩3D16035期预测水利部交通运输部联合打击非法采砂保障洋帅还会继续选话筒那边的酒气中国大妈拼命跳广场舞,美国大妈却爱练这俩人状态好得“令人发指”长不成女汉子率猴同学“捞月”小小充电桩的尴尬一个窗口一天换出200万元猴子迎春讲述博物学的滴滴优步均被查处匠心画画 百猴迎春凤凰岭游园会主打“猴年西游”洋帅还会继续选春节返乡在即 幼儿家长扎堆开药旅客:人性化服务再多点儿切尔西10场不败
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘