如何应对iOS系统升级?

发表于2011-11-29 15:16   | 来源CSDN| 作者徐玲玲

我们CSDN的活动前面已经连续举办了8期,加上还有和一些合作伙伴做的会议,大概有17期。前面的话题有涉及到产品、设计,还有推广运营方面的,也有技术的。这次我们回到了开发者所关注的技术平台的本身,然后跟大家分享一些大家关注的iOS5升级的问题,还有技术路线选择的问题。

爱图腾科技高级架构师廉洁

以下为廉洁演讲实录:

大家好,先做一下自我介绍,我叫廉洁。今天的题目主要就是给大家分享一下我们在系统升级时候的一些处理方法和应对的方法。我们是专门做手机移动外包的。同时,我们会有很多款应用都是在维护期或者开发期,涉及到很多款应用的升级的工作。其实经过了一两年的过程,经历了几次升级,多多少少也总结出了升级的一些经验和处理的方法,今天主要跟大家分享这些东西。

如何应对iOS系统升级?

真正面对每次的系统升级的时候,大家应该怎样去应对?iOS的升级每次都会给各个应用造成各种各样的麻烦,或者造成原有的UI的一些变动,导致比如说用户体验变差。经过我们经常大量的实践,包括每次升级的一些经验,我们总结出了一些相对比较有条理的一些应对方法。

1.关注Apple的官方网站及开发者论坛,及时了解新系统的变化

这个上面大家可能都知道,会有各种各样的一些咨询和一些文章,包括像这个上面可以看到一些iOS5,这次升级提前很久会放出对应的一些文档、一些资料和新特性的一些说明。

当然这个是官方论坛了,其实国内的很多论坛也都是非常出色的,有很多资源在上面,包括CSDN。再之后,官网上其实有很多视频的资源,包括每次系统升级之后,大家都知道可以下载到美式的Apple的程序。可能还知道不同的新特性对大家的开发或者今后的一些应用的设计,会造成哪些影响。大家看了之后,会第一时间拿到一些感官上比较真实的一些资料。其实这些方面,包括及时关注,可能我们会看一些其他的技术的一些网站,技术的一些新门类的网站,都会得到各种各样的信息,这是关注的部分。

接下来就是在应对每次系统升级的时候,我们应该抱着什么样的一个处理的原则,或者说什么样一个理念?我总结就是要快速反映。

其实快速反映的含义,直观来讲就是要第一时间提供一个版本的更新,当然我们这里面指引所有的应用是已经在线上的一些应用,如果这个应用还没有做完就不在这个范畴内了。为什么要第一时间提供这个更新,其实他每次升级之后,多多少少会造成一些界面什么地方变错了等,能够在第一时间提供这个版本的更新是非常重要的,能给用户一个非常好的一个体验。

那么,在版本更新的过程中,其实很重要的一个原则就是我们要保证应用的稳定性,就是快是一方面,但是快的前提是应用要稳定,我们不能非常急,然后很短的时间赶完之后,第一时间上去之后,发现这个应用不太完美,这个就不太好了。

2.不要急着使用应用新特性

因为每次系统升级都会有各种各样的好的特性。作为开发人员来讲每次都是非常兴奋的时候,都非常希望把这些东西,比方说把我这个多任务,比方说把iOS5里面的东西能够应用到新的更新里面去。但是,实际上对于开发人员来讲,这是一个享受的过程,但是实际上从整个产品的一个运营商来看,不要着急去做新的特性的使用,一定要慎重,还是基于前面的两点,因为我们要在第一时间上线,还要保证系统的稳定性,第一时间能够出一个兼容的版本,这是非常重要的。那么,这是我说的快速反映的意思。 3.覆盖测试和有目地的去寻找bug

再就是最后覆盖测试。实际上这个就是一个真正怎么去做的一个过程。之前讲的什么原则,什么的想法这些,但是真正可能大家最看重的是这一块。大家都知道,不管怎么来说,测试是所有里面最有效的一个手段,能够发现问题,能够找到我们遗漏的地方。但是,可能这个测试中,有几点是需要说明一下,强调一下的。就是说,第一部分就是覆盖全部的功能。但是,这其实是一个很基本的东西。但是,这个需要大家能够有在这个运营上线之前,在测试阶段就能够自己去维护一套完整的测试,当然,也可以是我们开发人员,或者测试人员捱个功能去试,但是这不是完整的一个方式。有了完整的测试之后,我们每次就照着这个走一遍,就会很方便的发现这个问题。

