怎么去掉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‘

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

转自:http://www.cocoachina.com/ios/20141218/10678.html

时间: 07-11

怎么去掉Xcode工程中的某种类型的警告的相关文章

怎么去掉Xcode工程中的某种类型的警告 Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32

在我们的项目中,通常使用了大量的第三方代码,这些代码可能很复杂,我们不敢改动他们,可是作者已经停止更新了,当sdk升级或者是编译器升级后,这些遗留的代码可能会出现许许多多的警告,那么我们有没有办法去掉这些烦人的警告,不然一个工程几百个警告,你看着怎么都不爽吧.我们怎么去掉警告呢 1.最直接,最一劳永逸,最安全的方式,直接找到警告的那段代码,改为不警告.这个方式,最安全. 可是它有一个问题,就是,当我们很多文件都有这种类型的警告的时候,我们就需要改动很多很多的源码了, 对于不是我们写的源码,有可能

怎么去掉Xcodeproject中的某种类型的警告 Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32

问题描写叙述 在我们的项目中,通常使用了大量的第三方代码,这些代码可能非常复杂,我们不敢修改他们,但是作者已经停止更新了,当sdk升级或者是编译器升级后,这些遗留的代码可能会出现许很多多的警告,那么我们有没有办法去掉这些烦人的警告,不然一个project几百个警告,你看着怎么都不爽吧.我们怎么去掉警告呢 1.最直接,最一劳永逸,最安全的方式,直接找到警告的那段代码,改为不警告.这个方式,最安全. 但是它有一个问题,就是,当我们非常多文件都有这样的类型的警告的时候,我们就须要修改非常多非常多的源代

XCode工程中 Project 和 Targets区别

转自:http://blog.csdn.net/zhaozy55555/article/details/8557175 project就是一个项目,或者说工程,一个project可以对应多个target,比如一个xxx游戏的project,有free版的target,收费版的,或者还有什么节日版,product就是target build出来的一个app targets之间没一毛钱关系.但target和project有关系,target的setting会从project settings中继承一

关于XCode工程中PrefixHead.pch文件的使用

1.首先先清除pch文件在工程中的作用: 存放一些全局的宏(整个项目中都用得上的宏) 用来包含一些全部的头文件(整个项目中都用得上的头文件) 能自动打开或者关闭日志输出功能 2.由于新建的XCode工程文件是没有pch文件的,原因可能是因为大家把大量的头文件和宏定义放到pch里边,导致编译时间过长.苹果去掉他可能是要加快编译时间增加用户体验.虽然失去了编程的便利性. 所以需要我们自己手动新建一个pch文件,步骤如下: Command+N,打开新建文件窗口:ios->other->PCH fil

从XCode添加File的错误Multiple errors occurred while copying the files分析Cocos2d-x在XCode工程中添加文件

1.Multiple errors occurred while copying the files问题 关于这个问题,这里有解决办法 大致的意思是 1)添加文件没有全部添加,但是有部分添加成功,再次以文件夹添加之前的文件时会报这样的错误. 2)解决办法:先clean工程,点击上步需要添加文件的父目录,show  in  finder,删除之前添加的文件,重新添加. 这是一个解决办法,但是出现这样的问题还有另外一个原因: 勾选上了1的选项,导致出现上面的错误,直接去掉就可以了. 2.讲一讲Coc

集成Reveal到你的从Xcode工程中

集成Reveal:将Reveal加入您的Xcode工程 将Reveal加入您的Xcode工程,使得您团队中的其他成员无需任何额外的配置,就可以使用Reveal. 警告: 永远不要将包含Reveal动态库文件的应用正式发布.Apple不允许将含有动态加载库文件的iOS应用发布到Apple商店中. 在Xcode中打开您的iOS工程. 启动Reveal并选择__Help → Show Reveal Library in Finder__,这将会打开Finder窗口,并显示一个名为*iOS-Librar

XCode工程中ARC模式与非ARC模式共用(转)

Xcode 项目中经常会融合一些老的代码,它们可能采用非ARC的模式.混合编译时,就会碰到编译出错的情况. 如何共用ARC模式和非ARC模式呢? XCode除了提供整个项目是否使用ARC模式的选择外,还可以对单个文件添加标签来指定是否采用ARC模式. 添加标签的方法: 打开:你的target -> Build Phases -> Compile Sources. 双击对应的 *.m 文件 在弹出窗口中输入上面提到的标签-fobjc-arc / -fno-objc-arc (1)如果你的项目使用

如何在xcode工程中把lib工程加到主工程联合编译

名词解释:主工程 —— 产品, lib工程 —— 主工程需要引用的库的源代码工程: 1. 如果已经在xcode中打开了lib工程,关闭它,一定要关闭它,否则,后面的步骤都不能正常进行. 2. 在xcode中,打开主工程,打开树形工程目录,把lib工程的 .xcodeproj 拖入. 3. 选择主工程根目录,点击相应的target,选择Build Phases->Target Dependencies->add,把lib工程的target加进去:(这样会告诉主工程,当lib工程变化时,自动编译它

Git - 忽略Xcode工程中UserInterfaceState.xcuserstate文件的问题

一.在同 .Git目录下创建.gitignore文件.在文件中加入如下内容: *.xcuserstate project.xcworkspace xcuserdata UserInterfaceState.xcuserstate project.xcworkspace/ xcuserdata/ UserInterface.xcuserstate 二.退出xcdoe, 打开终端(Terminal),进入项目目录下. 三.在终端键入  git rm --cached [YourProjectName