是否可以为已编译的第三方库隐藏或替换NSLog()函数,以便将调试喷入我的日志中?

时间:2013-01-28 14:00:41

标签: ios objective-c cocoa logging

GoogleConversionPlugin坚持记录随机的无用信息并搞砸我的自动化测试报告。

2 个答案:

答案 0 :(得分:3)

您可以将所有NSLog()输出重定向到任何地方(或控制台日志以外的文件),或者让它调用您自己的日志记录输出功能(不是正式但它可以正常工作),但是这将作用于所有{ {1}}不仅可以通过此插件拨打电话,也可以通过代码中的来电进行通话。如果您的应用程序是单线程的,那么您可以使用自己的日志记录功能检查全局NSLog()当前是启用还是禁用日志记录;但是在多线程环境中,您必须控制每个线程(如果您使用GCD,即使您不自己处理线程,也是多线程的),这也是可能的,尽管需要更多的额外代码。

所以问题是,是否可以解决全局禁用日志记录(或当前线程)的问题,进行插件调用,然后重新打开它?当然,如果插件内部是多线程的(在没有你注意的情况下可以切换线程),每个线程的禁用将不起作用,但在这种情况下,全局开关仍然可以工作。

除非您愿意“修补”此库,否则无法仅控制静态库的BOOL次调用(当然,您可以在没有谷歌起诉的情况下这样做)。动态库是可能的,但是当你为iOS开发时,你不能使用动态库。

让我知道哪些可能的解决方案适合您的需求,如果有的话,我会看到我能为您做些什么(例如更新答案并添加一些代码或说明)。

答案 1 :(得分:0)

首先,“您应该与这些库/框架的开发人员联系并提交错误”。

在发布版本中,调试,错误或任何NSLog等都不能存在,除非它非常关键。