我的iOS项目有一个强制要求,开发人员制作的每个类都必须以“SYV”作为前缀。我必须添加构建设置,如果任何类不遵循此约定,则应在Xcode中将其显示为警告。

我不确定从哪里开始甚至可能。请指教。

最佳答案

这是可能的,但需要一些我不确定是否值得的工作。项目中将有几节课?如果这不是一个大项目,则应该执行手动代码审查。但是,如果您想遵循自己的计划,可以执行以下操作:

方法1:将所有类放在一个文件夹(或子文件夹)中。假设您在每个文件中只放置一个类,并且该类是以文件命名的,那么您可以使用一个非常简单的脚本来验证所有文件名(如果要具有某种结构的话,可以递归地)。

方法2:使用Xcode Build Rules:为*.m文件指定一个新规则(如果需要,还可以指定*.h)。由于这会覆盖默认规则(编译文件),而且我不知道随后再执行默认规则的简单解决方案,因此建议您创建一个仅用于验证的额外目标,而无需进行编译。然后,您需要一个自定义脚本来解析源文件,找到类@implementation(假设实现了每个类,我看不到直接检查@interface的原因,但是我在这里可能会遗漏某些东西)并验证其名称。您可能可以摆脱一些正则表达式,或者使用libclang完全解析文件。如果您在从构建规则脚本调用的基于C的(C,C++,Objective-C等)命令行工具中实施验证,则可以使用此工具生成在Xcode中显示的警告:

// casts are only added as hints to the types used
printf("%s:%d: warning: %s", (string)symbolName, (int)lineNumber, (string)text);

我还没有找到直接从bash脚本生成警告的方法。有关构建规则的更多信息,请参见here

方法3: 2 相似,但是除了覆盖构建规则之外,您还可以通过定义addBuild Phase一个在编译期间执行的脚本。这里的挑战是找到目标使用的所有相关类。您可以手动检查 .pbxproj file以获取该信息(不建议这样做,但是不错的练习),也可以使用mod-pbxproj(Python)或Xcodeproj(Ruby)之类的库。然后按照方法2进行验证。

方法4:您还可以通过添加编译器标志和代码来检查前缀来实现Clang扩展。这可以通过修改编译器本身,添加分析器插件或编写基于Clang的工具(可以在方法2/3中从脚本中调用)来完成。这不是小事,但是可以做到的。如果要采用此路径,可以将eerothis修改后的Clang编译器用作示例。

推荐阅读:
objc.io: The Build Process
Xcode Project vs. Xcode Workspace - Differences

10-08 05:54
查看更多