草庐IT

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

coder 2024-01-24 原文

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

我不确定从哪里开始,甚至不知道从哪里开始。请指教。

最佳答案

这是可能的,但需要一些我不确定是否值得的工作。项目中将有多少个类(class)?如果它不是一个大项目,手动代码审查应该可以完成这项工作。但是,如果您想按照自己的计划行事,可以执行以下操作:

方法 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 类似,但您可以 add 而不是覆盖构建规则在编译期间执行的脚本,通过定义 Build 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

关于ios - 自定义构建条件和警告 Xcode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27572373/

有关ios - 自定义构建条件和警告 Xcode的更多相关文章

  1. ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError) - 2

    我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

  2. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  3. ruby - 在院子里用@param 标签警告 - 2

    我试图使用yard记录一些Ruby代码,尽管我所做的正是所描述的here或here#@param[Integer]thenumberoftrials(>=0)#@param[Float]successprobabilityineachtrialdefinitialize(n,p)#initialize...end虽然我仍然得到这个奇怪的错误@paramtaghasunknownparametername:the@paramtaghasunknownparametername:success然后生成的html看起来很奇怪。我称yard为:$yarddoc-mmarkdown我做错了什么?

  4. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  5. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  6. ruby-on-rails - active_admin 目录中的常量警告重新声明 - 2

    我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA

  7. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

  8. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  9. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  10. ruby - 在 Ruby 中有条件地定义函数 - 2

    我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin

随机推荐