iOS 10:“[App]如果我们处于真正的pre-commit处理程序中,由于CA限制,我们实际上无法添加任何新的fences”

390
有时我在运行我的应用程序时,在Xcode 8b3的日志中会收到此消息,一切似乎都在工作,但我想知道这是从哪里来的。谷歌没有提供任何帮助。

2
你是否在调用UINavigationController的代理方法:fun navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) { }? - Norman G
2
willShowViewController 从未被调用,没有... - swalkner
3
有人提交了错误报告吗?我马上要提交一个。 - ICL1901
1
请查看此回复。 https://dev59.com/fpnga4cB1Zd3GeqPZoJV#39997761 - Sneha
亲爱的上帝,请让它停止。 - Tjalsma
显示剩余9条评论
6个回答

286

在您的Xcode中:

  • 单击停止按钮旁边的活动方案名称
  • 单击“编辑方案…”
  • 在“运行(调试)”中选择“参数”选项卡
  • 在“环境变量”中单击“+”
  • 添加变量:OS_ACTIVITY_MODE = disable

屏幕截图


4
谢谢您提供额外的信息。 - amergin
26
请注意,我随机地发现没有NSLog的输出到控制台,然后将其移除以解决问题。这是由于苹果公司的技术人员所施加给我们的"高级"编程限制。 - amergin
38
就我所知,每当进行方向更改时,我都会收到此消息,并且我已经禁用了OS_ACTIVITY_MODE环境变量。 - JohnSF
5
注意:加上这行代码后,您在控制台中将看不到NSLog。 - niravdesai21
4
这岂不是像关闭火警报警器吗? - ScottyBlades
显示剩余3条评论

190

这个问题源于通过 os_log API 调用的 +[UIWindow _synchronizeDrawingAcrossProcessesOverPort:withPreCommitHandler:] 方法。它不依赖于您正在使用的其他组件/框架(仅依赖于 UIKit),在更改界面方向时,它会在干净的单视图应用程序项目中复现。

该方法由两部分组成:

  1. 将传递的 precommit 处理程序添加到处理程序列表中;
  2. 执行一些工作,取决于当前的有限状态机状态。

当第二部分失败时(看起来像是被禁止的转换),它会将上述消息打印到错误日志中。然而,我认为这个问题并不致命:在此方法中有两个附加的断言情况,将导致调试崩溃。

似乎 radar 是我们能做的最好的事情了。


1
请问您能详细说明一下您用于调试的工具,以便获取私有方法名称及其结构吗? - user1744056
9
你可以使用Hopper反汇编器,在框架二进制文件中查找警告文本以及对该文本的引用,这些引用通常出现在私有方法中。 - k06a
当键盘滚动并且我订阅了控制器以响应调整其视图时,我也会遇到这个问题。 - yo.ian.g

83

尝试将以下内容放入运行(debug)下方的计划环境变量中

OS_ACTIVITY_MODE = disable

环境变量在哪里? - Erika Electra
1
@Foo下面的回答很有用,因为它包括了如何操作的细节。 - Kevin Owens
1
它也不打印约束警告日志。 - Chirag Shah
36
OP问消息来自何处,仅仅说明如何将其静音并不是正确的答案。 - iCaramba
6
"IOS_ACTIVITY_MODE = disable"这个选项会关闭所有日志记录!如果你不想看日志,只需关闭日志视图即可。真是一个荒谬的答案,令人惊讶的是它有这么多票数!它根本没有解决实际问题。我们的应用程序大量使用核心数据,运行良好,但在最近的一次Xcode更新后,出现了这些消息和其他问题。很遗憾苹果无法解决这些类型的问题。 - John
显示剩余2条评论

13

我们可以通过以下方式将其静音(设备和模拟器需要不同的值):

添加名称OS_ACTIVITY_MODE和值${DEBUG_ACTIVITY_MODE}并勾选它(在Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment中)。

enter image description here

添加用户定义设置DEBUG_ACTIVITY_MODE,然后为Debug添加Any iOS Simulator SDK并将其值设置为disable(在Project -> Build settings -> + -> User-Defined Setting中)。

enter image description here


对我没用:尽管已经按照上面建议的禁用了调试活动模式,但我仍然在控制台中看到这个。 - Johan

-1
为了解决问题,我从模拟器中删除了该应用程序。
我首先运行了“清理”操作。
我不认为任何与方向有关的因素引发了这个问题。在这个症状开始出现之前,最大的变化是一个Swift框架开始在工作线程上调用NSLog而不是主线程。

1
一开始在模拟器中运行清理操作时,没有旋转的情况下可以正常工作,但是当我再次测试旋转命令时,它报告了相同的错误。 - cheznead
当我更改方向时,我正在使用平移手势,并且只收到此错误。 - Jeremy Andrews

-8
OS_ACTIVITY_MODE = disable

这也将禁用在真实设备上进行调试的能力(从那时起,真实设备上不再有控制台输出)。


6
你刚刚复制了一个早期的答案(细节更少) - Ashley Mills
2
actually the TL;DR helps. - Juan Je García

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接