本文是自己工程消除warning的过程,记录一下,防止自己忘记,有同样需求的可以参考,有错的表述请拍砖指正,谢谢。
最后有一劳永逸的办法,不想一个一个看就直接看最后。
先来一张我自己工程编译之后的警告
476个Warning
1. Unsupported Configuration Group
1.1 storyboard中的VC没有用到
file:///Users/../Base.lproj/Login.storyboard: warning: Unsupported Configuration: “Sign Up Other Controller“ is unreachable because it has no entry points, and no identifier for runtime access via -[UIStoryboard instantiateViewControllerWithIdentifier:].
storyboard中直接删除即可。
1.2 Xib中文字warning
file:///Users/../XXXTableViewCell.xib: warning: Unsupported Configuration: Automatically Adjusts Font requires using a Dynamic Type text style
找到对应文件,然后把对应的问题的文字的Automatically Adjusts Font 取消选中即可。
1.3 xib中collectionview的cell没有设置重用的identifier没有设置
file:///Users/.../XXXSelectView.xib: warning: Unsupported Configuration: Prototype collection view cells must have reuse identifiers
这个是我xib中拖的一个collectionview,里边会自带一个cell,我没有用到,直接把里边的cell删掉即可。
2. Dependency Analysis Warning
具体报错:
warning: no rule to process file '/Users/../README.md' of type net.daringfireball.markdown for architecture arm64
大概意思是xcode无法处理这个格式的文件,其实想想我们也没必要让md文件让xcode编译,所以方法如下:
Build Phases-》Compile Sources中搜索报错的文件,然后删掉即可。
3. Semantic Issue
这个就是你的语法错误,自己一个一个检查吧,各种小问题都有。
比如:
Method possibly missing a [super awakeFromNib] call
[super awakeFromNib] 没调用;
Method definition for 'xxx 方法名' not found
.m中方法没实现;
Auto property synthesis will not synthesize property 'status'; it will be implemented by its superclass, use @dynamic to acknowledge intention
父类中有status这个属性了,子类有加了一遍;
Autosynthesized property 'timer' will use synthesized instance variable '_timer', not existing instance variable 'timer'
这个是属性写了个timer变量,然后内部变量有写了一个timer的,改成一个就行了。
4. Unused Entity Issue Group
这个就是你工程中添加的局部变量等没有用到,自己一个一个删除吧。比如:
int width = 100;
//然后就没有再用到width了。
5. Format String Issue Group
各种转字符串格式化的错误,如下:
int index = 100;
NSString *indexString = [NSString stringWithFormat:@"%zd",index];
//Format specifies type 'ssize_t' (aka 'long') but the argument has type 'int'
把%zd改成%d即可,对应关系百度喽。
6. Deprecations Group
使用了系统废除的方法,属性等,比如
'sizeWithFont:constrainedToSize:lineBreakMode:' is deprecated: first deprecated in iOS 7.0 - Use -boundingRectWithSize:options:attributes:context:
这个的解决方式是
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
//计算文字的size
CGSize labelSize = [_labelText sizeWithFont:self.label.font
constrainedToSize:CGSizeMake(BBTipLabelMaxWidth, 1000)
lineBreakMode:NSLineBreakByCharWrapping];
#pragma clang diagnostic pop
引号中就是对应的错误类型,具体各种类型请移步参考参考地址 ,这个方法就只能一个一个的解决,文末后有一次性解决的方法,像我这工程中几百个方法过期的warning我要是这样写早傻了。
7. Value Conversion Issue Group
//Implicit conversion loses integer precision: 'long' to 'int'
NSInteger weekday = 1;
int index = weekday;
类型转换的warning,自己改成统一的类型,或者强转一下也行。
8. ARC Retain Cycle Group
这个时候还有人写循环引用的代码,我也是服了,看看大神写的代码:
[headerView setEmailBtnClickBlock:^{
[footerView.footerBtn setTitle:Internation(@"Confirm") forState:UIControlStateNormal];
footerView.footerWidthCinstraint.constant = 140;
footerView.footerBtn.contentEdgeInsets = UIEdgeInsetsMake(7, 7, 7, 7);
headerView.emailBtn.selected = YES;
[self.tableView reloadData];
}];
应该不用我说怎么改了吧,相信大家应该不会写出来这样的代码吧。
9. Apple Mach-O Linker (ld) Warning Group
ld: warning: directory not found for option '-F/Users/.../PluginTool/UMSocial_Sdk_5.2.1'
如下图,工程中的路径删除了后者文件移动了,但是framework search paths和library search paths这两个地方没删除,就会有这个warning,自己看看对应的warning,然后删除对应的路径就行
图片.png
10. Asset Catalog Compiler Warning Group
资源文件中的问题,貌似这几个吧:
/Users/.../XXX.xcassets: The image set "资源名字" has an unassigned child.
点击找到对应的资源,然后吧unassigned的图片删掉即可。
/Users/.../ZZZ.xcassets: The image set name "资源名字" is used by multiple image sets.
这个是资源文件中有重复的名字,在资源文件中搜索一下,就会找到多个同名的,然后自己看删除哪个不需要的吧。
11. Misplaced View Group
/Users/.../XXXTableViewCell.xib Frame for "图片名.png" will be different at run time.
就是xib中的约束正确了,但是具体的控件没在合适的位置,找到对应的xib文件,点击右下角刷新按钮刷新即可。
12. User-Defined Issue Group
用户自己添加的warning,如下:
#warning manual change code手动修改源码了,有点可耻
[UIView transitionWithView:wself
duration:0.5
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
wself.image = image;
} completion:NULL];
[wself setNeedsLayout];
这个就是给自己提个醒,不想要了删了算了。
13. Lexical or Preprocessor Issue Group
/Users/.../XXXManager.m:272:17: Treating Unicode character as whitespace
这个是warning的这行代码里边可能有非常规的空格,把这行删了重新写一遍即可。
/Users/.../XXXPicker.m:18:9: 'MainColor' macro redefined
重复的宏定义。
一了百了的做法,简单粗暴,好怕怕
上述方法都是找到后自己手动改掉,少的话还好,多的话就想出家了,还改个毛warning,比如我这四百多个的,也许还有更多的呢。
下边说下统一的方法:
buildSettings-》Other Warning Flags中添加-Wno-deprecated-declarations就可以了。
-Wno-deprecated-declarations就是去掉所有方法,属性等过期的warning,然后怎么找这个类型呢?
工程中警告的地方,右键,点击Review in log,然后就可以警告类型了,如图:
此图盗别人的
规则就是:-Wno-类型,类型就是把图中Wint-conversion中W去掉即可。我的设置
把所有方法,属性等过期的去掉了
cocopods中警告一劳永逸的处理:
Pods -> target -> Build Settings -> Other Warning Flags 添加 -w,小写w。
总结
这是我改掉自己工程中warning的过程,记录一下,敬请拍砖指正。
参考:
iOS 开发去除 CocoaPods 警告(Fix Xcode Warning)
网友评论