另外一点,就是我们要覆盖全部的设备和全部的兼容的系统。刚开始做的时候,从3.2升级到4,当时把3.2的都做了,但是到4的时候就有问题了,其实这个就是覆盖全部的设备和兼容的问题,我们要兼容所有的版本,另外就是要兼容到所有的设备。因为从道理上来讲,不同设备之间,只要系统的版本是一样的,按理说应该没有问题,但是实际上还是会有问题。所以,需要大家真正的去测试他们。

最后一点,就是说这里面叫做有目的的去寻找bug,实际上这是一个查漏补缺的过程,还是要依赖与前两点。就是每次升级之后,Apple会发布新版本的一个东西,在上面会列出所有他认为重要的东西,可以按照这些一条一条的对比我们遗漏的项目,看看有哪些需要相应的去调整的。另外一点,就是我们可以从不同的网站上,包括网站、论坛,然后会有人去问这样的一些比如说升级过程中遇到的问题,大家会分享这些问题,也会有大量的解决方案。那么,这些需要尽量的去看一下,看的过程中,有可能有些是对我们有帮助的,有可能是我们漏掉的,这都是一个很好的主动的去找BUG的方法。

iOS5 升级经验分享

之前说的其实是一个比较通用的一个大的方面的一个概括。接下来讲一下,在本次升级中的一些经验。在这次升级中,其实作为iOS5来讲,大家都知道加了很多新特性,相应的我们都是,其实作为开发人员来讲是比较兴奋的一个过程,但是真正做产品的运营、维护是一个比较痛苦的事情。

我会从这几个方面去一一的讲这些东西。首先就是新特性,新要求。再就是比如lib包的变化,然后API的变化,最后会从iOS5的Release note的一部分。第一点其实是我们前面讲的要关注各种各样的咨询,在关注的过程中,我们就可以得到新特性,还有新要求,及时的知道这些动态。第二点,第三点,其实是能够在测试中暴露出来的问题,我在这里面,也是从公司内部,各个产品里面收集了一下,列在这里面。

1.关于新特性和新要求(ARC来了,存储方案)

iOS5这次所有的一个新特性,所有大的特性,看的是非常多,主要还是讲一下,跟我们真正升级、开发过程中关联比较大的部分。

首先,看一下第一个就是Icloud storage,其实就是说Apple提供了一个这样的服务,所有的设备上的一些文件都能够通过Apple提供的这种机制上传。但是,这个东西的开发对我们有什么样的影响?这是icloud storage上线之后,Apple出了一个Guidelines,因为本地存储的东西没有一个强制的要求。那么,从这个新的出的这个里面,会有一些比较强制性的要求。

第一就是说什么样的数据可以放到这之下的,这是Guidelines里面的一部分,首先这个数据说用户生成的数据,或者是不可以被重新生成的。那么,所有,他为什么要做这样的一个限制,就是说,我们所有目录下的东西,按照这个文档的说法,他是自动的会被备份Icloud storage到这个上面,就要求我们尽量的为用户节省这样的一个空间。并且要节省这样的一个网络这样一个流量。这个是他提出这个要求的一个初衷地

除了这个剩下的部分其实主要就是说除了第一部分,剩下的都要放到Cath(音译)里面,但是Apple也强调了一些,就是专门把最后的新闻类的、杂志类的东西,因为我们一般会去想新闻类的东西,比方说我的本地缓存,我下载的杂志,所有的文章和下载的图片都是非常重要的数据。但是,这些数据是不能够放在文件目录下的,因为这些不是用户创建出来的,第二他可以被重新下载的。因为这个可能大家还需要看一下第三方的一些库,爷爷可能需要去做一些对应的更新,比如我们有些项目会用到国外的统计软件,他实际上之前会在文档下,这个时候,如果大家不注意,没有更新他的类库,肯定会被打回来。

下一个就是Automatic,因为其实来讲,做iOS有一个被开发人员很痛恨的一个东西,就是他的一个门槛。每次所有新接触到的iOS开发的人,首先最头疼的就是他的管理。对于刚出门的人来讲,可能在Apple的规范里面,其实讲解的是非常清楚的,什么时候应该去做返回,但是,你真正操作的时候,总是担心这个地方会不会少Return,尤其是初学者会很迷惑这个东西,或者有些时候多Release了。但是,后来发现,Apple里面提供了一款公司就是Buid,这个之后,Apple会把所有的他发现的你这个Release错误的东西标出来,包括一些该Release的没有Release。但是,接下来的结果就是说,Apple既然能分析出这些东西,敢干不给我们都做了,其实Apple是这么去做的。

他就提出了一个ARC,他是编译期间的一个工作,并不像java是垃圾回收的机制,他是攒到一定的程度再去释放,这个释放必然导致一些垃圾回收的不及时,或者释放的时候会对性能造成一些影响。ARC是把我们之前自己做的一些回收,在编译期间把代码分析好,把编译的东西加进去。实际上编译出来的东西和我们之前做手动编译的时候东西是一样的,没有什么区别。

那么,这个东西最大的好处其实是降低了开发入门的门槛,大家以后开发的时候也会省很多心。但是,他实际上还是有一些局限,他首先就是4.0,但是这不是最大的问题,最大的问题就是我们要谨慎的用ARC,尤其是在iOS 4上面,他无法使用Weak,需要用Assign代替。但是,这个其实就是有一些局限了,因为我们在系统升级的过程中,我们不会用太大的精力做这个事情。原因就是这样,你首先分析这个ARC,他有没有对我们现有的应用有帮助?对我们线上的应用有哪些帮助?

首先来看,据Apple的宣传来讲,ARC在Release、Return管理的效率上,要比原有的有很大性能的提升。我相信对于我们线上的应用,大部分的内存是没有问题的,内存管理上应该是比较完善的。其实这样来看,要不要用这个ARC?用是开发人员享受一下新的特性,但是不用是不会对我们有什么影响的。

用的话,涉及到几个问题,因为我之前也是对我们手头的一些应用做了一下实验。Apple提供了一个转换工具,很方便。会先分析你现有的代码,他会提示你,什么地方要改掉。比方说,你自己写了一个方法,他会提醒你,一定要删掉,或者你什么地方用了一个从C里面过来的对象,他会提醒你要额外的做一些声明,他对从C或者C++过来的东西识别上有一些困难,他对这些的应用有一些特殊的声明。

但是,这个整合的过程中发现了几点比较头疼的地方。一个是我们是想做一个ARC,但是我们可能应用里面用了很多第三方的类库,这些第三方的类库如果我们转成ARC,要不要把他们也转了。或者大家如果有信心可以去转,是没有问题,但是如果我们自己对自己信心不是很强,担心把这个东西搞坏了,大家就很忐忑,这个其实是有办法解决的。ARC其实可以按照每个文件的形式给他关掉,具体的方法就是我们可以看到在Build htases里面,里面会列出所有的需要殡仪的文件。我们可以多选几个文件之后,按一下回车,加入这个,其实是禁止这些文件上进行ARC。这个是我对第三方类库如何处理ARC很好的一个帮助,我们如果不想去处理他,只需要管我自己想用的有行了。

但是,做完整个应用,可能大家费了很大劲,把整个应用转完了,最后可能大家心里都没底,会不会造成什么问题,还需要详细、全面的测试。但是,这个东西真正都做完之后,我们这个也应用是用ARC的,但是有什么用?对于我们现在线上的应用有什么帮助吗?所以,这个其实好多时候升级要去权衡一下,并不是说技术就好了,更多的要考虑真正有没有对这个产品有帮助地

给大家的建议就是ARC这个东西挺有意思,尤其是对新员工谨慎使用,对于新应用可以去用,但是对于已有的维护期的线上的应用尽量不要去用,没有必要。这是ARC。

其实剩下这些,多多少少跟开发都有一些关系。但是,今天毕竟不是讲新应用,我只是大概简单的每个都介绍一下。第三个是newsstand,在座的不知道有没有做新闻类应用,或者杂志类应用的。我们这套做了不少新闻类的应用,现在有一些客户就要求需要把这个加newsstand到里面,newsstand其实这个东西,只是给新闻类的应用提供了一个聚集的场所,包括我们可以把以后所有的这种比如说用户拿起iPhone、iPad,只需要在newsstand上面看所有的新闻性的应用,杂志类的应用。他有哪些好处?一个是可以提供个性化的封面,他可以你杂志的应用内部可以定职每天,或者每期不同的一个封面,这个封面是大小是可以自己设定的,Apple提供了几种标准,包括可以做成杂志的样式,或者新闻的样式,都是很方便。

