如何去掉Xcode工程中某种类型的警告

问题描述

在我们的项目中,通常使用了大量的第三方代码,这些代码可能很复杂,我们不敢改动他们,可是作者已经停止更新了,当sdk升级或者是编译器升级后,这些遗留的代码可能会出现许许多多的警告,那么我们有没有办法去掉这些烦人的警告,不然一个工程几百个警告,你看着怎么都不爽吧。我们怎么去掉警告呢?

1. 最直接、最一劳永逸、最安全的方式,直接找到警告的那段代码,改为不警告。这个方式最安全。

可是它有一个问题,就是,当我们很多文件都有这种类型的警告的时候,我们就需要改动很多很多的源码了, 对于不是我们写的源码,有可能随时会更新的,我们这种方式,显然就不太可取了。

2. 使用编译器提供的宏来操作,这个方式在我们的工程中会大量的看到:

#pragma clang diagnostic push
#pragma clang diagnostic ignored"-Wdeprecated-declarations"
 //写在这个中间的代码,都不会被编译器提示-Wdeprecated-declarations类型的警告
dispatch_queue_tcurrentQueue =dispatch_get_current_queue();
#pragma clang diagnostic pop

这种方式的问题,同第一个差不多,也是要修改源代码的实现的,对于第三方,我们肯定是不想改动它的,尤其是一些更新很频繁的第三方,一般警告出现后不久,作者就更新了,我们在此做这样的操作,就显得浪费了.并且在 添加arm64支持的时候,一下出现几百个某种类型的警告,改起来也是相当费时费力的啊!

比如我们的工程,打开了arm64,然后编译:

3.关闭某一个指定文件的某种指定类型的警告

这里,拿一个具体工程来说吧.比如我们工程里有一个文件  PresencePacket

其实关闭某个指定文件的某种类型的警告很简单,就如同我们以前给某一个文件添加 ARC支持或者不支持的时候那样 添加 忽略/显示 某种类型警告

