1/22文档1Doc_Sample实例高效使用你的Xcode(via:VongLo'sDevSpace原文:SuperchargingYourXcodeEfficiency)好莱坞电影里经常看到黑客们手指在键盘上飞速跳跃,同时终端上的代码也随着飞舞。如果你也想像电影里那样,那么你来对地方了。这篇教程将会教你在Xcode编程中更像程序员,你可以称之为魔法、疯狂的技术、好运当头或者黑客。毫无疑问,在学习完本教程之后,不管你怎么认为,都会感觉很酷,同时能更高效地运用Xcode,甚至可以通过这些新发现使你的代码免于毁灭。1.开始要看起来很酷,所以有一些必不可少的因素.下面列出来的是其中一部分:(1)快速执行任务(2)精准(3)简洁美观的代码要表现地更酷,你可以试着不用鼠标或者触摸板来完成教程中的每一个任务。学习之旅将从学习一些实用的Xcode功能开始,然后通过修复一些在CardTilt中的一些bug来训练。最后你将整理一下你的代码,使整个界面看起来更整洁。在学习该教程时,要记住:它不是教你做一个app,而是教你比以前更有效地利用Xcode来开发app。这篇教程建立在你对Xcode有一个基本的了解的基础上,然后着重于提高你的工作效率。每个人都有自己的编程习惯,本教程并非强制你形成某种风格。自始至终,本教程中你会看到某些命令的替代品,随着本教程的学习,请集中精力在提炼和形成你自己的编程风格,不要让微小的错误影响你。Note:如果你对于Xcode不是很熟悉,建议先学习下面两篇教程。教程1和教程2下载CardTilt-starter,然后就可以愉快地写代码了。2.日常Xcode任务有一些在Xcode中你经常使用的技巧,这一部分让你更近距离的接触这些技巧,然后讲解一些潇洒应对它们的一些妙招。在这个过程中,你会在这些妙招的基础上发现使用它们的新方法。这些技巧将成为你编程工具腰带上的忍者之星。在Xcode中打开之前下载好的工程CardTilt,先不要急着去看代码,先将你Xcode的窗口和下图来一一对应2/22文档1是不是发现你的窗口和图中并不对应,先别着急。在下面介绍的快捷键部分,你将会学到如何轻松地显示以及隐藏这些对应的窗口。下面是组成窗口的每一个独立区域的快速浏览:TheToolbar(工具栏):你选择视图,运行app,在不同布局界面切换的地方TheNavigationArea(导航区):导航你整个工程,警告,报错等的地方TheEditingArea(编辑区):所有奇迹诞生的地方,包括它上方的JumpbarTheUtilityArea(工具区):包含检测器和一些库TheDebuggingArea(调试区):包括调试窗口和变量检测器上面列出的所有视图区域都是Xcode的必要组成部分,它们也是在你开发过程中可能需要用到的,开发过程中通常不需要将他们一次性同时显示出来,下面将介绍一些快捷键,将会教你快速显示/隐藏这些视图区域。3.快捷键在这一部分,你将首先学到怎么掌握这些快捷键,得益于一些模式,最有效的快捷键非常容易记。第一个需要知道的是Xcode的各区域与修饰键的关系,下面是一个快速浏览:用来导航,控制导航区域控制右边的一些东西,比如AssistantEditor,utilityeditorControl:编辑区域上的Jumpbar的一些交互第二个需要知道的时数字键和标签栏的关系,将数字键和上面提到的修饰键组合可以在标签页之间来回切换。通常数字键对应标签页的索引位置(从1开始),0通常用来显示/隐藏区域。它还能再直观一点吗?下面是最常用的组合键:Command1~8:跳转到导航区的不同位置3/22文档1Command0:显示/隐藏导航区CommandAlt1~6:在不同检测器之间跳转CommandAlt0:显示/关闭工具区.ControlCommandAlt1~4:在不同库之间跳转Control1~6:在Jumpbar的不同标签页的跳转。最后也是最简单的就是回车键,当它和Command组合使用时,可以是你在Xcode中不同编辑器来回切换。Command+Enter:显示标准单窗口编辑器CommandAltEnter:你可以猜下它的作用,它的功能是打开AssistanteditorCommandAltShiftEnter:打开版本控制编辑器同样重要的是显示/隐藏调试区的快捷键是Command+Shift+Y,要记住这个你可以通过这句话来记忆“Yismycodenotworking?”(译者注:Y谐音Why)。如果你忘记了一些快捷键,你可以在Xcode的菜单栏Navigate一项中找到大部分快捷键。在即将完成这一部分的学习之时,你会惊奇的发现你仅仅只是用了键盘就让Xcode发生这各种变换。4/22文档14.Xcode的行为使用快捷键来管理Xcode的界面却是挺棒,有没有想过更棒的事情?比如让Xcode自动转换到你想看到的界面。接下来我们将学到更酷的东西。幸运的是,Xcode提供的Behaviors(行为)可以让你轻易地实现上面的事情。它们是一组定义好的有指定事件触发的动作,比如build一个工程。这里的动作的范围从改变界面到运行一个自定义脚本文件。来看一个例子,快速修改下载好的工程的CTAppDelegate.m文件,使其运行时会生成调试窗口输出,用下面的方法替代didFinishLaunchingWithOptions方法-(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions{[[UIApplicationsharedApplication]setStatusBarHidden:YES];//Overridepointforcustomizationafterapplicationlaunch.NSLog(@Showmesomeoutput!);returnYES;}运行程序,然后仔细观察调试区,你会发现调试区随着app运行而出现,如下所示:5/22文档1来看看是什么定义了上面的事件,在Xcode-Behaviors-EditBehaviors打开Behavior偏好设置,在左侧你将看到所有事件集合,在右边是该事件可以触发的一些列动作。点击Running栏下的Generatesoutput,然后发现它被设置成用来显示调试区。4.1一些推荐的行为Note:根据你的开发环境,我推荐的两种不同的`Generatesoutput`事件触发动作集。如果你有多个屏幕,试着使用第一种,如果是单显示器,试着调到第二种方法。4.1.1方法一如果你在两个或者多个屏幕上开发,把调试区放到第二屏幕是不是更加方便,你可以向下面这样设置6/22文档1现在,运行程序,然后你会看到一个分离的窗口出现,将它放到你的第二屏幕上,是不是效率高了不少?4.1.2方法二如果是单屏,通过隐藏工具板以及设置输出窗口占据整个调试区使输出窗口的有效区域最大化,设置如下然后运行程序,然后观察Xcode,看它是不是按照你的命令在执行。7/22文档1当程序暂停的时候,你可能也想改变Xcode的行为,到Running栏下的Pauses事件,然后改变其设置,向下面这样:现在无论何时你设置了断点,你将会得到一个新的名为fix的展示变量和输出窗口的标签页,然后自动导航到第一个issue。你将要创建的最后一个行为是我个人最喜欢的一个,它是一个自定义行为—设置一个快捷键。当被触发的时候,它使Xcode转变到我指定的为下一次开发而优化的布局,名为DevMode。我们可以通过点击Behavior偏好设置的左下角的“+”,然后将其取名为DevMode,双击DevMode右边的符号然后输入Command.来定义一个快捷键。8/22文档1接下来为该事件设置相应动作:现在,只要你按下command.就会触发上面设置的动作,即出现一个相同的整洁的开发界面。下面将介绍Xcodetabname,和行为配合起来使用堪称完美。Note:XcodeTabNames(Xcode标签名):可以通过双击标签页的标题来修改标签页的名称,对于它本身来说是一个无用的功能,但是当它和行为结合起来使用时就变得非常强大了。在上面的第二个例子中,当改变Pauses行为时,命名了一个叫fix的标签页,这就意味着当行为被触发时,Xcode将会使用fix标签页(如果存在),如果不存在,它会新建一个名为fix的标签页。另一个例子就是多屏Starts行为,如果一个名为Debug的标签页在之前运行时被打开,它将会复用这个标签页而不是重新创建一个。用这种方式,你可以创建非常有趣的行为。到现在为止,我们可以花点时间来回顾一下刚才的行为,不要着急,本教程会等着你。5.小测验在接下来的部分,你将在测验中用到上面所学到的技巧,然后在CardTilt项目中学到一些新的技巧。运行CardTilt项目中,你看到如下画面9/22文档1它不是你期待看到的画面?是时候消灭这些bug了!5.1锁定bugapp似乎在加载数据时出现了问题,你的任务就是消灭它们。打开CTMainViewController.m文件然后进入开发模式DevMode,快捷键为之前设置的command.。注意viewDidload方法中的前几行self.dataSource=[[CTTableViewDataSourcealloc]init];self.view.dataSource=self.dataSource;self.view.delegate=self;看起来CTTableViewDataSource实现了UITableViewDataSource协议,为tableview提供了数据。是时候展现你Xcode的技术了,按住command键,同时点击CTTableViewDataSource在编辑器中打开CTTableViewDataSource.h。CTTableViewDataSource.m应该已经在你的AssistantEditor,如果不是这样的话,打开顶部的JumpBar,像下图一一样切换到AssistantEditor的counterparts模式。10/22文档1翻看代码,你会发现数组members装载数据,loadData方法从bundle中加载数据至数组members。在assistanteditor右边任意位置鼠标右击,选择OpeninPrimaryEditor,就会在PrimaryEditor中打开CTTableViewDataSource.m文件,下面动画是该步骤的展示:Note:为了看起来更酷炫,你可以在不用鼠标的情况下完成上面的所有事情,步骤如下:1.同时按住Command+Shift+O,在输入框中输入CTMainViewController.m,然后回车来打开该文件。2.Command+.进入EnterDev模式。3.将鼠标放在CTTableViewDataSource上,然后按住Command+Control+J,跳转至CTTableViewDataSource定义处。4.按住Command+J,-然后按下回车,来转换assistanteditor的焦点11/22文档15.按住ctrl+4来下拉JumpBar,然后使用方向键和回车键来选择counterparts6.按住Command+Alt,在primaryeditor中打开CTTableViewDataSource.m文件7.上面的结果步骤看起来不呢么高效,但是它让你看起来很酷。5.2修复bug在self.members=json[@Team];打上断点来确定数据是否都被装载到数组members当中,然后运行程序。如果对于基本的设置断点和调试不太熟悉,可以先看看这篇教程。就像你之前在Xcode行为看到的一样,Generatesoutput将首先被触发,紧接着Pause行为被触发。因为你之前在Pause有过自定义设置,所以Xcode会新建一个名为fix的标签