我的 iOS 项目强制要求开发人员创建的每个类都必须以“SYV”为前缀。我必须添加build设置,如果任何类不遵循此约定,它应该在 Xcode 中显示为警告。
我不确定从哪里开始,甚至不确定。请指教。
Best Answer-推荐答案 strong>
这是可能的,但需要一些我不确定是否值得的工作。项目中有多少个类(class)?如果它不是一个大型项目,手动代码审查应该可以完成这项工作。但是,如果您想按照自己的计划行事,您可以执行以下操作:
方法 1: 将所有类(class)放在一个文件夹(或子文件夹)中。假设您只在每个文件中放置一个类,并且该类以该文件命名,您可以使用一个非常简单的脚本来验证所有文件名,如果您想要一些结构,可能会递归验证。
方法 2: 使用 Xcode Build Rules : 为 *.m 文件指定一个新规则(如果你想确定的话,也可以是 *.h )。由于这会覆盖默认规则(编译文件)并且我不知道之后执行默认规则的简单解决方案,我建议您创建一个额外的目标仅用于验证,不需要编译。然后,您需要一个自定义脚本来解析源文件,找到类 @implementation s(假设每个类都已实现,我看不出检查 @interface s 的理由直接,但我可能在这里遗漏了一些东西),并验证了他们的名字。您可能会摆脱一些正则表达式,或使用 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,但不是覆盖构建规则,您可以 add在编译期间执行的脚本,通过定义 Build Phase .这里的挑战是找到目标使用的所有相关类。您可以手动检查 .pbxproj file获取这些信息(不是很推荐,但是一个很好的练习),或者使用像 mod-pbxproj 这样的库(Python) 或 Xcodeproj ( ruby )。然后按照方法 2 进行验证。
方法 4: 您还可以通过添加编译器标志和代码来检查前缀来实现 Clang 扩展。这可以通过修改编译器本身、添加分析器插件或编写基于 Clang 的工具(可以从脚本调用,如方法 2/3)来完成。这不是微不足道的,但可以做到。 eero和 this如果你想走这条路,可以使用修改后的 Clang 编译器作为示例。
推荐阅读:
objc.io: The Build Process
Xcode Project vs. Xcode Workspace - Differences
关于ios - 自定义构建条件和警告 Xcode,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/27572373/
|