您的位置:首页 > 其它

高效使用你的Xcode

2015-08-07 14:53 197 查看
好莱坞电影里经常看到黑客们手指在键盘上飞速跳跃,同时终端上的代码也随着飞舞。如果你也想像电影里那样,那么你来对地方了。这篇教程将会教你在Xcode编程中更像程序员,你可以称之为魔法、疯狂的技术、好运当头或者黑客。毫无疑问,在学习完本教程之后,不管你怎么认为,都会感觉很酷,同时能更高效地运用Xcode,甚至可以通过这些新发现使你的代码免于毁灭。

本章内容包括:

开始

日常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的窗口和下图来一一对应



是不是发现你的窗口和图中并不对应,先别着急。在下面介绍的快捷键部分,你将会学到如何轻松地显示以及隐藏这些对应的窗口。

下面是组成窗口的每一个独立区域的快速浏览:

The Toolbar(工具栏): 你选择视图,运行app,在不同布局界面切换的地方

The Navigation Area(导航区): 导航你整个工程,警告,报错等的地方

The Editing Area(编辑区): 所有奇迹诞生的地方,包括它上方的Jump bar

The Utility Area(工具区): 包含检测器和一些库

The Debugging Area(调试区): 包括调试窗口和变量检测器

上面列出的所有视图区域都是Xcode的必要组成部分,它们也是在你开发过程中可能需要用到的,开发过程中通常不需要将他们一次性同时显示出来,下面将介绍一些快捷键,将会教你快速显示/隐藏这些视图区域。

3.快捷键

在这一部分,你将首先学到怎么掌握这些快捷键,得益于一些模式,最有效的快捷键非常容易记。

第一个需要知道的是Xcode的各区域与修饰键的关系,下面是一个快速浏览:


用来导航,控制导航区域


控制右边的一些东西,比如Assistant
Editor,utility editor

Control: 编辑区域上的Jump bar的一些交互

第二个需要知道的时数字键和标签栏的关系,将数字键和上面提到的修饰键组合可以在标签页之间来回切换。通常数字键对应标签页的索引位置(从1开始),0通常用来显示/隐藏区域。它还能再直观一点吗?

下面是最常用的组合键:

Command 1~ 8: 跳转到导航区的不同位置

Command 0 :显示/隐藏导航区

Command Alt 1~ 6:在不同检测器之间跳转

Command Alt 0: 显示/关闭工具区.

Control Command Alt 1~4: 在不同库之间跳转

Control 1~ 6: 在Jump bar的不同标签页的跳转。



最后也是最简单的就是回车键,当它和Command组合使用时,可以是你在Xcode中不同编辑器来回切换。

Command + Enter: 显示标准单窗口编辑器

Command Alt Enter:你可以猜下它的作用,它的功能是打开Assistant editor

Command Alt Shift Enter: 打开版本控制编辑器

同样重要的是显示/隐藏调试区的快捷键是 Command + Shift + Y ,要记住这个你可以通过这句话来记忆 “Y is my code not working?” (译者注:Y谐音Why)。如果你忘记了一些快捷键,你可以在Xcode的菜单栏Navigate一项中找到大部分快捷键。在即将完成这一部分的学习之时,你会惊奇的发现你仅仅只是用了键盘就让Xcode发生这各种变换。



4.Xcode的行为

使用快捷键来管理Xcode的界面却是挺棒,有没有想过更棒的事情?比如让 Xcode 自动转换到你想看到的界面。接下来我们将学到更酷的东西。

幸运的是, Xcode 提供的 Behaviors(行为) 可以让你轻易地实现上面的事情。它们是一组定义好的有指定事件触发的动作,比如 build 一个工程。这里的动作的范围从改变界面到运行一个自定义脚本文件。来看一个例子,快速修改下载好的工程的 CTAppDelegate.m 文件,使其运行时会生成调试窗口输出,用下面的方法替代 didFinishLaunchingWithOptions 方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
// Override point for customization after application launch.
NSLog(@"Show me some output!");
return YES;
}


