如何让Xcode识别自定义文件扩展名并进行Objective-C语法高亮?

40

我想让Xcode 4识别自定义文件扩展名(例如*.lx)以进行Objective-C语法高亮和缩进。 如何使该工具自动执行此操作?


我还不知道如何自动完成这个操作,但是你可以在“文件检查器”面板中告诉Xcode以这种方式识别文件。 - james_womack
3个回答

33
Xcode根据文件的统一类型标识符来确定其在用户界面中的表示方式。据我所知,不可能向现有UTI添加其他文件扩展名标签,但可以声明符合您想要映射到的类型的新UTI。系统将使用指定的文件扩展名与您的新UTI相关联,并通过符合性,Xcode和每个其他UTI感知应用程序将识别文件作为映射类型的源代码。
您可能需要考虑在何处声明新的UTI。例如,如果此类型的文件是由工具创建的,则该工具的捆绑包将是最合适的位置。如果没有更好的选择,可以创建一个存根应用程序包并在其中声明新的UTI。
  1. 在Xcode中创建一个新的Cocoa应用程序项目。
  2. 在项目设置中,选择应用程序目标,然后选择“Info”选项卡。
  3. 创建一个新的导出UTI。 UTI definition example
  4. 使用反向DNS表示法为您控制的域名设置唯一名称的标识符字段。例如:com.yourdomain.objective-c-source
  5. 将Conforms To字段设置为要映射到的UTI,例如public.objective-c-source。您可以通过浏览system-declared UTIs列表或在Xcode的Info.plist中导出的列表来找到它们。
  6. 将Extensions字段设置为您想要与新UTI关联的逗号分隔的扩展名列表。
  7. 通过按回车键或将焦点移动到不同的字段来提交对最后一个字段的更改。
  8. 构建和运行应用程序以将其注册到启动服务。
  9. 重新启动Xcode。
Xcode现在应该使用适当的语法高亮来处理指定扩展名的文件。
如果这不起作用,请检查构建应用程序的Info.plist,确保所有预期的信息都没有尾随空格。您还可以使用lsregister检查UTI是否已注册:
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump

搜索输出结果以查找您的UTI标识符,并验证其是否存在且处于活动状态。

这个可行!对于C++的.ipp文件,我使用public.c-plus-plus-source作为标识符名称。 - Peter Ehrlich
这个可行!我使用了 .ejs 文件将其与 HTML 文件关联起来。 - KamyFC
1
对于 .leaf Vapor 文件扩展名,+1000 对我也起作用。(符合 -> public.html) - Anand Suthar
这看起来很复杂,但这是唯一可行的方法。以下是同一方法的更多图示说明: https://dev59.com/8J7ha4cB1Zd3GeqPnbaU - Steve

22
在您的项目中,Xcode在“属性检查器”(“实用程序”右侧边栏中最左边的选项卡)中为文件提供了“类型”字段。

identity and type settings

正如您在上面看到的,我将我们项目的Fastfile设置为被识别为Ruby脚本——尽管它没有预期的.rb扩展名。这样可以得到预期的语法高亮(使用我的自定义配色方案)。

enter image description here

注意:只有当文件被添加到项目中的一个组中(而不是文件夹引用中)时,此方法才有效。

fastlane group

这可能不是最理想的,但Xcode无法保存未在项目文件中明确跟踪的文件的属性。 由于设计上的原因,文件夹在Xcode项目中没有其内容的条目,因为它应该是动态的。


谢谢,这正是我所需要的。 - Eugene Tartakovsky
谢谢Brian,这正是我所需要的,应该被接受为答案。 - Jason L Perry

8
在Xcode中,当您的文件在编辑器中处于活动状态时,您需要转到“编辑”菜单->“语法着色”->“Objective-C”选项。这将为文件应用Objective-C语法着色。无论文件扩展名如何,我都已经使用纯文本文件成功实现了此功能。此方法还似乎适用于自动缩进。

10
我希望能找到一种自动语法高亮的方法,而不是手动操作。 - user1175914
这个功能可以自动在我修改的文件中进行语法高亮。或者您是指更改“文件类型的默认”语法高亮,以便该类型的任何文件都具有这样的高亮?如果是这样,我找到了这个解决方法...虽然没有测试过:http://lists.apple.com/archives/xcode-users/2007/Dec/msg00679.html - pontidm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接