另外,我们杂志类的应用经常要求大量的数据的下载,这个下载如果说在用户打开应用的时候去下载,这个就有些时候很难去忍耐下载的时候,newsstand提供了在后台下载的机制。他可以,比分说我们在提供一个服务的时候,我们有新的一期杂志,可以推送到每台设备上,设备会启动下载,下载完以后,可以直接看就是了,这个实际上是很好的东西。

另外,第四个Storyboards对开发者来讲很有吸引力。我们对整个流程的控制,对于哪个界面跳到那个界面,他就提供了一种方法。整体的我可以画出这样一个流程图,流程图里面,可以定职分别几个,比方说什么样的事件去触发这个跳转,这个跳转中间用什么样的动画效果,都是可以去做的。就是对于我们已有的线上的应用,不要轻易去用。

接下来就是跟我们实际的开发关系不是特别大的。第一个就是Coreimage,我相信大家很多人都想试一下,就是Apple提供了大量的图象处理的API,之前都要自己去写,或者我们找第三方的库处理图片,这个很费劲,真正做起来,门槛有点高,好多图象的算法学识很难,但是,他提供了Apple标准大量的比如说图象处理,识别这样的一些东西。

下面其实可能跟我们真正的应用的开发关系不是特别大。比如说这个notification,然后像Location simulation,比方大家测试一个应用的时候,比如报路矿的应用,这个要根据当前的位置报,但是我测试的时候怎么办?不可能跑大路上去做。那么,这个就提供了很好的一个东西,但是他其实不是特别的灵活,但是能够一定程度上提供这种模拟。

然后,这个Instumnets,提供了大量性能分析的工具,比以前更多一些,比如他现在加入电量的分析,你哪些应用,或者什么会造成你这个应用特别的费电,或者是手机热了,他可以提供一个分析。最后一个是Opengles,他提供了一个更加束缚的这样一个环境去做这个开发,包括他的测试,debug都提供了一个更好的环境。

2.lib 包支持的变化

第二个部分,新特性和新要求。实际上是我相信大家如果做iOS5升级的时候,最早遇到的问题就是连编译都编译不过去,因为这个是我们唯一发现的iOS5里面,lib包这个东西。因为这个东西他是跟压缩、解压有关的东西,ASI会提供这个支持,他用的这个东西。在新的iOS5里面,他不再提供1.2.3的支持,主要是提供了1.2.5,但是这个1.2.5在iOS4里面是没有的,这个是一个特例,一般不会有这个包方面的一个变化。

3.API变化

剩下就是我们这是一个重点地方,我们所有的代码的应用里面遇到的问题。第一个讲一下,也是比较明显的一个问题,如果大家用了相关的东西,在iOS 5里面,第一是测试就会发现这个问题,很明显。他是uinavigationbar一个背景,之前我们的一个方式就是才用Category这个方式,我们可以在这个里面加上背景的一些自定义的一些操作,这在iOS 4里面都是非常流行的方法,当然还有其他的一些方面改变他的背景。比如我们带这个项目上做一个超大的浏览,也是一样的效果。

然后在iOS 5里面,后面会解释一下跟这个有关的,但是现在iOS 5里面不在调用这个方法了,这个候Category为就不再用了。uinavigationbar他实际上提供了一个更好的修改背景的方法。

为了去兼容这两个,我们可以做这样一个处理,第一,还是要保留这个Category,为的是iOS 4里面的东西,就是首先保留Category,对于iOS里面都是没有问题的,如果在iOS 5里面有,我们可以去提供系统修改的背景的方法,这样可以做到iOS4和iOS 5的兼容。我们这边尝试出来的一个结果就是图片一定要是标准的大小。

这是第二个可能比较重要的一个变化。我们在uinavigationbar里面的一个属性,我这里面把系统的API上的说明放在上面,给大家一时一下。第一句话,就是在iOS 5之前,我们很多的包括我自己用的,或者第三方的类库里面都会经常用到这个实行。在iOS 5里面,Apple可能是想明确一下他的用处,这个地方不再提供这样一个值了。在iOS 5里面,他换了另外一个属性,叫presentingview Controller但是,这两个属性只在iOS 5里面有。