双击 文件, 在其中添加  -Wno-shorten-64-to-32  (这个关键在就是让编译器忽略 Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32_t' (aka 'int') 警告)

添加完成后,再编译,那么PresencePacket文件中的  Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32_t' (aka 'int') 警告就没有了,是不是很简单,很方便.

这种方式,已经是大大的减少了工作量了,只需要在指定的文件的编译中添加 -Wno-shorten-64-to-32就可以了.那么有没有什么方式可以让编译器忽略整个工程中的 指定类型的警告呢?

4.关闭工程中指定 类型的警告

这个最简单了, 工程的target有一个 Other Warning Flags

在其中添加 -Wno-shorten-64-to-32

再重新编译,哈哈,整个文件中的  Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32_t' (aka 'int') 警告全部消失了!!!!

5.大家可能很疑惑,上面的-Wno-shorten-64-to-32 是怎么来的,我怎么知道   Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32_t' (aka 'int') 警告 就是 -Wno-shorten-64-to-32类型呢?这里,其实不需要记忆的,当工程中有这种类型警告的时候

在警告窗口,某个警告上,我们右击,显示出右键菜单,选择其中的 Reveal in Log

则会显示

注意到其中 [-Wshorten-64-to-32],在这个括号中的就是 这种警告的类型   -W是前缀,这个前缀表示的是 打开这种类型的警告 如果我们是要关闭某种类型的警告的话, 要将 -W换成 -Wno-

这样就得到了  -Wno-shorten-64-to-32了.

后记:

对于我们使用cocoapod引入的第三方,我们可以在podfile文件中 增加一句  inhibit_all_warnings! 来要pod的工程不显示任何警告,例如

link_with 'SecondHouseBrokerAPP','SecondHouseBrokerCOM'
platform :ios,'6.0'
inhibit_all_warnings!

pod 'CocoaAsyncSocket'
pod 'Reachability'
pod 'ProtobufObjC'
pod 'SDWebImage'
pod 'FMDB'
pod 'GPUImage'
pod 'CXPhotoBrowser'
pod 'CocoaLumberjack'

还有就是,上面的方法也适合其它类型的警告!!!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。

(0)

相关推荐

  • xcode8 关闭控制台不打印不信息的解决方法(图文详解)

    控制台打印的信息如下 2016-10-15 10:13:17.774543 LGLSearch-Dome[1656:356106] subsystem: com.apple.UIKit, category: HIDEventFiltered, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_

  • iOS Xcode8更新后输出log日志关闭的方法

    刚把Xcode更新到最新的8,一运行发现好多log输出,根据如下操作可以关掉这些log日志,点击项目Edit Scheme - Run - Arguments - Environment Variables里添加:Name:OS_ACTIVITY_MODE  Value:disable 如图: 以上所述是小编给大家介绍的iOS Xcode8更新后输出log日志关闭的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.在此也非常感谢大家对我们网站的支持!

  • Xcode 8打印log日志的问题小结及解决方法

    刚开运行Xcode 8.0的时候,我们可能对打印的日志有一点不耐烦,怎么打印那么多有的没的. 我们先来看下如何禁用吧, 按步骤打开Product > Scheme > Edit Scheme 选择Run > Argumens > Environment Variables ;加入OS_ACTIVITY_MODE.如下图所示 这样就不会有那些烦人的log日志.但是...这样以后iOS10真机就无法打印log日志.解决方法就会重写log日志: 其中给NSString增加了一个timeS

  • XCode编译速度慢的处理方法

    提升编译链接的速度主要有以下三个方式: 1. 提高XCode编译时使用的线程数 复制代码 代码如下: defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 4 XCode默认使用与CPU核数相同的线程来进行编译,但由于编译过程中的IO操作往往比CPU运算要多,因此适当的提升线程数可以在一定程度上加快编译速度. 2. 将Debug Information Format改为DWARF 在工程对应Target的Build Set

  • iOS10 适配-Xcode8问题总结及解决方案

    iOS10 适配-Xcode8 问题解决: IOS开发者,系统版本的更新,必定要跟着更新,不然有些功能不知道,开发的时候对可以体验,大打折扣了. 前段时间升级了Xcode8,整体来说对OC的影响不大,但是还是跳一个坑,消耗了不少时间.这里总结下遇到的适配问题. 1.权限问题 Xcode8 访问相机.相册等需要权限的地方崩溃 解决办法: 在使用私有权限时,添加Info.plist文件中添加配置: 下面是各种key,需要哪个添哪个 NSBluetoothPeripheralUsageDescript

  • 详解iOS11、iPhone X、Xcode9 适配指南

    更新iOS11后,发现有些地方需要做适配,整理后按照优先级分为以下三类: 单纯升级iOS11后造成的变化: Xcode9 打包后造成的变化: iPhoneX的适配 一.单纯升级iOS11后造成的变化 升级后,发现某个拥有tableView的界面错乱,组间距和contentInset错乱,因为iOS11中 UIViewController 的 automaticallyAdjustsScrollViewInsets 属性被废弃了,因此当tableView超出安全区域时,系统自动会调整SafeAre

  • ios xcode警告与错误的分析总结

    1.相同具有外部链接的静态变量 可能是文件重复,两个类当中都声明了具有相同名字的具有外部链接的静态变量. 由于枚举类型导致的1 duplicate symbol for architecture x86_64错误 解决方法.先看加入东西就开始报错的代码.实在找不到就把类先全部注释,然后一步一步排查. iOS7.0以下『containsString』报 __NSCFString containsString:]: unrecognized selector sent to instance在要使用

  • Xcode中iOS应用开发的一般项目目录结构和流程简介

    项目所需的平台路径 1.开发平台路径: /Developer/Platforms 此路径下一般有三个目录,分别是mac电脑.模拟器.iphone真机 MacOSX.platform iPhoneSimulator.platform iPhoneOS.platform 每个目录下都有一个/Developer/usr/bin目录,放置开发中需要的程序 总的目录比如:/Developer/Platforms/*/Developer/usr/bin/ 注意:*代表上面上个目录中的一个,具体是哪个看目标平

  • 教你如何解决XCODE升级后插件不能用问题

    摘要:Xcode升级后打开Xcode会提示loadbundle或Skipbundle,一般我们选择loadbudle,Xcode插件依然有效,选择Skipbundle,Xcode插件会失效.有人想装两个版本的Xcode,后装的那个也会出现插件失效的情况. 一.Xcode插件失效原因 并不是升级或重装后原本的插件被删掉了,其实插件还在这个目录~/Library/Application Support/Developer/Shared/Xcode/Plug-ins .之所以插件失效,是因为每个插件只

  • Xcode使用教程详细讲解(全)

    Xcode使用教程详细讲解是本文要介绍的内容,Xcode是一个款强大的IDE开发环境,就像你在写Windows程序时需要VS2005一样 需要要Xcode为你写Mac程序提供环境.因此,如果你要成为Mac 程序的开发者,灵活运用Xcode工具是你必须做的第一步. 1)我们写程序时常常在源文件的头部添加copyright声明以及公司名称等等:而Xcode在创建文件时已经帮我们做了绝大部分工作,我们可能需要修改一下公司名称,因为xcode给不知道我们公司名称,它不可能预知一切,所以需要我们自己通过设

随机推荐