【问题标题】:is NSLog() stored on the device (iPhone etc)? If so, where?NSLog() 是否存储在设备(iPhone 等)上?如果有,在哪里?
【发布时间】:2011-07-12 11:54:41
【问题描述】:

是否应该在 iTunes 的最终应用中删除所有 NSLog() 调用?

在我的 iOS 应用程序中,我有很多 NSLog() 用于调试。 我应该在上传到 iTunes 之前有条件地把它们编码出来吗?

适用于:iPhone、iPod、iPad 的应用

谢谢。

【问题讨论】:

    标签: iphone ios itunes nslog


    【解决方案1】:

    我将在标题中回答 OP 关于日志在设备上的存储位置的问题。 NSLog() 使用 ASL(Apple 系统记录器)。以编程方式,您只能读取最后 256 个条目(例如 Xcode 在 Organizer 中显示的内容)。

    但是,如果您想访问完整的文件,它们存储在:

    /private/var/log/DiagnosticMessages
    

    当您查看该目录时(注意:设备必须越狱),您会发现一长串 *.asl 文件。

    我找到了解析这些文件的工具,但我还没有尝试过,所以YMMV:

    Parsing Apple System Log (ASL) files on iOS and OSX for Fun and Evidence (and a Python script to do it for you)

    【讨论】:

    • 解析.asl文件的python脚本位于here,详细信息在the original Blog Post的存档副本中
    • 上面答案中提到的原博文已经搬了。修复了链接。
    • 上面文章中链接的python脚本仍然对我有用!用于生成电池状态图表的 iOS_asl_power_timeline.py 似乎有一个错误,我建议修复 here
    • 可能是256个条目发生了变化?我可以在 Xcode 7.3 的设备控制台(在设备 > 您的设备下)中看到更多行。目前大约有 800 个条目,但我想这里是我打开此窗口后显示的所有 NSLog 语句。
    【解决方案2】:

    您不必全部删除;事实上,如果您的应用程序在用户的手机上崩溃并且您希望他们向您发送崩溃日志,它们会很有用。当用户同步他/她的手机时,崩溃日志位于文件夹中

    ~/Library/Logs/CrashReporter/MobileDevice/<DEVICE_NAME>
    

    如果您有NSLog()s,您可能会像调试时一样获得有用的信息。正如其他人指出的那样,不要过度使用它,但它们最终可能会有用。

    【讨论】:

    • 在用户的 iOS 设备上是否存在日志过大的风险?而且,在我的 iPhone 上,我如何访问:~/Library/Logs/CrashReporter/MobileDevice/
    • @Douglas K. Bell -- 他们在电话里,但你需要像iPhone Explorer 这样的工具才能找到他们(我不确定他们的存储位置)。同步手机后,日志文件位于 Mac 的主目录中。
    • 但在我的情况下,该文件夹仅包含包含堆栈跟踪的 .crash 文件,但其中不包含 NSLog 内容...
    【解决方案3】:

    是的,我们应该在上传到 iTunes 之前删除所有 NSLog() 调用。这样做主要是为了获得更好的性能。

    即使您不删除它们,也没有问题。它将被批准。但是如果你有很多 NSLog() s,那将会定义。影响性能。

    【讨论】:

      【解决方案4】:

      尝试将其用于您的 NSLog:

      #define DEBUG
      
      #ifdef DEBUG
       NSLog(@"Your tests outputs");
      #endif
      

      【讨论】:

      • 不应该是'NSLog(@"Your tests outputs");`(大写L)
      • 最好定义自己的宏,如果不是 DEBUG,则重新定义它,如 PCH template of LinkedLig
      【解决方案5】:

      不是全部。您应该保留错误日志。如果有任何错误或崩溃,这将很容易找到。 也可以使用 Organizer 查看 NSLog 消息。

      【讨论】:

      • 日志可能是信息泄露的来源。在企业中,我不喜欢看到任何日志记录。
      • 如果操作正确,日志记录会非常有用和安全。显然不要做任何愚蠢的事情,例如记录密钥或类似的重要内容,但是让日志说诸如received error code 50063 in function f 之类的内容非常有用。尤其是当错误代码 50063 出现在 100 个地方时。
      【解决方案6】:

      如果 NSLogs 是针对 DEBUG 模式添加的,则不需要删除它们。因此,即使您的应用程序崩溃并且它包含用户个人数据,它也会被 ios 删除。所以不用担心用户数据和 NSLog。参考https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/AnalyzingCrashReports/AnalyzingCrashReports.html 如果你愿意,你可以在你的应用程序中使用这个PJiOSAppConsole。它只会在您的应用程序中保留日志。您可以在运行时通过在 #ifdef 中添加 sn-p 来使用它,然后在您想要上线时删除它。易于集成和使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-24
        • 1970-01-01
        相关资源
        最近更新 更多