菜鸟教程小白 发表于 2022-12-13 04:03:41

ios - 自定义构建条件和警告 Xcode


                                            <p><p>我的 iOS 项目强制要求开发人员创建的每个类都必须以“SYV”为前缀。我必须添加build设置,如果任何类不遵循此约定,它应该在 Xcode 中显示为警告。 </p>

<p>我不确定从哪里开始,甚至不确定。请指教。 </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>这是可能的,但需要一些我不确定是否值得的工作。项目中有多少个类(class)?如果它不是一个大型项目,手动代码审查应该可以完成这项工作。但是,如果您想按照自己的计划行事,您可以执行以下操作:</p>

<p><strong>方法 1:</strong> 将所有类(class)放在一个文件夹(或子文件夹)中。假设您只在每个文件中放置一个类,并且该类以该文件命名,您可以使用一个非常简单的脚本来验证所有文件名,如果您想要一些结构,可能会递归验证。</p>

<p><strong>方法 2:</strong> 使用 <a href="https://developer.apple.com/library/ios/recipes/xcode_help-project_editor/Articles/Adding%20a%20Build%20Rule.html" rel="noreferrer noopener nofollow">Xcode Build Rules</a> : 为 <code>*.m</code> 文件指定一个新规则(如果你想确定的话,也可以是 <code>*.h</code>)。由于这会覆盖默认规则(编译文件)并且我不知道之后执行默认规则的简单解决方案,我建议您创建一个额外的目标仅用于验证,不需要编译。然后,您需要一个自定义脚本来解析源文件,找到类 <code>@implementation</code>s(假设每个类都已实现,我看不出检查 <code>@interface</code>s 的理由直接,但我可能在这里遗漏了一些东西),并验证了他们的名字。您可能会摆脱一些正则表达式,或使用 <a href="http://clang.llvm.org/docs/Tooling.html" rel="noreferrer noopener nofollow">libclang</a> 完全解析文件.如果您在从您的构建规则脚本调用的基于 C(C、C++、Objective-C、...)的命令行工具中实现验证,您可以使用它来生成显示在 Xcode 中的警告:</p>

<pre><code>// casts are only added as hints to the types used
printf(&#34;%s:%d: warning: %s&#34;, (string)symbolName, (int)lineNumber, (string)text);
</code></pre>

<p>我还没有找到直接从 bash 脚本生成警告的方法。有关构建规则的更多信息可以找到 <a href="http://www.cocoanetics.com/2012/02/xcode-build-rules/" rel="noreferrer noopener nofollow">here</a> .</p>

<p><strong>方法 3:</strong> 类似于 <strong>2</strong>,但不是覆盖构建规则,您可以 <a href="http://www.runscriptbuildphase.com" rel="noreferrer noopener nofollow">add</a>在编译期间执行的脚本,通过定义 <a href="https://developer.apple.com/library/ios/recipes/xcode_help-project_editor/Articles/AddingaRunScriptBuildPhase.html" rel="noreferrer noopener nofollow">Build Phase</a> .这里的挑战是找到目标使用的所有相关类。您可以手动检查 <a href="http://michele.io/the-project-file-part-1" rel="noreferrer noopener nofollow"><code>.pbxproj</code> file</a>获取这些信息(不是很推荐,但是一个很好的练习),或者使用像 <a href="https://github.com/kronenthaler/mod-pbxproj" rel="noreferrer noopener nofollow">mod-pbxproj</a> 这样的库(Python) 或 <a href="https://github.com/CocoaPods/Xcodeproj" rel="noreferrer noopener nofollow">Xcodeproj</a> ( ruby )。然后按照方法 2 进行验证。</p>

<p><strong>方法 4:</strong> 您还可以通过添加编译器标志和代码来检查前缀来实现 Clang 扩展。这可以通过修改编译器本身、添加分析器插件或编写基于 Clang 的工具(可以从脚本调用,如方法 2/3)来完成。这不是微不足道的,但可以做到。 <a href="http://eerolanguage.org" rel="noreferrer noopener nofollow">eero</a>和 <a href="https://bitbucket.org/shagedorn/custum-clang-export-unsafe-api-usage" rel="noreferrer noopener nofollow">this</a>如果你想走这条路,可以使用修改后的 Clang 编译器作为示例。</p>

<p>推荐阅读:<br/>
<a href="http://www.objc.io/issue-6/build-process.html" rel="noreferrer noopener nofollow">objc.io: The Build Process</a> <br/>
<a href="https://stackoverflow.com/questions/21631313/xcode-project-vs-xcode-workspace-differences/" rel="noreferrer noopener nofollow">Xcode Project vs. Xcode Workspace - Differences</a> </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 自定义构建条件和警告 Xcode,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/27572373/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/27572373/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 自定义构建条件和警告 Xcode