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

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


威胁百度:奇虎360确认将与谷歌达成合作关系 Facebook更新Messenger应用 推免费网络电话服务 网上疯传iOS7概念设计:Dashboard是真是假? 过时的UI设计 Ubuntu手机系统前途不被看好 三星将于今年发布Tizen设备 将对苹果形成威胁? 分享9条经典的编程语录 国际著名黑客大赛介绍与比较 微软Azure CDN服务全球范围内出现宕机 双向多功能U盘:从Android设备到PC还有多远? 证明了自己:微软Win8获美国防部6.17亿订单 2013 Facebook黑客杯报名即将开始 解决Win8下IE10无法打开的故障 [简讯] Scala 2.10.0发布! 收购传闻:Apple一厢情愿还是Waze待价而沽 回顾过去,展望2013:移动开发引擎、工具和语言盘点 成本为0!Netflix开源工具Janitor Monkey清理AWS iOS开发者讲述在Google工作的三个月 GitHub历史上最糟糕宕机事故回放及反省 疑因竞争 谷歌有意让地图与WP手机不兼容 移动游戏开者必看:海外VC最关心什么? 淘宝UED:随侃设计师的个人素养 TIOBE 2013年1月:不负重望 Objective-C再次赢得桂冠! 大数据:商业或技术的挑战? 开源移动统计:Cobub Razor近期版本大升级 无人机应用,为何屡遭苹果拒绝 2013年Java继续火的五大理由 Rails所有版本都有SQL注入漏洞?其实没那么严重 如何设置Windows Server 2012 NTFS权限 智能手机大局已定 HTC难扭转乾坤? 比谷歌手表更酷!基于大数据分析的睡衣 众投资金:改变了移动游戏开发的一切一切 请教一个SQL的问题 从局域网内拷贝文件,总是断线 问大家一个特别傻的问题,但是请务必帮我解答,谢谢了 问大家一个特别傻的问题,但是请务必帮我解答,谢谢了 treeView控件的问题 asp中的几个问题,急! 在类中用static const 定义常量的问题 谁安装oracle9i了? 哪里有文档编辑软件的源程序(带查找、替换),给url就给分? =最近做了一个免费小工具,想请大家帮忙测试并发表一些关于我的程序功能和界面布局的意见= 很急 [建议]关于提问 100分请教如何使用JS来实现定时执行alert()命令 请问怎样给DataGrid添加一个空行? 请问在用openssl生成csr时出现如下的问题,如何解决?急用 100感谢 =最近做了一个免费小工具,想请大家帮忙测试并发表一些关于我的程序功能和界面布局的意见= oracle 9i的问题,急救 24位的位图是不是没有颜色表? 一个简单的关于层的问题,谁能帮我解释一下呢? 请问在用openssl生成csr时出现如下的问题,如何解决?急用 100感谢 超菜问题? 现在网上有没有破解的MDaemon下载? 唉,和老妈吵架~散分~~ LyfUpload组件上传时能否添加下拉框,并把其值一起提交到数据库中?急!急!急! 请高手一览:为什么这段程序不能写进数据库?不好意思,分只有这么多了!呵呵 建立一个收费的网站的思路如何?请大家指教! 怎样改造Anythere 5.0的数据库? 有没有去过珠海的朋友? 我出100分重新讨论《100分求助:如何解决内存泄漏,代码如下》 有没有现成的软件,判断一个email的使用方的具体位置,到“市”一级? 用ADO能不能用SQL语句将Access2000库中的表复制到SQL2000server库中? maddam、Hankuu请进,重新给分。100分求助:如何解决内存泄漏,代码如下(无内容) javascript中如何控制<input type="image" id=id1 name=name1>的位置 如何用pb完成文件上传服务器的功能 有关ORACLE在ODBC内部的连接问题?? 经典砍价术 十个系男生的初夜 菜鸟没分了,还是慷慨散100分求助!(Up 有分) 求救,图像和文本一起上传 网络安全问题的一点疑问,欢迎大家来讨论,分数不够可以再加!!! Gnome桌面显示不出来? 请问VC和BCB哪个更好? Rational材料 怎样入手SQL 紧急求救:系统不能正常关机 在installer安装程序中如何创建程序组快捷方式 IE非法出错 一篇妓女写的文章,(转帖)作者不详 javascript中如何得到当前时间(yy-mm-dd hh:mm:ss.mmm) 新手问路:请教Bean与一般的java class 的区别 linux怎样才能支持3D鼠标? 日本从中国进口煤炭,然后倒入大海,是怎么回事? Coffee isn't a healthy drink.Coffee id _____ _____drink.(同义句)What do you think of the film?(同义句)He___ ___ ___ ___ the film?He went to the hospital in a hurry(同义句)He ___ ___the hospital.My mother gave me a dictionary as my bi 金属缠绕垫检验标准 向1L0.5mol·L—1的NaOH溶液分别加入稀醋酸、浓硫酸、稀硝酸,则恰好完全反应时的热效应△H1、△H2、△H3的关系正确的是A.△H1>△H2>△H3 B.△H1<△H3<△H2C.△H2>△H1>△H3 D.△H1>△H3 “这场比赛被人们誉为是‘强强对话'.这句话有语病,应改为······ 金属缠绕垫规格型号前加HW是什么意思 硫酸和氢氧化钠要纳入危险化学品重大危险源辨识吗?他们的临界值是多少? 为什么日本人在海底储存煤炭和矿石,他们的目的是什么 反-4-叔丁基环己烷甲酸的结构式 地球上什么是可生资源 NaOH溶液分别与①醋酸②浓硫酸③稀硝酸恰好反应放除热量分别为Q1,Q2,Q3 比较Q1.Q2.Q3的大小.答案上写Q1<Q3<Q2就是不知道为什么, 金属缠绕垫用的gd0529是什么意思?具体是什么? 手表怎么换电池 为什么煤可一沉入海底保存 金属缠绕垫中的(金属缠绕垫DN200)是什么意思? 不重合的两个平面最多有几条公共直线? 大气层的温度是否都随离地面高度的增加而降低? would you like tea ____ coffee?I don't like tea _____ coffee1.and...and2.or.and3.and..or4.or.or 平面α∩平面β=α,平面α∩平面γ=b,平面γ∩平面β=c,且abc不重合平面α∩平面β=α,平面α∩平面γ=b,平面γ∩平面β=c,且abc不重合,求证a,b,c,交于一点或两两平行.请写出具体的证明步骤,麻烦您了. 大气圈温度随高度增加而递减.这句话怎么错了=_= 怎么才能增加豆腐的韧性?我想增加豆腐的产量,可是产量上去了豆腐就太嫩,根本来不起来. 不知道如何解决.请个位大侠帮忙想想有什么办法. 谢谢! 地球上很多矿物资源是不可再生的 对 还是错 食物热量与燃烧时间有无关系玻为什么?匾抒赔是不是欠 现今英国与印度之间的关系 关于露天煤矿的“二量”是什么,起到什么作用.知道是指开拓和回采.但“二量”的作用是? 为什么燃烧的时候会放出能量? 英国和印度的关系 只有一个地球 " 矿物资源"说明了什么?从哪个词语看出?地球所拥有的自然资源也是有限的.拿矿物资源来说,它不是上帝的恩赐,而是经过几百万年,甚至几亿年的地质变化才形成的.要从这句话 中国是怎么选举主席和总理的? 烟囱林立的英国工业,印度民族大起义,英国宪章运动的关系 地球除了矿产还给我们提供了哪些资源 测量五要素是什么? 英国在印度的殖民对印度的影响 掘进面和回采面可以用压入和抽出两种不同的通风方式么 中国美国韩国法国泰国日本英国西班牙巴西属于哪个洲 河姆渡人和半坡人有什么异同?要用自己的话说,不能完全抄课本中的.好的我会采纳. 花岗岩为何是侵入岩?这其中的侵入怎么解释? 西双版纳州是否有人出售橡胶树? 醋酸和氢氧化钙反应CH3COOH + Ca(OH)2生成什么? 花岗岩变质后成为什么岩?我想知道谢谢 用两节南孚5号怎么让普通发光二极管发光 氢氧化钙和氧化钙反应25℃是在澄清石灰水中加入少量氧化钙,恢复到25℃时该溶液的溶质、溶质的质量分数如何变化? 看来,提高人们的环保意识,在今天显得更加至关重要了.怎么改 西双版纳的橡胶树在每年的几月份收割? 关于地球起源的传说地球的传说,最好是把人类的产生也说一下, 在同一平面内,不重合的三条直线的公共点个数可能有【 】 二极管的脚是什么金属谢谢你的回答 2012的传说哪些是真,哪些是假啊,比如说地球板块重新排序组合.不是寂寞,是最近单位那帮人总没事研究,听着像真的似,今天飞机有事明天火山有事后天泥石流地震,闹庭。 空间三条不重合的直线a,b,c能确定的平面个数是?A,0,1或2 B,0,2或3 C,1,2或3 D,0,1,2,或3 请问,听说西双版纳有橡胶树承包,是不是真的能赚?听朋友说在景洪西双版纳承包橡胶树有点赚,想问下是不是真的?现在去能不能承包到?了解这行的人能不能提供些具体情况说明, 人类真的是在地球上进化而来的吗?为什么会有那么多关于人类起源的传说? 向等体积0.1mol/L NaOH溶液分别加入①稀醋酸②浓硫酸③稀硝酸 ,至恰好完全反应,求焓变大小关系?我想知道为什么? 三脚红蓝双发光二极管引脚长度不同,这些引脚分别代表什么 地球上有美人鱼吗?如果有,是什么样子的?很纯净、很漂亮吗?有她的传说吗?突然很好奇?还有关于美人鱼的传说! 日本把矿产和煤储存在海底,到底是怎样储存的?如果不是储存在海底,那要储存在哪里? 西双版纳橡胶树的越冬条件和水分条件 关于2012的传说:这个2012是不是地球上三分之二的人都会死去啊? 醋酸,稀硝酸,浓硫酸与等浓度的烧碱溶液反应至完全中和,放出的热量分别为A B C,为什么A大于B大于C?谢(纠正一下这里的ABC均为绝对值 那么A小于B小于C) I don't like coffee in the slightest.(改为同义句) 请帮忙该一个病句:这场比赛被人们誉为是“强强对话”.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