美文网首页
iOS最小成本实时预览日志

iOS最小成本实时预览日志

作者: 风吹柳絮如花落 | 来源:发表于2022-09-09 11:10 被阅读0次

非联调开发(直连Xcode)想实时预览日志很复杂,仅管写入文件了,实时预览也不符合本文「最小成本」实现的宗旨

NSLog

在iOS开发中,我们经常会用到NSLog调试,但是我们却不太了解它。在NSLog本质是一个C函数,它的函数声明如下:
FOUNDATION_EXPORT void NSLog(NSString *format, ...)

系统对它的说明是:Logs an error message to the Apple System Log facility.。他是用来输出信息到标准Error控制台上去的,其内部其实是使用Apple System Log的API。在调试阶段,日志会输出到到Xcode中,而在iOS真机上,它会输出到系统的/var/log/syslog这个文件中。

在iOS中,把日志输出到文件中的句柄在unistd.h文件中有定义:

#define STDIN_FILENO 0 /* standard input file descriptor */
#define STDOUT_FILENO 1 /* standard output file descriptor */
#define STDERR_FILENO 2 /* standard error file descriptor */

NSLog输出的是到STDERR_FILENO上,我们可以在iOS中使用c语言输出到的文件的fprintf来验证:

NSLog(@"iOS NSLog");
fprintf (stderr, "%s\n", "fprintf log");

由于fprintf并不会像NSLog那样,在内部调用ASL接口,所以只是单纯的输出信息,并没有添加日期、进程名、进程id等,也不会自动换行。

接入方法

使用白名单等AB侧限制,固定用户、设备本地打印日志也映射为NSLog

伪代码

public class LogHelper {
    static public func error(_ message: String) {
      log.info(message)
      LogHelperOC.log(message)
  }
}

@implementation LogHelperOC

+ (void)log:(NSString *)message {
    if ([LogHelperOC _isShouldLog]) {
        NSLog(@"%@", message);
    }
}

/// 白名单配置
+ (BOOL)_isShouldLog {
    return 白名单
}

@end

工具

0、开启指定用户、设备白名单
1、连接手机并打开mac控制台


image.png

2、选择左侧设备


image.png
3、右上角筛选
进程:APP的product name
image.png

APP的product name 获取位置


企业微信截图_b8274e19-9fdd-484d-af72-3261be092498.png

🎉🎉🎉现在就可以愉快的玩耍实时日志了🎉🎉🎉

参考文章:https://www.lmlphp.com/user/16640/article/item/569683/

相关文章

网友评论

      本文标题:iOS最小成本实时预览日志

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