如何使XCode将自定义文件扩展名识别为Objective-C以进行语法突出显示?

use*_*914 34 xcode objective-c

我想让XCode 4将自定义文件扩展名(例如*.lx)识别为Objective-C,用于语法高亮和缩进.如何让工具自动执行此操作?

Mat*_*ens 28

Xcode根据文件的统一类型标识符确定如何在其用户界面中表示文件.据我所知,无法向现有UTI添加其他文件扩展名标签,但您可以声明符合要映射到的类型的新UTI.然后,系统将指定的文件扩展名与您的新UTI相关联,并通过一致性Xcode与每个其他UTI感知应用程序将文件识别为映射类型的源代码.

您可能想要考虑向新UTI声明的位置.例如,如果工具正在创建此类文件,则该工具的包将是最合适的位置.如果没有更好的替代方案,您可以创建存根应用程序包并在那里声明新的UTI:

  1. 在Xcode中创建一个新的Cocoa Application项目.
  2. 在项目设置中,选择应用程序目标,然后选择"信息"选项卡.
  3. 创建一个新的导出UTI. UTI定义示例
  4. 对于您控制的域,使用反向DNS表示法将标识符字段设置为唯一名称.例如,com.yourdomain.objective-c-source.
  5. 将Conforms To字段设置为要映射到的UTI,例如public.objective-c-source.您可以通过浏览系统声明的UTI列表或在Xcode的Info.plist中导出的UTI列表来找到它.
  6. 将Extensions字段设置为要与新UTI关联的以逗号分隔的扩展列表.
  7. 通过按返回或将焦点移动到其他字段,将更改提交到最后一个字段.
  8. 构建并运行应用程序以使用Launch Services注册它.
  9. 重启Xcode.

Xcode现在应该对具有指定扩展名的文件使用适当的语法突出显示.

如果这不起作用,请检查构建的应用程序的Info.plist,以确保所有预期信息都没有任何尾随空格.您还可以使用以下命令检查UTI是否已注册lsregister:

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump
Run Code Online (Sandbox Code Playgroud)

在输出中搜索UTI的标识符,并验证它是否存在且处于活动状态.


Bri*_*tle 14

对于项目中的文件,Xcode在"属性检查器"("实用程序"右侧边栏中最左侧的选项卡)中有一个"类型"字段:

身份和类型设置

正如您在上面所看到的,我将我们的项目设置Fastfile为被识别为Ruby脚本 - 尽管缺少预期的.rb扩展.产生预期的语法高亮(使用我的自定义颜色方案):

在此输入图像描述

注意:这仅适用于将文件添加到组中的项目(而不是文件夹引用内)的情况:

fastlane集团

这可能不太理想,但Xcode无法保留未在项目文件中明确跟踪的文件属性.根据设计,文件夹在Xcode项目中没有其内容条目,因为它意味着是动态的.


小智 8

在Xcode中,当您的文件在编辑器中处于活动状态时,您将转到编辑器菜单 - >语法着色 - >目标-C

这将对文件应用objective-c语法着色.无论扩展名如何,我都使用纯文本文件.

这似乎也适用于自动缩进

  • 我正在寻找的是一种自动语法高亮的方法.不是手动的. (10认同)