iOS调试小技能:无线真机调试、忽略警告、去除冗余日志信息

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情

引言

  1. iOS无线真机调试的使用场景:忘记带数据

如果有数据线,尽量使用数据线真机调试。使用数据线的传输速度肯定比无限快。

  1. 不升级Xcode进行高版本系统真机调试的方案
  2. 解决问题:控制台出现大量 CUICatalog: Invalid asset name supplied: ''

I 无线真机调试的设置步骤

1.1 开启Connect via network

  1. 连接真机调试数据线,在Xcode工具栏,点击 Window -> Devices and Simulators

选中Connect via network,默认是不选中的,这时候会看到左侧的设备会出现一个网络球的标志。 在这里插入图片描述

  1. 拔掉数据线后,连接成功后会在设备处显示一个网络球的标志,以后就可以直接无线调试

1.2 注意事项

真机和电脑需要在同一局域网才可以连接,连接成功后,以后会自动识别; 即使插上了数据线,也优先使用无线通道调试,因此记得及时关掉

  • Connect via network开关

II 不升级Xcode进行高版本系统真机调试的方案

案例:Xcode7.2不升级Xcode7.3,对iOS9.3设备进行真机调试

从网上下载Xcode7.3.dmg并将其中的9.3文件夹拷贝到Xcode7.2中的对应目录/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport中去,你可能需要管理员权限以完成拷贝.

在这里插入图片描述

同理:Xcode7 对应的目录放到Xcode8 对应的目录就可以真机调试8.0 以下的系统了

这里写图片描述> 你也养成备份Xcode历史版本的真机调试文件的习惯

github.com/zhangkn/DKB…

III 日志相关

3.1 NSLog调试技巧

当前函数签名

扫描二维码关注公众号,回复: 14228130 查看本文章
    NSLog( @"calling: %s", __PRETTY_FUNCTION__ );


复制代码

更多内容请看这篇:kunnan.blog.csdn.net/article/det…

3.2 忽略警告(屏蔽clang warning)

原理: 用#pragma声明来防止来自编译器或者静态分析器的警告

Xcode 调试技巧:忽略警告(屏蔽clang warning)

a、全局/局部屏蔽的方法 b、忽略 CocoaPods 第三方库警告 c、clang/Lexer/Parser 警告清单

———————————————— 版权声明:本文为CSDN博主「iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载>请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/z929118967/article/details/77678850

3.3 去除冗余日志信息

问题:控制台出现大量 CUICatalog: Invalid asset name supplied: ''

原因:[UIImage imageNamed:]的 name为nil

+ (nullable UIImage *)imageNamed:(NSString *)name;      // load from main bundle

复制代码

Returns:An object containing an unconfigured version of the image, or nil if the method could not find the specified image.

解决思路:如果图片名称为空串,不执行imageNamed:

解决方法:既然找不到图片是返回nil,那就利用方法交换,判断如果发现图片为空直接返回;如果找不到图片就打印图片名称,以便进行二次确认。

//  Created by mac on 2022/5/30.
//  Copyright © 2022 CRM. All rights reserved.
//
#import <objc/runtime.h>

#import "UIImage+CRMInvalidAssetName.h"

@implementation UIImage (CRMInvalidAssetName)

+(void)load{
    Method imageNamed = class_getClassMethod(self,@selector(imageNamed:));
    Method kn_ImageNamed =class_getClassMethod(self,@selector(kn_none_imageNamed:));
    method_exchangeImplementations(imageNamed, kn_ImageNamed);
}

/**
 解决思路:如果图片名称为空串,不执行`imageNamed:`。

 */
+(instancetype)kn_none_imageNamed:(NSString*)name{
    NSLog( @"calling: %s", __PRETTY_FUNCTION__ );

    if ([NSStringTool isBlankString:name]) {
        
        NSLog(@"图片名称为空=============%@",name);
        return  nil;
    }
    
    UIImage *image = [self kn_none_imageNamed:name];
    
    if (image == nil) {
        NSLog(@"找不到图片=============%@",name);
        return  nil;
    }
    return image;
}
@end

复制代码

判断空字符串

+(BOOL)isBlankString:(NSString*   ) string{
    
    
    if (string == nil || string == NULL) {
        return YES;
    }
    if ([string isKindOfClass:[NSNull class]]) {
        return YES;
    }
    if ([string isKindOfClass:[NSString class]] ) {
        
        if(string.length <1){
            return YES;

        }
        
    }

    string = [NSString stringWithFormat:@"%@",string];
    
    if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]==0) {
        return YES;
    }
    return NO;
}

复制代码

see also

iOS真机调试的其他注意事项

1、如何成为开发者

2、配置真机调试证书的步骤

3、开启僵尸对象(Zombie Objects)来定位内存问题 blog.csdn.net/z929118967/…

猜你喜欢

转载自juejin.im/post/7105172978304253982