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

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


PPT集萃(一):10位业内高管分享云计算技术理念与行业趋势 得益于苹果谷歌,未来可穿戴技术市场规模可达500亿美元 雅虎11亿美元押注Tumblr三大因素:用户、社交、内容 Perceptual:英特尔感知计算挑战赛 正式启动 吴义坚:创业去!我用深度神经网络,处理语音识别 浅谈用户体验的“反面模式 可穿戴设备又一站:增强现实眼镜CastAR 数字医疗投资将破纪录 投资人看好这些细分领域 Mayer又下一城:雅虎收购Tumblr推进移动化? 前端开发利器:代码预处理工具Prepros 一个轻量级的JavaScript库:Reactor.js [探讨] 用户体验设计师现在面临怎样的机遇和挑战? PPT集萃(二):淘宝、CloudStack等分享的架构经验与最佳实践 2013中国云计算榜单之二:64家云主机+云存储,错综复杂! 看Java技术基础的eBay如何评价他们的Node.js首次尝鲜 Jolla发布首款Sailfish系统手机 无缝兼容Android应用 NPD:全球智能手机出货量2013年将首次超过功能手机 聚合数据左磊:不走寻常路 做国内最好的数据聚合平台 从程序员到软件商 需要注意些什么? 共享软件海外营销策略与实战(上海站) 直接拿来用!最火的Android开源项目(完结篇) 一步加入云生态系统 参加第五届中国云计算大会的十大理由 传苹果iOS7将深度整合Flickr 用户受益最大 Chrome 27来了:页面加载快5% 可同步数据到Google Drive 微软发布新一代游戏主机Xbox One 搭配全新Kinect 2.0体感系统 Unity游戏引擎向iOS与Android开发者免费 Twitter获“下拉刷新”专利 开发者仍可自由使用 复杂产品的响应式设计【流程篇】 使用Javassist库为Bytecode Instrumentation开发JVM Agent 内容解析创业公司Stremor推出4款API 2013中国云计算榜单之三:174家云应用服务商,繁花似锦! 奇怪问题! 为什么long l=123456789;float f=l;可以编译通过啊? VC/C++高手相助,如何给一个自己编写的服务发消息,并且在服务中如何接收该消息? 怎样去掉另一应用程序窗口上的标题框?? 请问void CEx04aView::OnDraw(CDC* pDC) 中CDC是什么? 谢谢 一个关于COOL360的问题?请回答 英文译中文,.怎么办? 如何制作帮助文件? 如何在DbGrid中锁定前面几列记录??? 一个关于ENCTYPE="MULTIPART/FORM-DATA"的问题 共享文件夹的安全问题如何解决?? 怎么在窗体上放一个动画flash的,用什么组件可以这么做!!! ISO/C++标准要的请举手!! SQL里的DMO在VB里怎么使用 英文译中文,.怎么办?? 一个小问题 void CEx04aView::OnDraw(CDC* pDC)的CDC是什么?谢谢!! mcisendstring 与mciexecute 调用外部命令问题! 有偿求解:简体PDF在繁体WINDOWS环境下如何阅读 有谁在VB中使用过关于INTERNET CACHE的函数? 端口问题!~请问有什么办法知道一个程序所用的通讯端口号码!?~ 黑木黑木,我也给大家看看吧,不傻不要钱~~~(附照片) 如何将一画中的某一部分画到一个Image中 风之子,发呆呆,请进! 太可怕了, 愿人类永不受此难。 ado--vb数据库查找时怎样显示?? 我现在碰到了一个很奇怪的问题,高手能够解决吗? 哪有将打印输出为传真和email的源代码 急急急,谁来帮忙,兄弟有难 关于COOL360的问题? 一存储过程的问题 这些错误代码是什么意思? 请问如何在vb中截获消息 请问:在Windows98和Windows2000下支持的Winsock客户端套接字连接的最大个数分别是多少? 黑客软件 还是COM接口问题 大虾,帮个忙,一个小问题先谢谢!! 关于多次搜索的一个问题,大家都来看看啦!!!!!! 绘图仪的驱动程序 跳转至某一页应该怎么做? 强烈要求CSDN恢复‘帖子提前连接’功能,请帮忙UP! C++builder 中怎么判断某一个字符在不在字符串中? 求教:为什么我的控件下载特别慢?(在网页中用的控件,客户端浏览时下载) 明年毕业,想搞软件开发,现在很矛盾,是去大公司,还是去那种中小型的软件公司呢???? 求教有开发经验的高手关于XML和数据库的简单问题 查找窗口疑问 delphi的createoleobject 一个很急的问题??? 我怎么覆盖派生类中的virtual成员函数?(up加分,详情请入内) 寻找用过JMAIL的同志! 想问一下,在收邮件时,如何取得发件人的MAIL呢? 请问像大虾们说的comp.lang.c++.moderated这样的讨论组怎么访问?(Solstice) 不能构成蛋白质的氨基酸有营养价值吗?自然界有近300种氨基酸,其中只有20种(一说22种)能构成蛋白质如果我们摄入其他不能构成蛋白质的氨基酸,那么它能被人体利用吗? 我国江西有一个著名的“瓷都”,是什么地方 蛋白质的变性,凝固,沉淀之间的相同点和不同点 在营养学中,牛奶中的蛋白质怎样算 江西的瓷都在哪里呢? 蛋白质变性的事实举例 100g 100度的钨放进200g 20度的水中,21.6度达到热平衡,求钨的比热容,我算到171.43J /(kg·℃) 被称为瓷都的是我国哪一城市? 举例说明蛋白质变构与变性在本质上的区别. 怎么用最简单的方法将冰变成水 为了测定煤油的比热容,把质量为200g的铁块放在开水里煮相当长的时间后取出,立即投入20摄氏度 如何从苦杏仁中提取氢氰酸?普通方法,我不可能去买CO2过滤 蛋白质遇高温会变性.那为什么在用牛奶炖木瓜的时候,牛奶还要煮沸呢? 实验室氨水怎么制 怎么从苦杏仁中取氰化氢?它的液体叫作氢化酸? 把200g铁加热到100℃,然后投入到温度为10℃、78g的水中,不计热量损失,求混合后的共同温度. 急需实验室氨水制法!谁有? 那位能告诉我下如何从苦杏仁提炼出氢氰酸 液体固体都行 不是拿来害人的 请放心吧 把200g铁加热到100,然后投入到温度10℃的78g水中,不及热量散失,求混合后的共同温度.(铁的比热容是0.46×10的三次方J/(kg.℃) 把质量和温度都相同的铁球、铝球和铜球同时投入沸腾的水中,一段时间后一段时间后,三秋温度变化_______(选填“相同”或“不相同”) 其中吸收热量最多的是_____球,吸收热量最少的是________ 一克杏仁有多少毫克氢氰酸 100℃的200g铁落入78g10℃的水中共同温度为多少.不及热量散失, 把质量和温度都相同的铁球、铝球和铜球同时投入沸腾的水中,一段时间后,三球的温度变化_______.其中吸收热量最多的是______球,吸收热量最少的是_______球.(C铝大于C铁大于C铜) 景德镇素有“瓷都”之称始于哪朝?是元朝还是明朝? 200g的冰水混合物从0度升到10度吸收的热量 把质量和温度都相同的铁球和铜球同时投入沸腾的水中,一段时间后,两球的温度变化_____(选填“相同”或“不同”).其中吸收热量多的是_____.第二个空给我个理由 请教一下关于氢氰酸和亚砷酸的制取我自己到乡下朋友家里拿了一些猪草,在我家里用高压锅盖着煮,最后滤液是浅绿色有苦杏仁味的液体,请问这里面含有猪草生成的氢氰酸吗?还有就是我在家 密度为0.91每立方厘米的氨水中 质量分数为0.25 用同体积的水稀释后 所得溶液的质量分数为多少1等于0.125 2大于0.125 3小于0.125 假如该厂生产氨水的物质的量浓度为20mol/L,实验室若需用80mL浓度为5mol/L的氨水时,需取20mol/L的氨水需取20mol/L的氨水多少mL?(用100mL的容量瓶).2.假如该氨水的pH=a,加入相同体积的盐酸时,溶 用氰化钠和硫酸制取氰化氢气体可以用锥形瓶和分液漏斗吗? 密度为0.91 g•cm-3的氨水,质量分数为25%,若将此氨水密度为0.91 g·cm-3的氨水,质量分数为25%,若将此氨水用等体积的水稀释后,所得溶液的质量分数为 (  )A.大于12.5% B.小于12.5% 某氨基酸溶液中,有四种氨基酸A、B、C、D,其等电点分别为10、4、7、5,如不考虑次要因素,1)采用阳离子交换柱并用盐浓度或pH梯度进行洗脱,将按何种顺序被洗脱?2)采用阴离子交换柱并用盐浓 在实验中制取氰化氢气体,怎样防止中毒而又能收集到较纯气体 含氨25%的氨水密度为0.91克/立方厘米,含氨5%的氨水密度为0.98克/厘米.将这两种氨水等体积混合后含氨25%的氨水密度为0.91克/立方厘米,含氨5%的氨水密度为0.98/立方厘米.将这两种氨水等体积混合 关于医学考研生物化学中“蛋白质变性”与“DNA变性”的两道题目~1'蛋白质分子变性后,粘度增加,解释是变性后成线性分子,线性分子粘度高. 2'DNA分子变性后,粘度降低,贺银成的解释是DNA 蛋白质与重金属离子结合会变性 但是为什么金单质也会使蛋白质变质呢?(例如吞金也会致死) 用一体积水吸收560体积氨气(SPT)所得氨水密度为0.89克每毫升,求氨水物质的量浓度和溶质的质量分数 1.下列氨基酸中哪一种不具有旋光性?A.Leu B.Ala C.Gly D.Ser E.Val2.下列哪些因素妨碍蛋白质形成α-螺旋结构?A.脯氨酸的存在 B.氨基酸残基的大的支链C.碱性氨基酸的相邻存在 D.酸性 蛋白质的热变性与非热变性有什么区别? 鸡蛋煮熟后,蛋白质变性失活,是由于高温破坏了蛋白质的什么 银跟铜哪个能够使蛋白质沉淀更多,为什么?铜是硫酸铜5%浓度,银是硝酸银还是氯化银3%浓度.我需要的是为什么, 中国有三大瓷都,都哪三大呢? 鸡蛋煎熟后,蛋白质发生变性,这是由于高温破坏了蛋白质中的什么? 如何把市售氨水配制成浓度为2%的呢?实验室银氨溶液配制,需要2%的浓度的氨水,市售氨水谢谢. 现代,被评为中国瓷都的有——,——,——. .已知25%氨水的密度为0.91g•cm-3,5%氨水的密度为0.98g•cm-3,若将上A.等于15% B.大于15% C.小于15% D.无法估算 一个质量为100g的物体吸收840J的热量后,温度升高了10℃,求这个物体的比热容 氢氰酸尾气处理氢氧化钠、碳酸钠能吸收之吗?甲醛呢,还有什么常见物质可以用于吸收~ 质量分数为25%的氨水密度是0.92g/cm^3,质量分数为5%的氨水密度是0.98g/cm^3,将两种氨水等体积混合,则混合后所得氨水的质量分数( )A.=15% B.>15% C. 6mol/l氨水的配制 如何辨别一块金牌的真假?用物理知识《密度》、谢谢! 鸡蛋煮熟后 高温破坏了蛋白质的什么 氯化铵与氨水缓冲溶液的配制想知道怎样计算得出氯化铵所称质量和氨水要加体积 我想要具体的计算方法 蛋白质加热后为什么会凝固?获得热量,分子结构应该变大呀. 铁块质量为100g,放在沸水中加热相当长时间后取出,立即投入质量为200g,20℃的水中.若铁块放出的热量全部被水吸收.求:1.水的末温是多少.2.水吸收的热量是多少3.若再加入200g,20℃的水,热平衡 苯酚使蛋白质变性的机理是什么?为什么酚类最强的变性剂是苯酚? 蛋白质的沉淀与凝固的实验现象 将质量为100g的热铁块放入200g冷水中冷却,热平衡后,铁块温度降低了80℃,已知铁的比热容为0.46x10*31)此过程中铁块放出多少热量2)若不计热传递中的热量损失,则水的温度升高了 蛋白质变性的机制是什么?简洁点,一句话概括是什么. 蛋白质凝固是什么变化
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn