iOS 上如何查看日志信息

App开发中难免会遇到各种各样的问题,特别是有些信息不能在Debug 状态下重现,所以不得不记录日志信息到文件中,方便以后分析问题。
但是因为苹果系统的封闭型,日志信息除了上传服务器就只能保存在App的沙箱里面,查看很不方便。

后来出现了一些第三方App,可以查看App的沙箱文件。这类应用有iTool、iExplore等。
iOS8.3出来以后,这些工具的查看沙箱的功能统统失效了。

现在我们需要一些其他方法来查看日志文件内容了。

以下是常见的方法:

  • 在APP中提供查看日志内容的接口。
    在用户的UI界面上增加一个查看日志的入口,譬如在“关于”菜单下面。
    可以定义一个宏来控制入口的开启和管理:

    1
    #define ENABLE_SHOW_LOG_VIEW 1
  • 共享App的沙箱目录,在Itune中查看文件。
    通过在app的info.plist文件中增加UIFileSharingEnabled键,
    并把值设置为TRUE。这样,在iTune中就可以操作App的Document目录了。开发时把日志保存在Document目录中,就可以用iTune把日志拷贝到电脑上查看了。

  • 通过发送邮件的方式把日志文件发送给开发者。
    有时候,测试人员在现场测试,手头没有PC,不能把日志文件转移到PC上,而同时有需要开发人员快速定位解决问题时,就可以通过把日志文件发送邮件给开发者来分析问题。
    这样同方案一一样,需要在App中增加一个发邮件的入口。
    发邮件的代码:
    a. 引入发送邮件的框架

    1
    #import <MessageUI/MFMailComposeViewController.h>

b. 实现MFMailComposeViewControllerDelegate协议@interface ViewController ()<MFMailComposeViewControllerDelegate>c. 发送邮件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if([MFMailComposeViewController canSendMail]){

NSString *logfile = ......; //获取日志路径

MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];
controller.mailComposeDelegate = self;
[controller setToRecipients:@[@"......"]];
[controller setSubject:@"......"];
NSStringEncoding encode;
NSString *log = [NSString stringWithContentsOfFile:logfile usedEncoding:&encode error:nil];
[controller addAttachmentData:[NSData dataWithContentsOfFile:[path stringByAppendingPathComponent:logfile]] mimeType:@"text/plain" fileName:logfile];
[self presentViewController:controller animated:YES completion:nil];
}else {
self.lblStatus.text = @"设备不支持发送邮件!";
}
1
需要用户在设备上配备了邮件账号。

d. 处理邮件发送结果

1
2
3
	-(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{
//根据发送结果给出相应提示。
}

三种方法介绍完毕。
第一种方法适合开发者可以接触到测试设备的场景。
第二种需要设备连接电脑使用。
第三种需要有网络,但是不受设备和地域的限制,非常适合现场解决bug。