Cocoapods 应用——警告处理

为了强调组内同学对 warning 的处理,强制将 warning 切成了 error,这样为了保证项目可以编过,大家不得不处理自己开发过程中遇到的 warning,暴力但很有效。

关闭全局警告

组件化之后,项目中除了基本的壳工程代码,其他代码都在 pod 中,可以采用 Podfile 的开关进行处理。

...
platform :ios, '9.0'
project 'XXX'
inhibit_all_warnings!
...

inhibit_all_warnings! 就是屏蔽所有 pod 警告的全局开关。

打开部分 pod 的警告

如果去掉这一行(不调用对应的 ruby 方法),就会造成所有引入的第三方库的 warning 也都显示出来了,无论是查看 warning 还是处理,都不是很方便,所以,这一行肯定是要保留的。

看过 cocoapods 源码的同学都知道,pod 方法接收一个参数可以打开或关闭这一 pod 的 warning 开关。

pod 'XXX', :git => 'xxxxx.git', :tag => 'xxx',  :inhibit_warnings => false

嗯,就是 :inhibit_warnings 这个参数了,false :打开 warning,true :屏蔽 warning

warning 切 error

这是关键了,遇到编译 error 的时候,大家不得不处理才能 run 自己的工程,这也是这次让大家重视 warning 处理的必杀技了。Podfile 中可以在所有的 pods 安装完成后,通过钩子方法给 target 设置 build settings,这里就包括warning 切 error 的选项了。

post_install do |installer|
    installer.pods_project.build_configurations.each do |config|
        # 编译配置
        if config.name == 'Release'
            config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'RELEASE=1'
        end 
        if config.name == 'Beta'
            config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'BETA=1'
        end
        
        # 预编译宏
        config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'NS_BLOCK_ASSERTIONS'
        config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'COCOAPODS=1'

        # warning 切 error 的开关
        config.build_settings['GCC_TREAT_WARNINGS_AS_ERRORS'] = 'YES'

        # 关闭部分 warning
        config.build_settings['WARNING_CFLAGS'] ||= '-Wno-nullability-completeness'
        config.build_settings['CLANG_WARN_STRICT_PROTOTYPES'] = 'NO'
        config.build_settings['GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS'] = 'NO'
        config.build_settings['CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS'] = 'NO'
        config.build_settings['CLANG_WARN_DOCUMENTATION_COMMENTS'] = 'NO'
        config.build_settings['GCC_WARN_UNUSED_VARIABLE'] = 'NO'
        config.build_settings['GCC_WARN_UNUSED_FUNCTION'] = 'NO'
        config.build_settings['CLANG_MIGRATOR_OBJC_DESIGNATED_INIT'] = 'NO'
        config.build_settings['CLANG_WARN_COMMA'] = 'NO'
        config.build_settings['CLANG_WARN_BOOL_CONVERSION'] = 'NO'
    end
    
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)']
            config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1'
        end
    end
end

其中,config.build_settings['GCC_TREAT_WARNINGS_AS_ERRORS'] = 'YES' 就是 warning 切 error 的开关了。
大家可能还会注意到,上面的 Podfile 配置中还设置了关闭部分 warning 的开关,是的,有些 warning 还是没有太大影响的,不能对业务开发造成太大的干扰和影响,可以如此关闭掉。

常见的警告

下方链接罗列了一些 iOS 中常见的一些警告消息,感谢原作者。
1)Semantic Warnings(语义警告)
2)Parser Warnings(解析器警告)
https://www.jianshu.com/p/9652d3ae42a1

你可能感兴趣的:(Cocoapods 应用——警告处理)