`
啸笑天
  • 浏览: 3465241 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

使用Uncrustify在Xcode中格式化Objective-C代码

 
阅读更多

from:tinyfool的新杂志

Xcode是开发iOS应用和Mac OS应用的必备工具,但这个工具的辅助功能相对于Eclipse之类的IDE来说,还是比较少,在Eclipse里只要按Ctrl+Shift+F,就可以将Java代码格式化得非常好看。而在Xcode里,只有Re-Indent(Ctrl+I)这一个调整缩进的功能,显然不够用。

如果想要完成完备的代码格式化,得要借助Uncrustify这样的工具。更进一步,我们用Automate配置一个针对Text的Service,再加上快捷键,就可以在Xcode里间接实现和Eclipse同样效果的代码格式化功能了。

首先安装Uncrustify工具。安装的方法很多,推荐用Homebrew来安装。如果机器上没有Homebrew,先用这条命令安装:

/usr/bin/ruby -e "$(curl -fksSL http://u.aodaren.com/homebrew)"

安装好Homebrew后,用这条命令安装Uncrustify:

brew install uncrustify

详细的Automate配置步骤可以参考这篇文章,如果不想自己配置,也可以直接下载已经配置好的workflow包,复制到~/Library/Services/,并解压就可以了:

mv Uncrustify-Objective-C.workflow.tar.gz ~/Library/Services/
cd ~/Library/Services/
tar zxvf Uncrustify-Objective-C.workflow.tar.gz

下载针对Objective-C语言的Uncrustify配置文件,移动到 ~/ 目录,并更名为 .uncrustify_obj_c.cfg,注意目标文件名前面有个 .:

mv uncrustify_obj_c.txt ~/.uncrustify_obj_c.cfg

如果上面已经顺利完成,那么现在到Xcode里选中一段代码,点右键,在Services里面应该已经有一个Uncrustify Objective-C服务了。选择后,即可将代码格式化。当然,如果每次都点鼠标显然太麻烦,下面来配置快捷键。

点屏幕左上角的苹果图标,选 System Preferences – Keyboard – Keyboard Shortcuts – Services,在Text分区里,找到刚添加的服务Uncrustify Objective-C,给这个服务加上快捷键。注意不要和Xcode里其它快捷键冲突,推荐设置为:Opt+Cmd+字母O。

这样以后在Xcode里,先用Cmd+A全选代码,再用Opt+Cmd+O来格式化代码。整个效果和Eclipse基本上差不多。

最后,如果对格式有不同的需求,还可以修改cfg文件里的设置,每个选项都有详细的说明,这里就不再赘述了。

分享到:
评论
1 楼 啸笑天 2013-06-14  
Code Formatting in Xcode 4

Automatic indentation and cleanup of code seems to have improved in Xcode 4 (Editor menu – Structure – Re-Indent) but it still doesn’t offer full code reformatting or the flexibility of a tool like Uncrustify. If you’re used to having external code formatting in Xcode available you might be disappointed to find the User Scripts menu missing in Xcode 4.

Thankfully Tony Arnold demonstrated one possible solution with his Xcode 4 Uncrustify Automator Services. Here’s how you can get your external code formatting tool up and running again with Xcode 4.

Install Uncrustify (port install uncrustify, brew install uncrustify, or directly from http://uncrustify.sourceforge.net/)

Open Automator and create a new Service.
Creating a Service in Automator
Creating a new Automator Service

Inputs to Automator Services are more limited than the options available in Xcode 3′s User Scripts. To reformat selected text we can still pass the input from Xcode to a Run Shell Script action.

1
uncrustify -l OC -q -c ~/.uncrustify/uncrustify_obj_c.cfg
The "uncrustify selected text" service in Automator
Uncrustify Selected Text

To reformat open files we need to use AppleScript to get the paths to those files so that we can pass them to Uncrustify. I wasn’t able to find a reliable way to select only the currently visible source file so I settled on the following script to reformat all open and modified source files instead.

1
2
3
4
5
6
7
8
tell application id "com.apple.dt.Xcode"
    repeat with current_document in (source documents whose modified is true)
        set current_document_path to path of current_document
        set raw_source to text of current_document
        set formatted_source to do shell script "uncrustify -l OC -q -c ~/.uncrustify/uncrustify_obj_c.cfg -f " & current_document_path
        set text of current_document to formatted_source
    end repeat
end tell
The "uncrustify modified documents" service in Automator
Uncrustify Modified Documents

Open Xcode, find the new Services available in the “Xcode” menu. Use the Services Preferences to bind these Services to keyboard shortcuts to your liking.
The Xcode and Services menus
Services available in Xcode

Enjoy cleaner code.

相关推荐

    Objective-C基础教程(入门教程).pdf

    18. Objective-C与C/C++的混合编程:Objective-C与C语言兼容,因此可以轻松地在Objective-C程序中使用C代码。同时,它也能够与C++代码进行交互,但需要遵守特定的规则和约定。 19. Import指令:在Objective-C中,@...

    《Objective-C基础教程》中文版(含源代码)

    1. **Objective-C简介**:介绍Objective-C的历史、特点和它在Apple生态系统中的地位,解释为什么它是iOS开发的首选语言。 2. **面向对象编程基础**:讲解类、对象、继承、多态和封装等面向对象编程的核心概念,帮助...

    基于Mac OS+Xcode 3.0的Objective-C工程,封装好的NSURLDownload网络下载类

    在本教程中,我们将深入探讨如何在Mac OS上使用Xcode 3.0和Objective-C实现基于NSURLDownload的网络下载功能。 首先,NSURLDownload是Foundation框架的一部分,它允许开发者在后台线程中异步下载文件。这个特性对于...

    Objective-C代码风格指南

    这样做可以为在Swift中使用Objective-C代码提供更多类型安全信息。 总之,Objective-C代码风格指南是编写高质量Objective-C代码的参考,其内容涉及了代码编写的方方面面,旨在提高代码的可读性、可维护性和效率。...

    Objective-C编程全解最新版.pdf.zip

    12. **Interface Builder**:Xcode中的Interface Builder允许开发者通过拖放方式设计UI,与代码结合使用,实现快速原型和可视化布局。 13. **Storyboard**:在iOS开发中,Storyboard文件用于组合多个视图控制器和...

    Objective-C程序设计 第6版 pdf

    Objective-C是一种强大的面向对象编程语言,它在Apple的Mac OS X和iOS操作系统中扮演着核心角色,用于构建高质量的应用程序。《Objective-C程序设计 第6版》是学习和深入理解这种语言的重要参考资料,旨在帮助开发者...

    Visual Studio 2015 编译 objective-c

    由于Objective-C通常与C++混合使用,可能需要在项目设置中指定编译器选项,以及将Objective-C编译器与Visual C++的链接器进行适配。 5. 编译和链接代码。使用Visual Studio的构建系统编译Objective-C代码,并链接...

    Objective-C程序设计(第4版)(全球最畅销Objective-C编程书籍)

     《Objective-C 程序设计(第4版)》已经为iOS 5和Xcode4.2中的重大变更做了全面更新,最大的改动是引入了自动引用计数(ARC),并详细说明了如何在Objective-C编程过程中使用ARC提升和简化内存管理。

    Objective-C在XCode上调用C++的代码

    本篇文章将详细介绍如何在Xcode项目中集成C++,使得Objective-C代码能够顺利调用C++的代码。 首先,我们需要创建一个新的Xcode项目。选择"Single View App"模板,确保"Use C++ Language Dialect"设置为最新的C++...

    objective-c基础教程

    - **直接嵌入C代码**: 可以直接在Objective-C代码中嵌入C代码,无需任何额外的转换或封装。 - **封装C/C++库**: 通过Objective-C的桥接机制,可以轻松地将现有的C/C++库封装成Objective-C的类或框架,从而方便地在...

    Objective-C基础教程源代码 Learn objective-C on the Mac Mark Dalrymple著书

    Objective-C是一种强大的面向对象编程语言,特别是在Apple的iOS和macOS平台上广泛使用。它是C语言的超集,融入了Smalltalk的关键概念,如消息传递和动态类型。《Learn Objective-C on the Mac》由Mark Dalrymple撰写...

    Objective-C专业书籍汇总pdf

    此外,可能会对比两种语言的类系统,解释如何在Objective-C中使用C++代码,以及如何在C++项目中集成Objective-C。 通过阅读这三本书,读者将全面了解Objective-C的各个方面,从基础语法到高级特性和最佳实践。无论...

    在同一个项目中使用Swift 和 Objective-C

    2. **处理Swift使用的Objective-C代码**: 如果你的Swift代码中使用了一些自定义的Objective-C代码,那么在导入Swift Generated Header之前,需要首先在Objective-C文件中导入这些自定义Objective-C代码的头文件。...

    Xcode 使用技巧 Objective-C学习之路 iphone

    - 对于习惯使用快捷键的用户,可以使用`Ctrl+A`全选文本,然后使用`Ctrl+X`和`Ctrl+V`来进行复制粘贴,Xcode会在粘贴过程中自动格式化代码。 - **代码缩进**: - 对于单行代码,可以直接使用`Tab`键进行缩进。 -...

    在Objective-C中使用C++

    Objective-C是C语言的超集,这意味着任何有效的C代码都可以在Objective-C中使用。由于C++也是C的超集,因此Objective-C也能够直接支持C++代码。开发者可以在Objective-C类中嵌入C++代码,反之亦然。 2. **命名空间...

    学习Objective-C: 入门教程

    此外,Objective-C还支持.mm文件类型,允许在Objective-C代码中混合使用C++代码,这对于需要高性能计算的场景非常有用。 #### 示例代码分析 在Objective-C中定义一个类,如MyClass,通常包含以下结构: 1. **类的...

    Learning Cocoa With Objective-C

    《Learning Cocoa With Objective-C》是一本专为初学者设计的Cocoa编程教程,它深入浅出地介绍了如何在苹果的Mac OS X和iOS平台上开发应用程序。这本书以其丰富的图文并茂的讲解方式,使得复杂的编程概念变得易于...

    objective-c的一些代码

    学习Objective-C的同时,开发者还需要了解Xcode集成开发环境(IDE)的使用,以及Apple的开发工具如Interface Builder来设计用户界面。此外,理解Model-View-Controller (MVC)设计模式对于构建iOS应用至关重要,它将...

    Objective-C基础教程 中文 PDF 清晰版 [31M]

    本书结合理论知识与示例程序,全面而系统地讲述Objective-C编程的相关内容,包括Objective-C在C的基础上引入的特性和Cocoa工具包的功能及其中的框架,以及继承、复合、源文件组织等众多重要的面向对象编程技术。...

Global site tag (gtag.js) - Google Analytics