IOS测试人员如何把bug反馈给编程人员?

iOS开发过程中使用Core Data应避免的十个错误 - 博客 - 伯乐在线
& iOS开发过程中使用Core Data应避免的十个错误
| 分类: ,
| 标签: ,
Core Data是苹果针对Mac和iOS平台开发的一个框架,主要用来储存数据。对很多开发者来说,Core Data比较容易入手,但很难精通,如果没有正确的学习方法,你将很难真正理解它,更不用说精通了。很多开发者常常在这方面犯一些错误,而这篇文章列出了开发者在iOS开发过程中使用Core Data常见的一些错误,并对如何避免这些错误进行了分析。
1.不了解关键术语
对于iOS开发者来说,会使用Core Data是一项必备技能。 没有它,很多app都不会存在。当在互联网上四处搜索Core Data学习教程,你很容易被各种各样的术语吓倒。事实上大部分学习教程都首先假定你已经知道了这些术语,而如果你不了解这些术语,那将会陷入困惑中。所以首先要知道关键的术语。这里有一个备忘单,可以用在学习Core Data的过程中,这份备忘单展示了关键的词组:
在以后的学习过程中,你会遇到更多的术语,但这些是初学者需要了解的最基本的部分。
2.完全忽视Core Data
当一项技术以难学“闻名”时,你可能会忽略它,特别是当你时间不够,急着把app做出来的时候。
Core Data储存app数据的一个常见替代选择是使用XML属性列表,虽然属性列表可以让你今天的工作变得轻松,但它们也会随后回过头来咬你一口。无论何时你编辑属性列表,发生的变化都是原子性的。这意味着即便是很小的更改要求,整个文件都会被加载到内存中,然后在保存的时候,整个文件都会被写回到硬盘。
随着数据量的增长,app也会变得越来越慢。但是如果你基于SQLite数据库使用Core Data时,这些性能问题就不会困扰你 。这样可以保持低内存占用,以保证app快速响应,并防止app因内存压力过大而崩溃。本质上说,Core Data之所以比属性类表更有扩展性的原因是它支持使用数据库进行持久性储存。可扩展性并不是Core Data的唯一优势,使用关系把数据组织进实体结构才是其强大之处。比如,考虑使用以下实体来代表一个任务 :
该任务实体包含一个名称和subtask_name属性。当从任务实体中创建管理对象时,它将会有一个名称和subtask_name属性。
不依赖关系,这个数据模型仅支持一个subtask,现在考虑以下实体:
带有双箭头的线表明Task entity可以对应多个Subtask entity关系,这意味着一个任务可以有多个子任务,更不必说涉及到的父任务也能通过逆关系被包含进来。这个灵活性不仅方便,更节省了数据库的空间,因为父任务名称仅仅只需储存一次。如果你想要更进一步,让任务有子任务的子任务,下一步该怎么办?思考下重新构建以下任务实体:
模型现在支持无线深度的子任务,因为任务实体关联的是其本身!Core Data的可扩展性和灵活性还只是其优势中很少的一部分。Core Data并不仅仅利用关系数据库的优势,而且你不必写任何SQL语句来使用它。Core Data替你承担了责任,并且为你自动优化了生成的SQL语句。
我还没有深入研究Core Data的其他价值方面,比如模型版本控制、迁移、验证以及变更管理和iCloud同步等等。如果有任何值得你投入时间的iOS框架,那就是Core Data。
3. 不使用模型版本控制和迁移
如果你已经编辑了一个管理对象模型,你可能已经犯了以下错误:
“此前用来打开store的模型不兼容以前用来创建store的模型”
当你创建数据持久化存储,它是基于一个特定的管理对象模型的。如果模型的结构发生了变化,那么持久化存储就必须更新以匹配。如果不这么做,store将会是不兼容的,并且不能打开。如果用户正使用的存储是基于你的没有使用版本控制的模型,那么app注定会崩溃。
为了确保模型迁移过程正常进行,你需要确保你在编辑模型前非常小心地添加了模型版本。
附注:一些变化,比如属性默认、有效性规则以及获取请求模板都可以被简化。
4.过多使用版本控制和迁移
一旦开发者了解到维持管理对象模型版本的简易,一些开发者不免会过分使用。这会产生一个过分复杂化的版本历史记录,如果每次更改都添加版本,这只会减缓模型的迁移。
在你发布Core Data app到App Store之前,你可以忽略版本控制,并按你喜欢的那样编辑模型。为避免“the store is incompatible”错误,可以简单地从开发设备上删除app,并再次在Xcode中运行。使用更新的模型部署一个新的持久化储存,就可以解决崩溃问题。一旦你把model version 1发布到App Store,你所有的用户将会有version 1的持久化存储。从这一点上来说,如果更新模型则必须添加一个新版本。我们假定你的用户正使用model version 1。当开发一个更新版的app,你已经添加了model versions 2, 3和4。使用以下小技巧可以减少版本历史,而不用发布model versions 2, 3,4…
删除model 2的内容
复制model 4内容至model 2
设置model 2为当前model
删除model 4
当然,你需要考虑model 1中的实体如何映射到更重要的model 2中,尤其在你没有使用轻量级迁移时。更加详细的关于model版本控制和迁移,可查看“Learning Core Data for iOS”这一个完整章节。
5.把一切留在内存中
你主要关注功能和特性,所以你很容易忘记那些不那么迷人的主题,比如保持低内存占用。有些开发者会在进行性能测试前急匆匆地发布应用,尤其是截止期限所迫的情况下。不过还好我们仍有一些措施帮你保持低内存占用。
当你管理对象时,在内存方面可使用管理对象context。一旦你完成了管理对象,你应该通过调用以下NSManagedObjectContext实例方法之一来移除它们。
通过重置来从context中移除所有管理对象。
使用refreshObject:mergeChanges并传入参数NO 从context中移除特定的对象。
使用以上任意一个方法可以确保未使用的对象没有浪费空间。为了在context中提高对象数目的可见性,可记录[[context registeredObjects] count]结果以方便在控制台中调试。
6.设计一个低质量的Managed Object Model
如果你储存照片、音频或者视频,你在模型设计上要十分小心。记住关键的一点是当你把managed object带入context时,你正把所有数据一并带入内存中。例如,如果一个managed object带有一个图像属性,该属性存储了一张很大的图片,同时一个表格视图使用它来创建众多实体对象并填充单元格, 那么app性能就会受到影响。即时你使用一个获得结果的控制器,你仍需要一次加载很多高分率的图片,这个操作不会立刻执行。为了解决这一问题,持有大量对象的属性应该被分裂进一个关联实体。按照这个方法,大量对象可以被持久化存储。如果你需要在table view中展示照片,你应该使用自动生成缩略图代替。
7.不提前加载数据
当你把模型加载进一个更新的app时,要注意不要意外地加载一个基于旧模型的默认数据存储。如果你这么做了,那么对一些用户来说,可能会在运行应用的时候导致崩溃。这个威胁可以从根本上阻止开发者加载一个默认的数据存储。
如果有默认数据包含在app中,那app就更容易学习和使用了。一个程序越容易使用,那么用户就越有可能继续使用它。用户使用一款应用的时间越长,那么用户传播它的机会就越大,最后也会提升应用潜在的销售情况。为了避免在提供默认数据的情况下出现的更新时崩溃现象,你需要一个好的测试策略。
另外,你也需要深刻、准确地理解你想把什么样的模型版本和存储发布到App Store。你应该部署一个未改变的App Store应用版本到你的设备上,添加数据,然后彻底测试升级进程。
8.只使用单一的Contexts
Core Data的实现至少需要一个context 在主线程上操作。用户接口也需运行在主线程,因此任何减缓主线程的行为都会降低程序的响应能力。虽然使用一个context非常容易,但是性能问题会悄然出现,除非你的数据设置非常小。比如,如果你想要生成数据缩略图,或者导入一些数据,app就会这些过程中出现阻塞现象。
自从iOS 5以后,管理多个context已经变得非常容易了。现在你可以配置一个context 层级,并在前台和后台运行一些contexts。通过配置后台context作为前台 context的父类,你就可以实现后台保存。通过配置后台context作为前台context的子类,你就可以像导入对象一样导入context来自动更新用户接口.
9.不理解iCloud Integration的局限性
iOS 7发布以后 ,Core Data集成iCloud的实现变得更加简单。iCloud一个关键性的限制是它的数据被约束在一个iCloud账户中。由于iCloud账户是与用户设备的方方面面交错在一起,所以分享iCloud账户是不切实际的,不推荐的。这意味着iCloud 不能被用来共享。比如,假定一位丈夫和妻子想要在同一个购物列表上列出物品,这一点当前对iCloud来说也是不可能的。
除了账号限制,iCloud也不支持ordered relationships,也限制你的轻量级的model迁移。跳出这个圈子思考,如果你对app使用的收集分析统计比较感兴趣,你可以考虑使用Backend-as-a-Service (BaaS)。
10.不考虑现有的客户数据集成iCloud
在iOS 7中,iCloud集成Core Data已经容易了很多,很多开发者有信心在应用中支持它,此前用它来托管珍贵的用户数据并不稳定。这导致了很多现有的app仅有本地储存,比如我自己的‘Teamwork’ app。
iOS 7中iCloud重要的简化之一是fallback store的引入,它允许在iCloud accounts和iCloud Documents和Data之间无缝过渡。用户可以使用支持iCloud的app,即便他们没有任何网络连接,并在有可用网络时把数据集成到iCloud中。
虽然这有点不可思议,基于iOS 7之前版本开发的 应用中,用于储存用户数据的本地存储方案都应该被遗忘。
如果你仅打开iCloud,那你将使用一个不同的储存,并且你将需要把用户的本地数据合并到iCloud。在你尝试把用户数据集成到iCloud之前,你需要检查以下几点:
用户注册了iCloud吗?
用户想要在app中使用iCloud吗?
用户希望把本地数据合并到iCloud吗?
如果以上的答案中有一个“no”,那么这个app应该能在未来处理不同的答案。如果你的答案是“yes”,那么你需要管理用户本地数据迁移到iCloud的进程。当用户的多个设备上存有本地数据时,事情就变得有趣了。如果是这样,那你将需要考虑重复数据删除策略了。
如果说有一个iOS框架值得你投入时间,那就是Core Data。如果你对它感兴趣,可以考虑我的新书–。这是本基于iOS 7的书,带你领略整个Core Data的教程。可在此查看。
微信关注: iProgrammer
最热门的技术类微信公共账号之一,全文推送精选技术文章。扫描加关注,碎片时间学习新技能!
系统做的再好,票不会增多。还是有会有这么多人买不到票的。
汇集优质的Python技术文章和资源。人生苦短,我用Python!
JavaScript, CSS, HTML5 这里有前端的技术干货!
关注安卓移动开发业界动态,分享技术文章和优秀工具资源。
关注iOS移动开发业界动态,分享技术文章和优秀工具资源。
为作者带来更多读者;为读者筛选优质内容;专注IT互联网。
由数百名译者组成,立志翻译传播优秀的外文技术干货。
一个专门为IT单身男女服务的征婚传播平台。
收录优秀的工具资源,覆盖开发、设计、产品和管理等。
关于伯乐在线博客
在这个信息爆炸的时代,人们已然被大量、快速并且简短的信息所包围。然而,我们相信:过多“快餐”式的阅读只会令人“虚胖”,缺乏实质的内涵。伯乐在线博客团队正试图以我们微薄的力量,把优秀的原创/译文分享给读者,做一个小而精的精选博客,为“快餐”添加一些“营养”元素。
欢迎关注更多频道
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选博客文章
– JavaScript, HTML5, CSS
– 专注Android技术分享
– 专注iOS技术分享
– 专注Java技术分享
– 专注Python技术分享
(加好友请注明来意)
网站使用问题
请直接询问或者反馈
& 2015 伯乐在线
赞助云主机, 赞助云存储您所在的位置: &
iOS开发中如何快速上手Xcode 6
iOS开发中如何快速上手Xcode 6
核子可乐译
Xcode的每一次版本更新都专注于为开发人员带来更为强大的工具方案,帮助他们更为顺畅地完成应用程序构建。在今年发布的Xcode 6版本当中,开发人员继续迎来更多软件设计与构建的全新方式。在今天的教程中,我们将对Xocde 6中的新型与改进功能加以概述,同时介绍大家应如何将其应用到自己的开发工作当中。
【51CTO译文】Xcode的每一次版本更新都专注于为开发人员带来更为强大的工具方案,帮助他们更为顺畅地完成应用程序构建。在今年发布的Xcode 6版本当中,开发人员继续迎来更多软件设计与构建的全新方式。在今天的教程中,我们将对Xocde 6中的新型与改进功能加以概述,同时介绍大家应如何将其应用到自己的开发工作当中。
1.Playgrounds
在今年的WWDC大会上,苹果公司正式公布了Swift&&一款面向苹果移动设备软件开发工作的全新编程语言。为了配合新语言的诞生,Xcode 6新增了一项名为Playgrounds的功能&&这其实是一套交互工作区,开发人员可以在此编写Swift代码并在无需将其运行在设备或者模拟器中的前提下获取实时运行效果反馈。这对于Xcode来说无疑是一种很好的补充,现在各位可以在将自己的代码成果正式添加到主代码库内之前,以实验性方式快速便捷地掌握地实时运行效果。
2.&Interface Builder
今年WWDC大会的另一大主题议题在于构建自适应式应用程序。相对于原本针对特定屏幕尺寸构建应用程序,苹果公司现在鼓励开发人员打造出能够忽略实际屏幕大小、自动与运行所在平台相适应的应用程序产品。
这一举措实际上源自最初诞生于iOS 6系统当中的Auto Layout及其数个后续版本,该方案允许开发人员直接创建能够同时运行在3.5英寸与4.0英寸屏幕上的应用方案。如今这一机制得到了进一步改善,iOS开发人员已经能够打造出直接运行在全部受支持iPhone平台上的应用程序,其中包括新一代4.7英寸iPhone 6与5.5英寸iPhone 6 Plus&&连iPad也可使用同一套代码库。
Interface Builder经历了一系列重大变更后才真正实现了对此类自适应式应用程序的开发支持能力。同时添加的其它一些新功能还给用户界面的设计流程带来提升。下面我们就来具体介绍其中出现的各项调整。
Size Classes
Size classes负责定义布局方案所使用的canvas尺寸。这些类允许大家允许开发人员指定应用程序的用户界面如何根据视图控制器的变化而交付可用显示范围。在Size Classes的帮助下,我们就能够构建起一款具备统一显示模板的应用程序。相比之下,过去开发人员需要设计两款彼此独立的显示模板,一套面向iPad、另一套则面向iPhone。
一个Size Class(尺寸类)能够定义显示区域内的一项相对数量,例如显示高度(即垂直维度)或者显示宽度(即横向维度)。目前Xcode提供两种尺寸类,分别为compact(紧凑)与regular(常规)。举例来说,一台iPhone在纵向显示模式下宽度紧凑但高度常规。而iPad则在纵向与横向显示模式下的宽度与高度皆为常规水平。
但大家应该会注意到,尺寸类并不一定非要与某台设备的某种显示模式相映射。举例来讲,一台iPad能够仅使用屏幕中的一小块区域来提供类似于iPhone布局风格的视图(即横向紧凑而纵向常规的尺寸类),同时也可以使用平板设备大尺寸屏幕所固有的天然风格布局(即横向常规而且纵向同样常规的尺寸类)。
大家需要利用Interface Builder canvas底部接近布局工具栏处的Size Classes控制机制对尺寸类进行调整。Interface Builder在起始状态下提供any(任意)宽度与any(任意)高度的尺寸类设置,我们可以根据不同设备的实际屏幕尺寸及横向/纵向显示模式在其中摆放各类用户界面组件并固定其位置。接下来,当可用屏幕尺寸发生改变时,大家则利用另一个不同的尺寸类对用户界面内的组件位置加以更新,从而提供更适合当前需要的布局效果。
自适应过渡类型
Xcode 6所提供的自适应过渡类型机制更适合与新的自适应布局配合使用,这是因为这些自适应类型能够根据自身运行所处的环境提供多种不同的视图方案。举例来说,在iPad上以Split View(分区视图)方式使用Show Detail(显示细节),那么Detail就会被取代; 但在iPhone上,同样的操作则会将Detail推送至Master处。一部分旧有过渡类型,例如push以及modal,现在已经遭到弃用。
Interface Builder canvas在交互能力方面要远胜过此前版本。过去,大家必须实际运行自己的应用程序才能对相关自定义对象、自定义字体以及组件位置的变更情况进行查看。而现在,我们完全可以通过Interface Builder的字体拾取器选择自定义字体,并将其直接显示在Interface Builder canvas当中。
大家甚至能够创建出自定义对象并在Interface Builder canvas之内对它们加以渲染。要实现这一目标,我们需要创建一套自定义框架,将自己的自定义类添加到该目标当中、并利用@IBDesignable标记(也就是Objective-C中的 IB_DESIGNABLE)对该类进行标。这样一来,Interface Builder就会意识到这是一个能够在canvas当中显示自定义内容的类。
除了能够在Interface Builder当中查看自定义对象之外,大家现在还可以利用@IBInspectable标记对属性加以标注、从而使它们出现在Interface Builder的检查菜单当中。在这里,我们可以对上述属于进行编辑、正如对视图内其它属性进行编辑一样。换言之,现在我们不必对某个类进行可设计标注,即可使其成为一项可检查属性。
大家还能够以纯代码形式指定设计时间。举例来说,我们可以利用这种方式将示例数据预先填充到视图当中,从而更为准确地感受界面观感。要实现这一点,大家需要重写prepareForInterfaceBuilder方法。除此之外,我们也可以利用#if TARGET_INTERFACE_BUILDER将选定代码添加或者移出最终Interface Builder渲染效果视图。
Preview Editor
Preview Editor现在允许大家对不同模拟设备上的多套预览图进行逐一查看。除了能够直接观察应用程序在不同设备上的运行效果之外,大家还可以通过设置变更每种设备的纵向或者横向显示模式。在这项新功能的帮助下,我们可以更为便捷地在不同设备及其显示模式下对应用程序的用户界面加以预览,而又不必真正将其投付运行。
3.&游戏开发
苹果公司在Xcode 6与iOS 8当中加入了新的游戏技术,分别名为SceneKit与Metal。SceneKit之前就已经在OS X平台上发挥作用,其实质是一套3D场景渲染工具。而Metal则是一套框架,能够被用于创建经过高度优化的图形渲染及计算任务&&这是因为它能够以低损耗方式与A7及A8 GPU相对接。
SpriteKit也已经在多个层面实现了改进,其中包括每像素物理平衡、物理区域、通用运动性与限制性、材质、光照以及阴影等等。
SpriteKit中的另一大重要新功能则是SpriteKit Level Editor,它允许我们以直观方式组建场景。正如大家可以无需编写任何代码就在Interface Builder当中创建用户界面一样,SpriteKit Level Editor能帮助我们以同样的方式轻松打造出SpriteKit游戏。
4.&OS X开发
Storyboard
Storyboard现在也被引入了OS X开发流程。正如在iOS开发环境中一样,Storyboard允许我们建立自己的视图布局并将这些视图与多种类型各异的过渡动画结合起来。不过截至撰稿之日时,一部分功能&&包括Storyboard在内&&依然无法在Xocde(6.0.1)中被用于OS X开发,相信等到OS X Yosemite版本发布时情况会得到改观。
手势识别功能现在已经可用于AppKit,而且其具体使用方式与iOS应用开发流程完全一致。大家可以在Interface Builder当中的Object Library(对象库)当中查看可用的手势操作类型。
本地化功能在Xcode 6中的运作方式与此前版本存在较大差别。现在大家可以将自己的全部本地化内容导出至XLIFF当中&&这是一套业界标准,通过大量翻译服务作为实现手段。当我们获取到翻译结果后,即可将其导入、而Xcode将把新内容合并到原有项目当中。顺带一提,大家应该为自己应用程序所支持的每一种语言创建一个与之对应的XLIFF文件。
大家现在能够在无需通过设置对设备或者模拟器的本地选项进行变更的前提下,直接预览全部本地化内容。要实现这一点,我们选择Product 〉Scheme 〉Edit Scheme,而后选择Run并点击Options标签。这时大家就可以从Application Language菜单中选择自己需要的语言项目了。Xcode还提供Double Length Pseudolanguage项目,这样即使还没有添加过任何其它语言、大家也仍然能够借此实现测试。在运行应用程序之后,我们即可查看到对应的本地化内容。
再有,我们也可以直接查看本地化内容而无需实际运行自己的应用程序。要实现这一点,大家需要利用Preview Editor在应用程序所支持的不同语言之间进行切换。默认语言会显示在编辑器的右下角位置,当我们对其进行点击后、即可看到一份包含各可用语言的列表。再次强调,如果要在不添加语言的前提下进行测试,大家需要使用Double Length Pseudolanguage机制。
6.&iOS模拟器
Xcode 6现在提供模拟器命名功能,这样开发人员就能够以&iPhone 5s&这样的名称来区分特定设备,而不再像过去那样使用通用型名称&&例如64位iPhone Retina。
模拟器尺寸可调节
现在大家已经可以从可调节尺寸iPhone与可调节尺寸iPad当中选择自己需要的设备类型。这两套方案允许我们自行指定模拟器的宽度、高度以及屏幕尺寸。通过这种方式,大家能够更轻松地测试自己的应用程序在苹果现有设备以及将来可能后续推出的设备上的运行效果,而用不着为每种设备下载不同的模拟器方案。
模拟器自定义配置
在新的iOS模拟器当中,大家可以将数据与配置设定结合在一起。具体而言,针对某款应用程序的特定版本运行一套配置方案及其相关数据,再针对其它版本运行另一套配置方案及其相关数据。这意味着大家可以模拟多位用户在设备上的使用感受。每一位用户都拥有属于自己的独立数据及配置方案。
7.&HomeKit附件模拟器
HomeKit框架允许大家的应用程序与用户家中的其它接入附件进行通信并加以控制。在目前的Xcode 6 beta版本当中,HomeKit附件模拟器已经作为固有组成部分存在、但尚属于Xcode内Hardware I/O Tools的功能之一。大家可以从iOS Dev Center中下载该框架。
视图调试工具
Xcode 6提供的实时视图调试功能可以大大简化应用程序用户界面的调试流程。现在开发人员可以暂停正在运行当中的应用程序,并以3D视图模式对当前界面加以剖析。视图调试工具能够显示当前视图层级以及Auto Layout设定。当大家选择一套视图时,即可以在检查工具内检查其属性或者跳转到辅助编辑器内的对应代码处。有了这种强大的支持,大家就可以解决很多以往令人头痛的难题&&例如Auto Layout冲突、查看一套视图为何会隐藏或者收起等。
要启动实时视图调试工具,我们首先需要启动自己的应用程序、而后点击调试工具栏上的Debug View Hierarchy(调试视图层级)按钮。
这时我们的应用程序会暂停运行,而整套用户界面将以3D可视化方式呈现在大家面前。我们可以拖动canvas中的任意位置来对视图进行旋转。
大家可以利用canvas下方的各个按钮在多种视图状态之间进行切换。
从左至右各个按钮依次为:
显示收起内容:&这个选项用于隐藏或者显示选定视图内被收起的内容。
显示约束:&这一选项能够显示选定视图内的Auto Layout约束机制。
重置视图区:&这一选项会将canvas重置为其默认状态。
调整视图模式:&这项模式允许大家选择自己以怎样的方式对视图进行查看。大家可以选择只查看视图边框、视图内容或者二者同时显示。
缩小、实际尺寸、放大:&允许大家对视图的大小进行调整。
Quick Look
Quick Look(快速查看)最初出现于Xcode 5版本当中,其作用在于帮助大家在调试过程中查看特定对象的内容。Quick Look支持多种常见对象类型,其中包括图像、贝塞尔曲线以及地图位置等等。
在Xcode 6当中,这项功能在改进之后能够支持两种新的对象类型,分别为视图(UIView与NSView)与自定义对象。要让Quick Look能够识别自定义对象,大家需要将debugQuickLookObject方法添加到自定义类当中。
经过强化的队列调试机制
调试向导会记录并显示最近执行过的块以及队列块。大家可以利用它来查看自己的队列块位于何处,同时检查执行中的具体设置信息。大家可以通过在Debug & Debug Workflow 〉 Always Show Pending Blocks in Queues菜单选项中将其选定来启用块调试功能。
调试计量器
调试计量器的作用是在调试过程中提供与应用程序资源使用情况相关的各类信息。Xcode 6对计量器进行了升级,现在其能够以图形方式对新的Metal框架以及用于支持Cloud与CloudKit内文档的iCloud进行分析。
除了上述改进之外,Xcode 6还引入了两款全新调试计量器,分别针对网络与磁盘活动。
网络活动计量器旨在显示我们的应用程序发出与接收到的数据量,同时提供一套开放连接列表。大家可以通过查看历史时间记录来监控网络使用情况,帮助自身找到何时及为何出现网络使用率峰值或者发生网络故障。
磁盘活动计量器则用于显示应用程序磁盘读取与写入操作的实时信息。它还能够提供所有打开文件的相关信息。磁盘I/O活动以历史时间表的方式交付,大家可以借此实现监控工作。
9.&资产目录
资产目录现在支持尺寸类。这意味着大家已经能够轻松为不同的尺寸类提供特殊的图像素材,从而保证自己的用户界面具备常规与紧凑两种高度及宽度设计效果。
原先的资产目录只支持PNG图像,但在Xcode 6中,新版本已经能够支持JPEG以及PDF矢量图像两种新格式。
10.&启动图像
大家可以利用XIB或者storyboard作为自己的应用程序启动图像。操作系统会为我们的应用程序生成必要的启动图像。有了这项功能,大家再也不必为启动图像提供独立的资产,同时也能够在Interface Builder当中对其进行设计。
要将XIB或者storyboard设定为自己的应用程序启动图像,我们需要选择Project Navigator中的对应项目并从目标列表中为其选择目标。在General标签之下,选定App Icons and Launch Images选项并从菜单标签Launch Screen File当中选择正确的文件。
XCTest框架当中也添加了多种新型API,用于实现对异步代码的测试工作。这项功能是通过预期对象,也就是XCTestExpectation实现的,其作用是描述预期事件。XCTestCase当中包含一种新型API,其始终在等待预期的满足条件并会为其设定超时时间。当所有事件都被切实执行或者达到超时时间之后,完成处理程序就会被调用。需要强调的是,该API能够在同一时间等等多个异步事件。大家现在可以更轻松地对系统中以异步方式执行的交互关系进行测试,例如文件I/O以及网络请求等等。
经过强化的XCTest框架现在能够对应用程序中各组成部分的性能进行量化。Xcode负责运行性能测试并允许大家定义一套基准性能指标。每一项后续测试都会与基准性能进行比对,并显示随时间推移而产生的变化情况,最终通过高亮显示问题区域来提醒大家可能由所提交代码引发的性能衰减。如果平均性能指标与基准水平存在明显差异,则意味着性能测试失败。对于开发人员来说,是一套对应用程序性能下降进行检测的理想方案。
随着性能测试机制的引入,现在我们已经有能力在Instruments当中进行剖面测试。大家可以为剖面选择一项或者一组测试套件,从而通过对Instruments的进一步调查及分析来了解测试为何会出现失败,最终找出导致性能衰退的根源。
12.&Instruments
Instruments的用户界面同样经过了更新。在新的模板选择方案当中,大家可以选择自己的设备、目标以及剖面分析流程的起始点。
我们可以看到一款名为Counters的全新模板,它与Events相结合能够对各个独立CPU事件进行深度探究与审视。大家甚至可以指定用于测量事件聚合乃至比率等对象的公式。
在Xcode 6当中,Instruments还提供对Swift的支持、大家也能够利用它对应用程序扩展进行配置。Instruments也提供对模拟器配置的支持,并将配置方案作为设备本身进行处理,这就大大简化了在模拟器中对进程的启动或者附加机制。
苹果公司仍在不断改善其开发者工具,而这也是Xcode在每个主要版本中都致力于实现的目标。Xcode 6相对于其前代方案更进一步,力图为开发人员提供足以提升工作流程并使整个开发过程更加顺畅的相关工具。
原文链接:
原文标题:Getting Up to Speed With Xcode 6
核子可乐译
【编辑推荐】
【责任编辑: TEL:(010)】
关于&&&&的更多文章
iOS系统从诞生之日起到现在,在这短短几年的时间内,凭借其硬件
既然强大的Android Studio来了,有什么理由不去用呢?
讲师: 8人学习过讲师: 151人学习过讲师: 100人学习过
谷歌推出的Android操作系统,似乎与甜点结下了不解之
Android Wear自上市以来褒贬不一,使得谷歌公司成为可
罗永浩再次证明他在公开场合即兴演说和论辩的强大技巧
本书是在《网管员必读―网络基础》(第1版)基础上修改而成的。全书共分9章,分别介绍计算机网络概述(修改)、数制(新增)、网
Windows Phone专家
Android开发专家
51CTO旗下网站

我要回帖

更多关于 我叫mt2 bug ios 的文章

 

随机推荐