运行程序,然后仔细观察调试区,你会发现调试区随着 app 运行而出现,如下所示:



来看看是什么定义了上面的事件,在 Xcode->Behaviors->Edit Behaviors 打开 Behavior 偏好设置,在左侧你将看到所有事件集合,在右边是该事件可以触发的一些列动作。点击 Running 栏下的 Generates output,然后发现它被设置成用来显示调试区。



4.1 一些推荐的行为

Note: 根据你的开发环境,我推荐的两种不同的`Generates output`事件触发动作集。如果你有多个屏幕,试着使用第一种,如果是单显示器,试着调到第二种方法。

4.1.1 方法一

如果你在两个或者多个屏幕上开发,把调试区放到第二屏幕是不是更加方便,你可以向下面这样设置



现在,运行程序,然后你会看到一个分离的窗口出现,将它放到你的第二屏幕上,是不是效率高了不少?

4.1.2 方法二

如果是单屏,通过隐藏工具板以及设置输出窗口占据整个调试区使输出窗口的有效区域最大化,设置如下



然后运行程序,然后观察 Xcode ,看它是不是按照你的命令在执行。



当程序暂停的时候,你可能也想改变 Xcode 的行为,到 Running 栏下的 Pauses 事件,然后改变其设置,向下面这样:



现在无论何时你设置了断点,你将会得到一个新的名为fix的展示变量和输出窗口的标签页,然后自动导航到第一个issue。

你将要创建的最后一个行为是我个人最喜欢的一个,它是一个自定义行为—设置一个快捷键。当被触发的时候,它使 Xcode 转变到我指定的为下一次开发而优化的布局,名为 Dev Mode。我们可以通过点击Behavior偏好设置的左下角的“+”,然后将其取名为Dev Mode,双击 Dev Mode 右边的

符号然后输入
Command . 来定义一个快捷键。



接下来为该事件设置相应动作:



现在,只要你按下command .就会触发上面设置的动作,即出现一个相同的整洁的开发界面。

下面将介绍 Xcode tab name,和行为配合起来使用堪称完美。

Note: Xcode Tab Names(Xcode标签名):可以通过双击标签页的标题来修改标签页的名称,对于它本身来说是一个无用的功能,但是当它和行为结合起来使用时就变得非常强大了。在上面的第二个例子中,当改变Pauses行为时,命名了一个叫fix的标签页,这就意味着当行为被触发时,Xcode将会使用fix标签页(如果存在),如果不存在,它会新建一个名为fix的标签页。另一个例子就是多屏Starts行为,如果一个名为Debug的标签页在之前运行时被打开,它将会复用这个标签页而不是重新创建一个。用这种方式,你可以创建非常有趣的行为。

到现在为止,我们可以花点时间来回顾一下刚才的行为,不要着急,本教程会等着你。

5.小测验

在接下来的部分,你将在测验中用到上面所学到的技巧,然后在CardTilt项目中学到一些新的技巧。

运行CardTilt项目中,你看到如下画面



它不是你期待看到的画面?是时候消灭这些bug了!

5.1锁定bug

app似乎在加载数据时出现了问题,你的任务就是消灭它们。打开 CTMainViewController.m 文件然后进入开发模式 Dev Mode,快捷键为之前设置的 command .。注意 viewDidload 方法中的前几行

self.dataSource = [[CTTableViewDataSource alloc] init];
self.view.dataSource = self.dataSource;
self.view.delegate = self;


看起来 CTTableViewDataSource 实现了 UITableViewDataSource 协议,为 tableview 提供了数据。是时候展现你 Xcode 的技术了,按住 command 键,同时点击 CTTableViewDataSource 在编辑器中打开CTTableViewDataSource.h。CTTableViewDataSource.m 应该已经在你的 Assistant Editor,如果不是这样的话,打开顶部的 Jump Bar,像下图一一样切换到 Assistant Editor
的 counterparts 模式。