我解释一下,首先要判断他里面有没有presentingviewController这个,就是我当前使用这个的地方。我要使用的方法就是我第一先presentingviewController看一下这个到底有没有,如果有说明我在iOS5一下的版本直接用就可以了。如果没有的话,那就说明我们在iOS5里面,或者iOS5以上的版本,首先还是要去为了保险起见,我有没有presentingviewController。不知道大家有没有用过sharekit,他提供了一个类库,这个东西在这里面会有大量的应用。我们之前的几个产品里面都遇到了这样的问题。所以,这里面专门拿出来说一下。其实这个也说明另外一个问题,我们好多应用到第三方类库是每次升级要重点关注的地方,不是我们自己写的,大家通常比较相信第三方类库,但是他们也会出问题的。

这个是Uiviewcontrolle的viewwillappear方法,他实际上使用了这样一个东西,就是我在用一个view直接加到上面,这个我不知道大家有没有尝试过这样去用,这个是iPad的应用,好多iPad的里面可能会用这种的方式去叠加。但是,这个有一个问题,这个里面写的是Subcontroller,这也是我们之前的一个说法。但是,在iOS5里面,他调整了一下这几个viwecortroller的各种结构。这个其实就造成了我们当时的那些情况,当时主要的感官就是他变慢了。然后之后发现了这样的问题,也是希望给大家分享一下这个经验。

还有一个就是比较头疼的玩意儿了。在iOS5之前其实键盘都是固定的高度,包括iPhone,比如说中文输入法的提醒会现实在输入框的上面,但是iOS5里面做了一些改进,直接输入法的提示直接会加到键盘的正上房。我们之前的很多应用,比如我们做了一款微博类的应用,他会把他发新评论的时候模仿短信的界面,会直接把输入框盖住。其实Apple还提供了几个事件,下面就是几个事件。

第一个就是我们可以去注册以下的几个事件,就是说我们通过去注册这样一些事件,在他的Userinfo里面会直接看到,包括取一个Frame或者什么东西,取到的东西是一个velue的一个值,他不是一个值,他会分装成ISVELUE。基本上通过这几个,就能够处理现有的这些键盘上的一些变化。

还有一个就是很大的一个改革,UDID在iOS5中已标志位Deprecated,意思就是建议不要用了,以后可能会被取消掉。算是一个比较大的变化,但是文档里面其实也提供了一些替代的方法,比如我们可以自己创建自己的UDID。那么,创建这个UDID之后,可以存到这个NEUSERDEFAULT里面。我不知道大家理解不理解UDID是什么样一个东西,他实际上是永远不会重复的这样的一串数,大家不用担心,我身上的UDID会不会跟其他的人或者产品有冲突,实际上不会的,他实际上绝对是一个唯一的。用这个方法,生成UDID之后,相当于我们这个做了一个唯一的标示。如果你重新生成一个UDID,绝对跟原来不一样,这个是一个弊端。主要还是看一下大家在这个,比如一般我要做统计分析,这样的一些地方会用到UDID。但是,我们这样做虽然不是一个唯一的UDID,但是基本上不影响大家统计分析使用的。

4.iOS 5 Release Note节选

下面给大家快速的看一下ReleaseNote里面的一个节选。在ReleaseNote里面写的很清楚,我们之前如果想隐藏一个header就行了,现在不行了,现在直接返回没有用。第二个,其实我们的一些应用也遇到这个问题了,但是如果我不查这个还是不太可能发现。他就是说UIPICKERVIEW,就是我们在第一次选择的时候,可能会调用一些程序里面主动设计他选择的一个方法。但是,这个选择的时候,我们之前在iOS 5之前,会触发,但是现在不会触发,需要大家做一些针对性的处理。

这个地方还是讲的是papovercontroller,这个里面,我们iOS 5之前会默认的把里面这个会设置,就是即使你自己没有设置,他也会自动的虽然长宽变化。但是,在iOS 5里面大家需要主动的设计里面的这个东西。

其实这个跟我们第一个讲的那个有关系,当时就是说我们之前Apple可能也是建议这样一个方法,用这个Catgat改变这个方法,但是现在Apple明确的说,不会在这个周期里面去调用。这些基本上是全部的内容了。


原文转自:http://www.csdn.net/article/2011-11-29/308275


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值