為了強調(diào)組內(nèi)同學(xué)對 warning 的處理,強制將 warning 切成了 error,這樣為了保證項目可以編過简肴,大家不得不處理自己開發(fā)過程中遇到的 warning,暴力但很有效百侧。
關(guān)閉全局警告
組件化之后砰识,項目中除了基本的殼工程代碼,其他代碼都在 pod 中佣渴,可以采用 Podfile 的開關(guān)進(jìn)行處理辫狼。
...
platform :ios, '9.0'
project 'XXX'
inhibit_all_warnings!
...
inhibit_all_warnings! 就是屏蔽所有 pod 警告的全局開關(guān)。
打開部分 pod 的警告
如果去掉這一行(不調(diào)用對應(yīng)的 ruby 方法)辛润,就會造成所有引入的第三方庫的 warning 也都顯示出來了膨处,無論是查看 warning 還是處理,都不是很方便砂竖,所以真椿,這一行肯定是要保留的。
看過 cocoapods 源碼的同學(xué)都知道乎澄,pod 方法接收一個參數(shù)可以打開或關(guān)閉這一 pod 的 warning 開關(guān)突硝。
pod 'XXX', :git => 'xxxxx.git', :tag => 'xxx', :inhibit_warnings => false
嗯,就是 :inhibit_warnings 這個參數(shù)了三圆,false :打開 warning狞换,true :屏蔽 warning
warning 切 error
這是關(guān)鍵了避咆,遇到編譯 error 的時候,大家不得不處理才能 run 自己的工程修噪,這也是這次讓大家重視 warning 處理的必殺技了查库。Podfile 中可以在所有的 pods 安裝完成后,通過鉤子方法給 target 設(shè)置 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
# 預(yù)編譯宏
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'NS_BLOCK_ASSERTIONS'
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'COCOAPODS=1'
# warning 切 error 的開關(guān)
config.build_settings['GCC_TREAT_WARNINGS_AS_ERRORS'] = 'YES'
# 關(guān)閉部分 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 的開關(guān)了脏款。
大家可能還會注意到围苫,上面的 Podfile 配置中還設(shè)置了關(guān)閉部分 warning 的開關(guān),是的撤师,有些 warning 還是沒有太大影響的剂府,不能對業(yè)務(wù)開發(fā)造成太大的干擾和影響,可以如此關(guān)閉掉剃盾。
常見的警告
下方鏈接羅列了一些 iOS 中常見的一些警告消息腺占,感謝原作者。
1)Semantic Warnings(語義警告)
2)Parser Warnings(解析器警告)
http://www.reibang.com/p/9652d3ae42a1