美文网首页
Xcode如何消除各类Warning

Xcode如何消除各类Warning

作者: 扛支枪 | 来源:发表于2019-04-28 19:29 被阅读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)

    相关文章

      网友评论

          本文标题:Xcode如何消除各类Warning

          本文链接:https://www.haomeiwen.com/subject/lkdjnqtx.html