Xcode如何消除各类Warning

2019-04-28  本文已影响0人  扛支枪

本文是自己工程消除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)

上一篇 下一篇

猜你喜欢

热点阅读