iOS 10:“如果我们在真正的预提交处理程序中,由于CA的限制,我们实际上不能添加任何新的围栏”;

当运行我的应用程序时,我有时会在Xcode 8b3的日志中得到这条消息,一切似乎都正常工作,但我想知道这是从哪里来的。谷歌一点用都没有。

153313 次浏览

它来自+[UIWindow _synchronizeDrawingAcrossProcessesOverPort:withPreCommitHandler:]通过os_log API。它不依赖于你正在使用的其他组件/框架(只来自UIKit) -它在改变界面方向时在干净的单视图应用程序项目中再现。

该方法由两部分组成:

  1. 将传递的预提交处理程序添加到处理程序列表;
  2. 做一些功,这取决于当前有限状态机的状态。

当第二部分失败时(看起来像禁止转换),它将上面的消息打印到错误日志。 但是,我认为这个问题不是致命的:这个方法中还有2个额外的assert情况,这将导致调试时崩溃

看来我们只能用雷达了。

尝试在run(debug)下的方案的environment variables中放入以下内容

OS_ACTIVITY_MODE = disable

在你的Xcode:

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

截图

OS_ACTIVITY_MODE = disable

这也将禁用在真实设备中调试的能力(从那时起没有来自真实设备的控制台输出)。

为了解决这个问题,我从模拟器中删除了应用程序。

我还首先运行了清洁

我不认为这是和迎新工作有关的。在出现这种症状之前,最大的变化是Swift框架开始在工作线程而不是主线程上调用NSLog

我们可以这样静音(设备和模拟器需要不同的值):

添加名称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 ->构建设置-> + ->自定义设置中)

enter image description here