在iOS开发中,我们不可避免的会遇到各种类型的警告,有些警告需要解决,但有些警告是我们知道但不是必须要解决的(比如为了兼容旧版本而使用的新版被废弃的API等)。
但是作为一个有强迫症的开发者,警告当然是能处理就一定要处理,因此我们需要手动屏蔽掉Xcode的相关警告。
常见的警告主要存在以下几类:
1、源代码文件中的警告
2、CocoaPods中的警告
3、说明类文件的警告
下面我们就分别来处理对应类型的警告:
一、忽略源代码文件中的警告
1、使用Xcode的提供的宏来处理单个警告
#pragma clang diagnostic push
#pragma clang diagnostic ignored "警告名称"
#pragma clang diagnostic pop
只要将警告名称修改成对应的类型,即可以忽略相关的警告。
一般来说,我们Command+B后Xcode都会提示警告,此时找到你想要处理的警告,如下所示:
如果你已经知道了警告类型名,则直接使用上面提到的宏来包裹这段代码即可,倘若不知道对应的警告类型名,则右键刚刚选中的警告:
选择Reveal in Log,然后就会得到如下的信息,其中红框中的名字,即是你要找的警告名称。
此时你定位到提示警告的代码后,将刚刚的警告名粘贴进去,即可以去掉该警告
温馨提示:如果Reveal in Log不可点击或者点击无效,可以重新编译或者重启下Xcode
常见的警告类型有:
1, 声明变量未使用 "-Wunused-variable"
2, 方法定义未实现 "-Wincomplete-implementation"
3, 未声明的选择器 "-Wundeclared-selector"
4, 参数格式不匹配 "-Wformat"
5, 废弃掉的方法 "-Wdeprecated-declarations"
6, 不会执行的代码 "-Wunreachable-code"
7, 指针类型不匹配 "-Wincompatible-pointer-types"
8, 没有实现已声明的方法 "-Wincomplete-implementation"
9, -没有实现协议的方法" "-Wprotocol"
10, 尚未声明的函数(通常指c函数) "-Wimplicit-function-declaration"
11, 使用performSelector可能会出现泄漏 "-Warc-performSelector-leaks"
...
2、使用Xcode配置属性来处理单个文件警告
有时候同一个文件中有多个同类型的警告,倘若使用上面的方法,我们可能需要大量的修改源代码,这样不仅影响代码整洁,而且非常的繁琐,此时我们就有忽略特定文件的警告的需求。
相信做过MRC和ARC的兼容开发的同学一定知道-fno-objc-arc
这个指定,这是用来给特定文件关闭ARC功能指定,同理,我们可以使用类似方法来处理忽略特定文件的警告。
举个栗子,同一个文件中存在调用多个当前版本已经deprecated方法。(为了简单,此处全部写同一个且在同一处。)
为了忽略文件中的所有警告,我们可以在Xcode的Compile Sources中找到对应的文件,并为其添加需要忽略的警告名,重新编译即可发现对应的警告消失了。
需要注意的是,这里的警告名输入规则是将使用Xcode的提供的宏来处理单个警告
中获得的警告名开头W
后加上no-
。(如-Wdeprecated-declarations
需要变成-Wno-deprecated-declarations
)
3、使用Xcode配置属性来处理全局同类型警告
Xcode拥有强大的配置功能, 我们在Xcode中一样可以设置忽略警告。
参考上面的列子,我们需要忽略该警告,则可以选中PROJECT
中的Build Settings
选项,从里面定位到Other Warning Flags
,输入对应的忽略警告名即可。
需要注意的是,这里的警告名输入规则同使用Xcode配置属性来处理单个文件警告
二、忽略CocoaPods中的警告
iOS项目中大量采用CocoaPods来管理第三方库,因此第三方库警告成为很多项目中最多最无解的存在。
为了解决这个问题,其实CocoaPods提供了非常简单方法来供我们选择,我们只需要在我们的Podfile文件中加上一句inhibit_all_warnings
就可以解决所有的问题。
三、忽略说明类文件的警告
有时候我们会在项目中加入.md/.txt
这类文件来说明我们项目中的一些注意事项,如果这些文件存在警告,可以将这些文件从Xcode的Compile Sources
中删除。如下图所示: