在设备上记录数据并检索日志

时间:2012-02-01 14:24:02

标签: ios xcode console logging device

在Xcode中的调试版本中,无论我是使用模拟器还是实际设备,NSLog,printf,fprintf assert和NSAssert语句都出现在控制台上

如果我现在在设备上运行发布版本(比如我发送测试版本并在我的iPhone上加大版本;这将是一个发布版本),其中哪些(如果有的话)被记录?

如何检索日志?

NSLog实际上是否在发布版本上输出了什么?决定因素是什么?无论是写入stdout还是stderr?只有stderr写入设备日志?这是否意味着我必须使用fprintf?是否已将任何内容写入设备日志?甚至有这样的事情吗?如果是这样,如何接受它?

有人可以澄清情况吗?

9 个答案:

答案 0 :(得分:137)

在Xcode 6.1.1中,您可以通过执行以下操作来查看NSLog输出。但是,我不确定它是否会让你看到太远的日志。我只看到它可以回到几个小时。

无论如何,以下是步骤:

  1. 在Xcode中,转到Window - >设备
  2. 在左侧面板中选择您的设备。
  3. 点击下面屏幕截图中显示的小箭头。
  4. enter image description here

答案 1 :(得分:86)

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName =[NSString stringWithFormat:@"%@.log",[NSDate date]];
NSString *logFilePath = [documentsDirectory stringByAppendingPathComponent:fileName];
freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);

只需在app委托文件的application:didFinishLaunchingWithOptions方法中添加此代码块,它就会在iPhone上的app document目录中创建一个日志文件,记录所有控制台日志事件。您需要从iTunes导入此文件才能查看所有控制台事件。

注意:在.plist文件中,请确保Application supports iTunes file sharing存在且设置为YES,以便您可以通过iTunes访问。

获取日志文件: 启动itunes,在您的设备连接选择的应用程序后 - 选择您的应用程序 - 在Augument文档中,您将获得您的文件。然后,您可以将其保存到磁盘

答案 2 :(得分:19)

在swift 3.0中,Shyl的代码将更改为,

var paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let documentsDirectory = paths[0]
let fileName = "\(Date()).log"
let logFilePath = (documentsDirectory as NSString).appendingPathComponent(fileName)
freopen(logFilePath.cString(using: String.Encoding.ascii)!, "a+", stderr)

所有其他过程与Shyl

解释的过程相同
  

只需在app delegate文件中的application:didFinishLaunchingWithOptions方法中添加此代码块,它将在iPhone上的app document目录中创建一个日志文件,记录所有控制台日志事件。您需要从iTunes导入此文件才能查看所有控制台事件。

     

注意:在.plist文件中,请确保Application supports iTunes file sharing存在且设置为YES,以便您可以访问   通过iTunes。

     

获取日志文件:在设备连接后启动iTunes   选择应用程序 - 选择您的应用程序 - 在Augument文档中,您将获得您的   文件。然后,您可以将其保存到磁盘

答案 3 :(得分:11)

NSLog写入生产版本中的设备日志,您可以通过将iPhone连接到系统并使用管理器来检查。在管理器中选择您的iPhone,单击设备日志。您将在日志中看到所有NSLog输出。

答案 4 :(得分:7)

我发现APPLE的这个链接信息丰富且完整。 它几乎为您提供了查看或访问设备日志的所有选项,无论它们是否连接到您的开发机器。

https://developer.apple.com/library/ios/qa/qa1747/_index.html

答案 5 :(得分:2)

是的,NSLog在设备上输出。您可以在设备连接到Mac并使用Xcode Organizer工具的情况下看到它的输出。

答案 6 :(得分:2)

如果您使用Testflight SDK,则可以使用Remote Logging feature

捕获所有日志

答案 7 :(得分:0)

我知道这是一个旧线程,但你也可以访问设备日志:

设置 - >隐私 - >分析 - >数据

希望这个帮助

此致

答案 8 :(得分:0)

我认为在Xcode 9.3中,设备日志屏幕已移至新位置。请参阅以下链接。

Get device logs at runtime in Xcode