除了本地豆荚之外,我怎样才能消除所有豆荚的警告?

时间:2015-07-27 04:23:15

标签: cocoapods

我正在假设

post_install do |installer|

  # Debug symbols
  installer.pod_project.targets.each do |target|
    target.build_configurations.each do |config|
      if ? == ?
        config.build_settings['?'] = '?'
      end
    end
  end

end

3 个答案:

答案 0 :(得分:3)

我今天遇到了类似的问题,并根据依赖项的复杂性找出了实现这一目标的两种方法。

第一种方法很简单,如果您的本地开发pod位于主pod文件中而不嵌套在另一个依赖项中,则应该可以正常工作。基本上按照惯例禁止所有警告,但在每个本地pod上指定false:

inhibit_all_warnings!

pod 'LocalPod', :path => '../LocalPod', :inhibit_warnings => false
pod 'ThirdPartyPod',

第二种更全面且适用于复杂嵌套依赖项的方法是创建本地pod的白名单,然后在安装后,禁止任何不属于白名单的pod的警告:

$local_pods = Hash[
  'LocalPod0' => true,
  'LocalPod1' => true,
  'LocalPod2' => true,
]

def inhibit_warnings_for_third_party_pods(target, build_settings)
  return if $local_pods[target.name]
  if build_settings["OTHER_SWIFT_FLAGS"].nil?
    build_settings["OTHER_SWIFT_FLAGS"] = "-suppress-warnings"
  else
    build_settings["OTHER_SWIFT_FLAGS"] += " -suppress-warnings"
  end
  build_settings["GCC_WARN_INHIBIT_ALL_WARNINGS"] = "YES"
end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      inhibit_warnings_for_third_party_pods(target, config.build_settings)
    end
  end
end

现在只会禁止第三方依赖,但会在任何本地pod上保留警告。

答案 1 :(得分:0)

Podfile解决方案

虽然ignore_all_warnings是全部或全部命题,但您可以在Podfile中的任何单个窗格上:inhibit_warnings => true

# Disable warnings for each remote Pod
pod 'TGPControls', :inhibit_warnings => true

# Do not disable warnings for your own development Pod
pod 'Name', :path => '~/code/Pods/' 

答案 2 :(得分:0)

有一个带有inhibit_warnings_with_condition的CocoaPods插件https://github.com/leavez/cocoapods-developing-folder。引用README

  

禁止特定吊舱的警告

     

将以下内容添加到您的Podfile中

plugin 'cocoapods-developing-folder'

inhibit_warnings_with_condition do |pod_name, pod_target|
    # your condition written in ruby, like:
    # `not pod_name.start_with? "LE"` or
    # `['Asuka', 'Ayanami', 'Shinji'].include? pod_name`
end
     

pod_target是Pod :: PodTarget类的实例,包含更多   信息比名称。您可以使用它来设置复杂的规则。

     

此功能将通过   原始方法,例如:hibit_all_warnings!,“ Ayanami”窗格,   :inhibit_warnings =>是

因此,如果您知道本地Pod的名称,则可以像上面的示例中所示对它们进行过滤。或者,您可以尝试执行以下操作(尝试利用本地Pod不在Pods目录下的事实):

inhibit_warnings_with_condition do |pod_name, pod_target|
  pod_target.file_accessors.first.root.to_path.start_with? pod_target.sandbox.root.to_path
end

请注意,如果我正确地获得了最后一条语句,它将排除 inhibit_all_warnings!:inhibit_warnings(我检查了implementation,看起来确实如此)。因此,您不能不要同时使用inhibit_warnings_with_conditioninhibit_all_warnings!:inhibit_warnings,但最后还是有道理的。