翻看代码,你会发现数组 members 装载数据,loadData 方法从 bundle 中加载数据至数组 members。在assistant editor 右边任意位置鼠标右击,选择 Open in Primary Editor,就会在 Primary Editor 中打开 CTTableViewDataSource.m 文件,下面动画是该步骤的展示:



Note: 为了看起来更酷炫,你可以在不用鼠标的情况下完成上面的所有事情,步骤如下:

1.同时按住Command + Shift + O,在输入框中输入CTMainViewController.m,然后回车来打开该文件。

2.Command + . 进入Enter Dev模式 。

3.将鼠标放在 CTTableViewDataSource 上,然后按住Command + Control + J,跳转至CTTableViewDataSource定义处。

4.按住 Command + J, -> 然后按下回车,来转换 assistant editor 的焦点

5.按住 ctrl +4 来下拉 Jump Bar,然后使用方向键和回车键来选择 counterparts

6.按住 Command + Alt,在 primary editor 中打开 CTTableViewDataSource.m 文件

7.上面的结果步骤看起来不呢么高效,但是它让你看起来很酷。

5.2 修复bug

在 self.members = json[@"Team"]; 打上断点来确定数据是否都被装载到数组 members 当中,然后运行程序。

如果对于基本的设置断点和调试不太熟悉,可以先看看这篇教程。

就像你之前在 Xcode 行为看到的一样,Generates output 将首先被触发,紧接着Pause行为被触发。因为你之前在 Pause 有过自定义设置,所以 Xcode 会新建一个名为 fix 的标签页,它专为调试而设。

将目光切换到变量检测器variable inspector,你会发现数组members是nil,在loadData方法数组members被填充,代码如下

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
self.members = json[@"Team"];


在变量检测器中查看json,看其是否被正确加载,你会发现数据中的第一个值是 @"RWTeam" 而不是 @"Team" ,当加载数组 members 时,这个值是错的,找到了一个bug。

让我们按下面步骤来修复这个bug:

(1)使用 Command + .来进入开发模式

(2)按住 Command + Option + J跳至filter bar然后输入 teammember

(3)然后按住Alt同时点击 TeamMembers.json 在 assistant editor 来打开它

(4)最后,使用 "Team" 来替换 "RWTeam"

下图是上面四步的一个动画



现在移除断点,然后运行程序,它看起来应该像这个样子。



是不是看起来比之前要好一点了,但是还是有一些bug,比如Ray和Brian的标题描述栏不见了。接下来我们通过修复这些bug来学到更多酷炫的技巧。

6.加速

你应该已经知道 UITableViewCells 在 tableView:cellForRowAtIndexPath: 方法中被加载,所以用 Open Quickly 来导航到该方法,然后按照下面步骤:

(1)按下Command + Shift + O来呼出 Open Quickly

(2)输入cellForRow

(3)按下回车来打开它

按住 command 然后点击 setupWithDictionary 来跳转至其定义处,然后你会发现一些用来加载描述的代码

NSString *aboutText = dictionary[@"about"]; // Should this be aboot?
self.aboutLabel.text = [aboutText stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];


它使用 dictionary[@"about"] 中的数据来加载 label。

接下来呼出 Open Quickly,然后打开 TeamMembers.json,使用 alt + command 在 Assistant Editor 中打开。检查 about 的值,然后你会发现有人将 about 拼写成了 aboot,我们可以使用全局的Find and Replace 来修复这个bug。当然你可以在文件中直接做这件事,但是使用 find navigate 看起来更酷。打开 find navigate,然后通过顶部的 jump bar 切换到替换(replace)模式,输入aboot,然后回车。



在 TeamMembers.json 文件之外还有一个地方使用到了aboot,别担心,选中 CTCardCell.m 的搜索结果,然后按下 Delete,将鼠标移至 replace filed,然后输入about,点击 Replace All,一切完成。整个过程看起来是这个样子的:



<div diycontentbottom"="" class="area" style="word-wrap: break-word; color: rgb(119, 122, 126); font-family: 'Microsoft Yahei', Simsun; font-size: 16px; line-height: 28px; margin: 0px; padding: 0px;">

发布者: weixun732527534
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: