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

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


轻博客始祖Tumblr:哈希以支撑2.3万Blog请求/秒 《近匠》FIR.im:简单易用的内测分发工具 传苹果公司将于9月9日召开新一代iPhone发布会 近百家微信开发商参与征集评选活动 TOP10正浮出水面 Java程序猿,手游引擎怎么选? MDCC 2014优秀移动团队免费展位火热申请中 【微信讲师面对面】你在企业服务号开发中遇到的坑和难点 五个解决方案让MongoDB拥有RDBMS的鲁棒性事务 浅谈Apache Spark的6个发光点 安卓 “假ID” 签名漏洞,竟然骗过了支付宝和360 从Social到Big Data,移动App蚂蜂窝转型推新品 《近匠》nice曹大鹏,从男装导购到潮人社区的心路历程 DevOps扼杀的不是开发者,而是开发生产力! 利用Docker构建开发环境 Netflix公布Cassandra新性能:基于AWS的百万次写入每秒 一周消息树:谷歌Android遭遇“颠覆”危机 微软发布新应用Snipp3t,iOS平台首发且无Windows Phone版 TOP10优秀微信开发商随后揭晓 2014微信开发者大会开幕在即 8月12日:PC鼻祖IBM 5150迎来33周年 平板创作3D展现:蒙特利尔大学发明Hyve-3D设计系统 Quick Charge技术解析:关于手机快速充电的那些事儿 性能分析十八招,你用哪一招? 流程在企业内的作用及成熟度 Gartner:至2017年Chromebook销量将增2倍 后稀缺时代思考:机器横行下的人类夹缝求生 TIOBE 2014年8月编程语言排行榜:Swift跌出Top 20 精华回顾!历届MDCC大会精彩演讲与议程汇总 《近匠》Fancy3D:亿级游戏背后的轻量级引擎 假如李小龙是程序员…… Docker已扎根新一代PaaS 三星或发布首款头戴式VR设备Project Moonlight 数据库更新不成功的问题!(菜鸟高分提问!) 求助:多线程访问数据库的问题 触发器?很简单的 紧急求助???狂加分!!! 不相上班,怎么办呀?各位有何高招? 学习ATL的建议!!! 请问: 多个javabean怎么相互调用?如。。。。 二个简单Access问题 qq号码集合之增强版 这样的查询该怎样实现呢? 求:谁有立方体旋转的程序?需要源代码!谢谢,万分焦急!!!谢谢,100分送!!! 怎样实现这样的界面? 关于多线程中操作数据库 给一个c#连接sybase数据库的例子,谢谢! c#datagrid 增加,删除,修改 工作急需,help!!!!!!!!!!!!! 请哪位高手帮小弟做一个井字棋游戏作业,救小弟一命,感激投地并送以高分,我的信箱见内! Exchange2000的怪问题,请高手指教。 三层中的问题? datawindow加计算域或line的程序加在哪? 请问各位收邮件的程序采用的是什么组件??!!因为CFPOP,JMAIL在收中文附件时都会出现乱码。参与有分。 求助EXCEL解密 !!大送分99分! 请教JAVA中读一个文件的时候 怎么锁住它 不让别的程序来写 在ASP页面中怎样获得域用户的信息? 求助: 移值C++出问题 谁能解救我于水火???怎样解决循环运算次数太大造成程序死机的问题? 谁有delphi或bcb的简单的画图程序的源码 二个简单Access问题 Access不支持位运算吗? qq号码集合之增强版 递归函数的工作原理! 二个简单Access问题 如何在声音控制中将“全部静音(M)”选中,实现系统静音?在线等候! 韩国变性艺人河莉秀以“性感之枪”姿态攻陷香港 如何用javascript在客户端清空<input type=file>的value值?50分! qq号码集合之增强版 二个简单Access问题 谁有《Inside the c++ object model》中文名《深度探索c++物件模型》的电子版。 谁有《Inside the c++ object model》中文名《深度探索c++物件模型》的电子版。 谁知道 bzero memcmp 等函数的原代码在哪个目录下 哪个文件里 我实在找不到了 请高手指点 或提供线索 Date Time Picker如何不弹出 这里是做梦的场所 二个简单Access问题 servlet的问题 我想为对话框的按钮提供快捷键 不使用mfc的加速功能 请问怎么实现 一个关于多窗口的问题 请问各位懂行的,一个50分钟的flash要多少钱?就是动画故事,象电视上的那种。 网上找到的sa-fileup好像都是evaluation版,有时间限制,不知道哪里找到破解限制版? 在程序中怎么创建acess数据库,sqlserver数据库,oracle数据库? 还是关于.Net的安装问题,请问如果要在win98上运行.Net程序,需要装dotNetFrmaework,... dbgrid中如何实现自动计算?? 物流GPS在物流业发展有什么作用? 机械能守恒是什么意思? 性别比例中雄多于雌的生物种类有哪些 手机的gps定位要用网络吗? 孟买什么气候 XY型性别决定的生物,群体中的性别比例为1:1,原因是什麼? 哪些生物适应环境和影响环境,要实例 为什么王水的配置是浓硝酸和浓盐酸按1:3体积? 小明和妈妈去操场散步,小明一圈需要5分钟,妈妈以前需要3分钟.如果小明和妈妈从同一地点,同时相背而行,几分钟后两人第3次相遇? 生物对环境的适应和影响事例,我明天上生物. 配置王水为什么用浓盐酸 xy型性别决定的生物,群体中性别比例都是1∶1,请问原因是什么!为什么!麻烦朋友们帮我一下A 雌配子:雄配子=1:1B 含X的精子:含Y的精子=1:1C 含X的配子:含Y的配子=1:1D 含X的卵细胞:含Y的卵细胞=1:1 中国近现代史纲要(论文)1,中国近代历次反侵略斗争失败的原因和教训.2.结合近代中国人探索国家出路的历程,说明为什么中国选择了马克思主义.3.以毛泽东为主要代表的中国共产党人探索和 什么是科普小品文? 面对困难坚强不屈的名人 体现生命的勇敢 不要海伦凯勒,张海迪,霍金,桑兰这些被写烂了的人 科普小品文的语言特点是什么? 女人梦见下雨,雨水淹没自己.女人梦见下雨,雨水淹没路面.自己不知不觉走入水中越走越深,淹没水中,拼命挣扎,后看到一男人骑车身边经过(为什么只有我陷进去了啊),还求救不帮,后被一女 梦见海水上涨梦见海水水位快速上涨就连最高的地方都满过了,让我没有立足之地 怎么写“给中国近代名人的一封信”作文啊!有知道的人快帮帮我吧,明天要上交啊 女人梦见下雨好不好 梦见我们家在海过两件房子里有海水 请区分一下3S技术 即GIS,RS,GPS重点介绍一下应用方面的要求 限制条件 和特点 另外 最好分析一下三项技术分别在灾害预测方面的特点 昨天晚上做梦梦见下雨很多雨水,但是没看见下雨,淹没过胸部,我和我一个姐妹就从水里边走了过去,在水里走的时候感觉呼吸都困难,过去之后有个楼房 我们就上去了,一会出来看,雨水几乎没 如何验证AgCl溶解度大于Ag2S GIS,RS)? 利用超声波可测海洋的深度,已知超声波在海水中传播的速度为1.5×10的3次方m|s,若发利用超声波可测海洋的深度,已知超声波在海水中传播的速度为1.5×10的3次方m|s,若发出信号10s后接收到反射 举出生物对环境适应的例子?举出一个... 3S的关系和特点(RS GIS GPS) 女人梦见蛇和下雨如何? Ag2S与AgCl 哪一个的溶解度更低 3s 技术中RS,GIS,GPS,各自的定位及作用,特别是相互间的关系 梦见下雨是什么意思 举一个生物对环境适应的例子要自己的,不要官方答案 地理上的3S是指GIS,RS, 描写马的好句子 已知Ag2S的溶度积为6*10-30,此时它在水中的溶解度约但是为什么开根号什么的算出来的就是溶解度? 物质结晶法主要有两种,分别是什么?海水晒盐是哪一种? 谁能给我一些关于气候类型判断的典型例题?就是关于我国的气候类型判断,浙教版的而是给我这一类的例题! 举数个生物适应环境的例子如题~起码举出5个例子.举数个生物能适应环境的例子,再举数个生物不能适应环境的例子.例子具体点,不要只说名称. 除了海水能提盐还有什么方法 形容马的样子的句子真不知 父亲一个字怎么叫 英语翻译水边役人双双去.儿戴宝冠头已剃/金莲难走唯行寸,尔等伊人来相聚.莲花去头文满车,公公累得断右臂.一十八竹连一片,芍药落花白了地. 名人和凡人一样,都会遭遇成长的烦恼.(如安徒生,居里夫人,贝多芬,海伦凯特,张海迪等)名人和凡人一样,都会遭遇成长的烦恼.在失落绝望的时候,他们是如何重新找回生活的勇气,更坚强的面 用一个字来代替爸爸? 哪些名人是残疾啊,作文 求素材 要出名的 霍金和张海迪就不用了 求出一个字谜!出一个字谜,像田中(申)挥手离去(军)这样的字谜急. 父亲、母亲都可以用其中的一个字来表达,那钥匙呢?如果没有,用什么其他的一个字来代替呢?具体情况是这样的:我闲的没事干写小说,设计的男主人公和女主人公各持一把钥匙(男)和一把 英语翻译请翻译英语谜语1.John is the man with the blue blood2.Who's the boy in the hat?He's my son,Tom.3.He likes talking horse.4.He is always Number one in our class.5.Speak like a book.6.It rains cats and dogs.7.Hi,long time no see.8.She 请把:鲁迅、张海迪、海伦凯勒、霍金、 阿尔弗雷德·贝恩哈德·诺贝尔 、司马迁 、居里夫人 、高尔基 、爱迪生 、贝多芬 、 把以上10位名人在痛苦中的遭遇和后来的成功事迹写下 老子道的总论中的一个字怎么念?常有欲,以观其X.就是这个X怎么念?这个字实在不会打 有没有写残疾人的事例与评价 例如张海迪,海伦凯勒等简介 机械能的作用是什么 《台阶》一课 各用一个字来概述父亲劳动的特点 1.那石板多年前由父亲从山上背下来,每块大约有三百来斤重2.一个冬天下来,破草堆堆得超过了台阶( )3.那天早上父亲天没亮就起了床,我听 英语翻译班杰明•富兰克林有个谜语:(答案是钱)The more a man has,the more he wants.Instead of filling a vacuum,it makes one.翻译成中文怎么说? 机械能是什么意思?内能是什么意思请解释一下 在北印度洋夏季洋流圈中,也就是阿拉伯半岛沿岸发现有个索马里寒流,他从赤道处向北流,怎么会是寒流? 英语翻译姐妹一样长,结伴爱成双,酸甜和苦辣,两人都同尝.筷子我有两口井,模样很难分,双腿探下去,正好齐腰深.裤子远看山有色,近听水无声,春去花还在,人来鸟不惊.画兄弟一般高,出门就 机械能的总量是什么 索马里洋流成因
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