资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2011-5-27,#,使用,Emacs,开发,iPhone,应用程序的教程,前言,环境设定,设定,XCode,的外部编辑器,Emacs,中管理,Objective-C,文件,编译与执行,查找帮助,扩展设置,打开头文件,补全,安装,设 置,安装,设 置,Text macros(,模板,),安 装,设 置,自动插入匹配的括号,缩 进,选 择矩形区,域,语法检查,启动优化,通常,在,Mac,下开发,Cocoa,应用程序或是,iPhone,应用程序的时候使用的是,XCode,,但是习惯了,Emacs,的人也许已经不习惯这样的,IDE,了。比如本人,自从接触,Emacs,以后,基本上所有的程序,博客,工作报告等都是用它来完成的。这里,我将给大家介绍在,Emacs,下开发,iPhone,应用程序的方法,也许试过之后你也会喜欢上它的(在,windows/linux,下开发的用户也可以试试,一切都可以自动化的完成,参考,这里,和,这里,。,前言,设定,XCode,的外部编辑器,首先将缺省的编辑器由,XCode,更改为,Emacs,。这样一来,双击,XCode,的源文件后,将用,Emacs,打开。,在环境设定,-,文件类 型,-,file,-,text,-,sourcecode,-,sourcecode.c,-,外部编辑器,-,其他中选择,Emacs.app,。,必须选择其他。最初,emacs,由,Terminal,内启动。,这里,工程文件还是由,XCode,打开的。,iPhone,开发,环境设定,利用,Emacs,开发,Objective-C,语言程序的时候,需要打开,objc-mode,。,首先在,/.emacs.el,中设定关联,objc,语言的文件后缀名,.m,、,.mm,、,.h,。,(add-to-list auto-mode-alist(.mm?wind_phpcode_1quot;.objc-mode),(add-to-list auto-mode-alist(.hwind_phpcode_1quot;.objc-mode),但 是,后缀名为,.m,的文件除了,Objective-C,以外,,matlab,中也在使用,后缀名为,.h,的文件,C/C+,中也被应用。如果只是想这样单纯的设置,应该还是会带来一些不便的。不过不要紧,在,Emacs22,以后,为了解决这个问题可以设定,magic-mode-alist,。它可以解析具体文件中的内容确定具体的,mode,。,这里,判断文件行头 是否有,implementation,、,interface,、,protocol,,如果有,就设定,objc-mode,。,(add-to-list magic-mode-alist(.|n)*nimplementation.objc-mode),(add-to-list magic-mode-alist(.|n)*ninterface.objc-mode),(add-to-list magic-mode-alist(.|n)*nprotocol.objc-mode),Emacs,中管理,Objective-C,文件,这里使用,xcodebuild,命令行实现命令行的编译方式,你也可以使用这里的方法,使用,gcc&Makefile,。,编译可以使用下面的命令:,执行可以通过,AppleScript,来实现。,1,tell application Xcode to activate,tell application System Events,tell process Xcode,key code 36 using command down,end tell,end tell,iPhone,开发之,编译与执行,这里直接使用了,key code,。如果你自定义了,Mac,的,key code,话,就不能正常工作了。这里使用的,key code,的意思如下:,using,意 思,Unicode,菜单上的记号,command down,命令键,0 x2318?control down,控制键,0 x2303?option downalt,键,0 x2325?shift downshift,键,0 x21E7?,以及键,key codeesc53tab48space49return36delete51left arrow123right arrow124down arrow125up arrow126,iPhone,开发教程,所以,这里的例子就是,Ctr+return,。然后将该,AppleScript,嵌入到,Emacs Lisp,中。(这里只针对,Carbon Emacs,或,Cocoa Emacs,有效),(defun xcode:buildandrun(),(interactive),(do-applescript,(format,(concat,tell application Xcode to activate r,tell application System Events r,tell process Xcode r,key code 36 using command down r,end tell r,end tell r,),iPhone,开发教程,然后使用,M-x xcode:buildandrun,来执行。或者绑定下面的快捷键。,(add-hook objc-mode-hook,(lambda(),(define-key objc-mode-map(kbd C-c C-r)xcode:buildandrun),),iPhone,开发教程,开发程序的时候经常会用到帮助文档,类似,windows,下的,MSDN,。在,Mac,下利用命令行形式检索帮助时用,docsetutil,命令。比如下面的方法:,/Developer/usr/bin/docsetutil search/Developer/Platforms/iPhoneOS.platform/Developer/Documentation/DocSets/com.apple.adc.documentation.AppleiPhone3_1.iPhoneLibrary.docset-query word,Emacs,中利用这一命令,可以使用,xcode-document-viewer.el,。运行的时候需要,emacs-w3m,。可以在 这里下载,w3m,,按照下面的方法安装。,iPhone,开发教程,查找帮助,curl-O http:/ xvfz gc.tar.gzcd gc./configuremakesudo make installcd.tar xvfz w3m-0.5.2.tar.gz./configuremakesudo make install,这之后,安装,emacs-w3m,到,.emacs.d/lisp,下。,cvs-d:pserver:anonymouscvs.namazu.org:/storage/cvsroot co emacs-w3mcd emacs-w3mautoconf./configure-with-lispdir=/.emacs.d/lisp/w3m-datarootdir=/.emacs.d/share-with-icondir=/.emacs.d/share/iconmakemake installmake install-icons,iPhone,开发教程,cd/.emacs.d/lispcurl-O http:/www.emacswiki.org/emacs/download/anything.elcurl-O http:/ http:/ w3m w3m Interface for w3m on Emacs.t),(require xcode-document-viewer),(setq xcdoc:document-path/Developer/Platforms/iPhoneOS.platform/Developer/Documentation/DocSets/com.apple.adc.documentation.AppleiPhone3_1.iPhoneLibrary.docset),(setq xcdoc:open-w3m-other-buffer t),(add-hook objc-mode-hook,(lambda(),;,用,C-c w,来检索文档,(define-key objc-mode-map(kbd C-c w)xcdoc:ask-search),打开头文件,比如像打开,#import,处的头文件时,可以使用,Emacs,中自带的,ffap,(,find file(or url)at point,)。,快捷键是,C-x C-f,,在光标处的头文件执行它,将打开对应的头文件。,(ffap-bindings),;,设定搜索的路径,ffap-c-path,;(setq ffap-c-path,;(/usr/include/usr/local/include),;,如果是新文件要确认,(setq ffap-newfile-prompt t),;ffap-kpathsea-expand-path,展开路径的深度,(setq ffap-kpathsea-depth 5),iPhone,开发教程之,扩展设置,另外,由,.h,文件切换到,.m,文件、或者由,.m,文件切换到对应的,.h,文件、可以使用,ff-find-other-file,。,如下设置,使用,C-c o,来切换文件。,(setq ff-other-file-alist,(.mm?wind_phpcode_9quot;(.h),(.ccwind_phpcode_9quot;(.hh.h),(.hhwind_phpcode_9quot;(.cc.C),(.cwind_phpcode_9quot;(.h),(.hwind_phpcode_9quot;(.c.cc.C.CC.cxx.cpp.m.mm),(.Cwind_phpcode_9quot;(.H.hh.h),(.Hwind_phpcode_9quot;(.C.CC),(.CCwind_phpcode_9quot;(.HH.H.hh.h),(.HHwind_phpcode_9quot;(.CC),(.cxxwind_phpcode_9quot;(.hh.h),(.cppwind_phpcode_9quot;(.hpp.hh.h),(.hppwind_phpcode_9quot;(.cpp.c),(add-hook objc-mode-hook,(lambda(),(define-key c-mode-base-map(kbd C-c o)ff-find-other-file),),在,Emacs,中也能完成,Objective-C,的补全功能。设立,我们使用,auto-complete,、,company-mode,、,ac-company,。,iPhone,开发教程:,补全,cd/.emacs.d,mkdir lisp,cd lisp,curl-O http:/ http:/ http:/ http:/ http:/ load-path default-directory),(if(fboundp normal-top-level-add-subdirs-to-load-path),(normal-top-level-add-subdirs-to-load-path),;,加载,(require auto-complete),(require auto-complete-config),(require ac-company),设 置,(global-auto-complete-mode t),;ac-compan
展开阅读全文