【Mac os 】苹果软件开发工具概述
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
苹果开发工具概述
什么是Xcode?
Xcode是Apple自己开发的,只运行在Mac OS X平台下的IDE。
如果你想真正了解Mac OS X平台上的开发,就应该了解它。
当然,Mac OS X实现了POSIX,固然也支持传统的UNIX编程环境;Eclipse 等Java开发工具也有Mac OS X版。
不过这些,你在Linux或者Windows平台也能体验到。
Xcode也并不神秘,Apple并没有自己特有的编译器(尽管Mac上的Gcc是经苹果修改过的版本),创建项目的时候,Xcode还是会生成并执行一条条的Gcc和ld的命令。
所以如果你有足够的UNIX经验(并且知道到哪里找需要用的Framework),完全可以在命令行编译一个完整的Cocoa应用程序。
其实Xcode提供了很多功能,使你无论在创建项目、设计、修改代码还是编译等各个环节都能收益,恐怕你很难找到一个不使用它的理由。
事实上,自从Mac OS 10.4引入了Universal Binary的概念以后,Xcode几乎成为了大多数Mac开发者的唯一选择。
不用担心的是Xcode是免费的,只要你有一台Mac,随机带的安装盘里就有Xcode,升级是免费的(不过如果你用的是Mac OS 10.5以前版本的OS,你将不能运行Xcode 3.0或以上的版本)。
什么是Interface Builder?
Interface Builder(IB)是Mac OS X平台下用于设计和测试用户界面(GUI)的应用程序。
为了生成GUI,IB并不是必需的,实际上Mac OS X下所有的用户界面元素都可以使用代码直接生成;但IB能够使开发者简单快捷的开发出符合Mac OS X human-interface guidelines的GUI。
通常你只需要通过简单的拖拽(drag-n-drop)操作来构建GUI就可以了。
IB使用Nib文件储存GUI资源,同时适用于Cocoa和Carbon程序。
在需要的时候,Nib文件可以被快速地载入内存。
ByeWindows程序
学习和认识Xcode的最好办法就是学做一个简单的例子,不然,你永远只知道Xcode而不知道怎样去用它。
这样的例子网上很多(外部连接里我也放了两个),英文没问题的读者可以直接去看那些例子。
让我们来看看如何使用Xcode编写一个简单的Cocoa程序(为保证实时性,以下的例子均将采用Xcode 3.0。
使用Cocoa程序作为例子的原因是我希望用一个连贯的例子介绍Xcode和Interface Builder;同时Cocoa程序才能代表Mac OS X编程的特点)。
首先我们需要安装Xcode。
放入Leopard安装DVD,再弹出窗口后,选择“OptionalInstalls->Xcode Tools->XcodeTools.mpkg”,然后根据安装向导完成安装。
安装完成后,Xcode.app可以在
“\Developer\Applications\”下找到。
双击图标,Xcode就应该运行起来了。
接下来我们需要创建一个新项目,点击Xcode的菜单:“File->New Project...”或者使用快捷键
Shift+Cmd+N。
这时会弹出一个Assistant窗口,你需要在这里选择你要建立哪一种Project。
选择“Application->Cocoa Application”,然后点“Next”。
接着你需要给项目取名字,并指定路径。
这里我们把项目叫做ByeWindows。
之后点“OK”,你就会看到Xcode的主窗口了。
图1.1 选择Project类型
我们先看左边“Groups & Files”一栏,注意到代表整个Project的ByeWindows蓝色图标已被选中,此时显示的是整个Project所有的文件,包括源文件和需要生成的Binary文件。
注意到ByeWindows.app可执行文件是以红色显示,意味着这个文件现在还没有生成,但Project对它有一个Reference。
如果改变左边选中的Group,右边的文件列表也会相应的更新。
现在我们在Classes group里新建两个文件:右击选中Classes,Add->New File... 选择Objective-C Class,命名文件名为“AppController”,点OK。
这时两个新文件会被添加到Class group里。
默认情况下.h文件会在一个新窗口中被打开,你可以使用快捷键Command↑切换到.m文件。
你也可以在Groups & Files一栏双击文件,使其在一个新窗口中打开。
在新窗口中编辑代码有时很方便,不过“All-in-One” window的模式或许更受偏爱。
不用急如果你喜欢“All-in-One”,只要先在左边单击选中main.m文件,然后点击Toolbar上的Editor按钮(如果你看不到这个按钮,你需要先通过点击菜单项“View->Customize Toolbar...”来添加该按钮),这样右边的窗口就变成了Editor。
以后你若选择左边的选项,右边Editor的内容会相应更新。
注意Xcode不象VS那样支持Tab,而是在Editor 的上方一栏,你可以通过点击左边那一对小三角来选择近来在Editor里打开过的文件;而点击右边那一对小三角,可以让你选择当前编辑的文件里的Symbols(比如函数名等)。
图1.2 Editor
接下来我们要写点代码:
AppController.h:
@interface AppController : NSObject {
IBOutlet NSButton *button;
}
(IBAction)saySomething:(id)sender;
@end
AppController.m:
#import "AppController.h"
@implementation AppController
(void)awakeFromNib {
NSLog(@"Wake up!");
}
(IBAction)saySomething:(id)sender {
NSLog(@"Hello Mac, Goodbye PC.");
}
@end
这里我们定义了一个class,但还没有生成其Instance。
这时双击Resources->MainMenu.nib,Interface Builder会自动启动。
从Library里drag一个NSObject(蓝色的正方体)到Title是MainMenu.nib的Window 里。
接着在Inspector里选择Identity tap (Command6),更改其Class为AppController(我们刚刚定义的class)。
接着,再从Library里Drag一个Button(任何一种Button都可以)到Title(Window的窗口)。
接下来按住Control的同时,Drag button到AppController,并连接其Action到SaySomething:。
接下来Save 并返回Xcode。
图1.3 拖拽Object
图1.4 指定Object的Class
图1.5 按住Control,从按钮拖拽到App Controller
接下来我们要编译project。
点击toolbar上的“Build”图标,或者使用快捷键CommandB。
编译应该成功,这时注意主窗口的左右下脚各会显示“Build succeeded”和“Succeeded”。
点击后者,你能看到“Build Result”窗口,如果有任何Error或Warning,也会在这里显示出来。
接着运行程序,点击Go图标或者使用快捷键CommandR。
这时你会看到你刚才在Interface Builder里建好的带有一个Button的窗口。
点击Rditor窗口上方那个小的标有Gdb的图标,你可以看到Wake Up!的Log消息。
点击窗口中的Button,你可以看到“Hello Mac, Goodbye PC.”的Log消息。
这里稍微解释一下这个程序工作的原理:首先AppController是通过Nib文件来实例化的,AwakeFromNib Method会在程序运行起来后自动被调用,所以才有了第一条Log消息。
此外我们在IB里建立了Button到saySomething:的联系,而每当Button被按下时,其都会向其Target (这里是AppController)发送一个消息(这里是saySomething:),所以每当我们按一下Button,都会有新的一条Log消息。
接下来我们要试一下如何调试。
首先我们得设一个Breakpoint。
这在Xcode里面最简单不过了,注意在Editor窗口的左边,有一栏显示着行号,在数字5的那里点一下...噢,一个Breakpoint就这样诞生了。
要改变Breakpoint的位置,我们只需要用鼠标上下拖动它;怎样去掉它呢?轻轻用鼠标的把它拖出来,放开鼠标,就好了。
如果你在蓝色的Breakpoint上点一下,它会变成灰色,意味着它被Disable了。
好,现在保证第5行有一个蓝色的Breakpoint,然后我们点击菜单项“Run->Debug”,这时程序会在我们设的Breakpoint处停住。
这时把鼠标放在不同的变量上,可以看到变量的值。
同时注意,Editor的上方多出了一排用于调试的工具。
点击最右边有“Gdb”字样的图标,我们可以再次看到Console窗口。
把Console窗口保留在一边,这时点击左起第三个按钮(Step Over),Console里面会再次显示出“Hello World”;这时点击左起第二个按钮(continue),由于我们没有其他的Breakpoint了,程序应该会正常终止。
更多关于Xcode和Interface Builder
在Xcode里你可以开发几乎所有可以在Mac OS X上运行的(从命令行的C程序到J2EE程序)程序。
Xcode也提供了许多相应template,大大节省了配置project的时间。
Xcode也支持对多种文件的编辑,其中包括Core Data data model文件的编辑器,使你能够像画Entity Relation Diagram一样的编辑Data Model。
同时Xcode也整合了对Version Control软件的支持(支持CVS, SVN, Perforce)。
另外值得一提的是Xcode的Refactor功能,它可以让你方便的更改变量的名称,甚至更改一个类的基类,而不用你自己手动的去搜索和替换。
Interface Builder方面,值得一提的是对Cocoa Binding的支持。
这里简单提一下什么是Binding。
通常,如果GUI需要呈现某些数据,你总需要写不少所谓“胶水”代码。
而Mac OS 10.3引入了binding的概念,使得这些Cocoa程序里这些胶水代码的数量可以大副减少:你只需要Bind GUI部分的某些Properties 到Data Model上即可。
在IB 3.0的Inspector的第四个Tab里(快捷键Command4),你可以找到当前选中的GUI元素的可以用于Binding的Properties。
外部联接
Xcode User Guide
Interface Builder User Guide
Learn Cocoa
First Cocoa Application
Intro to Bindings
在Mac OS X上你可以使用Gprof这样的UNIX工具用于测试程序性能。
当然,Apple也有自己的Profiling Tools,用得比较多的是Shark。
10.5里还引入了一个基于DTrace的叫Instruments的程序。
Instruments
自Xcode 3.0开始,苹果提供了一种非比寻常的方法来调试应用程序,这就是Instruments。
就像它的名字一样(Instruments意为乐器),Instruments提供了一种像苹果的音乐创作软件GarageBand一样的带有时间线的界面,把应用程序的各种性能指标像乐谱一样可视化地记录下来。
Instruments能记录整个应用程序的运行情况,并将所有信息按照时间顺序并排地呈现出来,让你可视化的对比分析各种“乐器”(分析工具)——CPU使用率、网络、文件活动、内存分配等。
由于这些信息的显示都按照时间对齐,你可以很快速的定位应用程序运行过程中的某个片段,比如看看上一个CPU占用高峰的时候磁盘正在做什么。
如此全局观的审视应用程序运行状态,能帮助您更好的理解各种因果关系,提高软件性能。
Instruments借助内建于操作系统中的万能辅助(Universal Access)功能,能够记录下应用程序运行过程中的用户交互操作,然后便可一遍遍地轻松重复同样操作。
这样你就能随时为应用程序创建某种特定的测试。
在Instruments中记录下应用程序的行为,修改代码,再返回重测看看修改效果。
在模版中运行应用程序能让Instruments可视化地并排比对每次运行状态,从而清晰的获知修改代码带来的性能以及内存开销的变化。
实际上多数Instruments分析工具都是使用DTrace来实现的,它是系统中全局的分析工具,能全面获取上层应用程序行为到底层操作系统内核的系统活动。
你也能创建自己的分析工具,使用Instrument Builder来创建定制的强大分析工具。
Instruments中已经包含了以下六类的分析工具:
• 用户事件:追踪用户交互动作的精确事件,如鼠标点击等。
• CPU和进程:监视系统活动、采样、负载图表和线程。
• 内存:跟踪垃圾回收、对象分配和泄露。
• 文件活动:监视磁盘活动,读写和文件锁。
• 网络活动:衡量并记录网络流量。
• 图形:解释OpenGL驱动的内在工作。
Shark
Shark可能是Mac开发者最喜欢使用的Profiling Tool了。
Shark的User Guide上写到:“默认状态下,Shark通过定期的Interrupt每个处理器并对当前进程、线程、指令地址和函数 Callstack进行取样来创建Profile”。
这意味着你并不需要对程序进行任何的修改或重编译就能使用Shark。
并且,Shark对程序性能的影响很小,因为“所有的取样工作都在Kernel里完成并且是建立在硬件Interrupts的基础上”。
因此,Shark 对于找出程序中的“Hot-Spot”特别有帮助。
一般情况下,你只需要使用Shark的Time Profiling功能:运行你要测试的程序,然后运行Shark,选择你的应用程序所在的Process,然后按Start按钮开始取样。
当你要结束取样时,按下Stop按钮,这时Shark会生成一个.mshark文件,里面有所有的Profiling数据。
直接用Shark打开这个文件你就能开始分析数据了。
Gprof
Shark虽然方便易用,但它并不能告诉你同一个函数一共被Call了几次和所有的Caller是谁这样的信息。
为了得到这些信息,你需要使用到如Gprof这样的工具。
Gprof的使用比较复杂,简单的来说,你需要到Xcode的编译器设定,打开“Generate Profiling Code”设置。
Gprof会在你的代码里添加一些额外的代码来收集信息,所以在你改了Xcode设置以后,你需要重新编译。
注意,如果你的应用程序来自多个Project,你需要更改所有你感兴趣的Project的编译设置。
接下来,在重新编译了以后,运行你的程序,完成后正常的退出程序(不然Gprof不一定能正确地生成Profiling 文件),Gprof会在可执行文件所在的文件夹里建立一个Gmon.out文件。
最后,你需要到Terminal里运行Gprof命令来获取可供人分析的文件。
外部联接
• Optimizing Your Application With Shark 4
• GNU gprof
• Instruments User Guide
Quartz Composer
Quartz Composer是Mac OS 10.4引入的图形开发工具,QC使你能够方便地使用OS X各个级别的图形技术:你可以使用QC方便的整合Cocoa, Quartz 2D, Core Image, OpenGL和Quick Time技术。
一个QC Composition是由许多Patch和其联系构成的。
每一个Patch如同一个函数,有Input和Output。
Input可以来自于你输入的参数,也可以来自其他Patch的Output。
QC自带有许多已经设计好的Patches,有用于捕获鼠标操作的,有用于处理图片的Filter,或是用于将内容渲染到屏幕上的Render等等。
图3.1Patches
将不同的Patch进行奇妙的组合,你会得到意向不到的效果。
实际上已有不少DJ/VJ使用QC制作了很酷的根据音乐节奏变化的QC composition。
你可以使用Quick Time直接播放一个Composition文件(.qtz),也可以把其作为一个屏幕保护程序。
当然,你也可以使用QCView或者QCLayer将其整合到你的Cocoa应用程序中去。
外部联接
• Quartz Composer User Guide
• 未来派図画工作
Text Editors
尽管Xcode已经提供了一个相当不错的Build-In的文本编辑器,但你可能还是偏爱其他的编辑器。
在Mac OS X下,你能找到很多其他很棒的编辑器。
首先,如果你是一个UNIX程序员,你依然可以使用你最爱的Vi或者Emacs。
你可以在Terminal下直接输入Vi或Emacs进入没有图形界面的版本。
如果你是Emacs爱好者,你也可以使用Aquamacs Emacs或者Carbon Emacs两个不错的带图形界面的移植版本。
不过,目前Mac OS X上比较火的一个编辑器叫TextMate,这是一个Native Cocoa程序,拥有很多很Cool的功能。
特别的,TextMate有很多专门针对Cocoa的Snippet(比如在.mm文件里你只用写Property 的名字,然后按Tab键,就可以自动生成相应的Setter和Getter方法),你可以因此节省不少敲代码的时间。
同时由于使用了Bundler, TextMate是可扩展,目前已经有许多开发者为其开发了支持各种语言的Bundle。
因此,如果你主要工作在Mac OS X平台,同时敢于学习新的快捷键和操作方式,TextMate不失为一个很好的选择。
外部联接
• Aquamacs
• Carbon Emacs
• TextMate
网页相关开发工具
Apple有自己的一套有很长历史的叫做WebObjects的框架,其支持Ajax,J2EE等技术。
全球最大的在线媒体商店iTunes Music Store就是使用WebObjects技术开发的。
尽管WebObjects和Java有着密不可分的联系,开发WebObjects应用程序的最佳环境仍然是Xcode。
网页开发方面,Apple比较偏爱的是Ruby-on-Rail,Dojo这样比较新的技术,对其支持也比较好。
工具方面,除了Adobe的软件以外,Mac也有像Coda(去年Apple Design Award获奖作品)这样简单易用的网页开发工具。
外部联接
• Getting Started with WebObjects
• Using Ruby on Rails for Web Development on Mac OS X
• Coda
其他开发工具
前面也提过,Mac OS X能找到大多数跨平台的开发工具,比如Java方面有Eclipse, NetBeans。
数据库方面也有Oracle、MySQL、FileMaker等等数据库。
这些工具的使用方法与在其他平台类似,这里不做具体介绍。
在脚本语言方面,Mac OS X支持传统的UNIX脚本语言,同时Apple也有自己的Apple Script语言。
另外,还有F-Script这样专门针对Cocoa的脚本语言。
另外很值得一提的是一个叫Unity的用于游戏开发的IDE。
Unity支持从Maya, 3DS Max, blender等等主流三维软件里导出的文件格式,使用改进过的JavaScript,有着完整的工作流程。
而且可以编译适用于Mac, Window甚至网页的游戏或其他交互式程序。
外部联接
• F-Script
• Unity。