iOS 10: «[Приложение], если мы находимся в реальном обработчике предварительной фиксации, мы не можем добавить какие-либо новые заборы из-за ограничения CA»

389

Я иногда получаю это сообщение в журналах Xcode 8b3, когда запускаю мое приложение, кажется, что все работает, но я хотел бы знать, откуда это происходит. Гугл вообще не помог.

swalkner
источник
2
Вы вызываете метод делегата UINavigationController: fun navigationController (navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {}?
Норман Г,
2
willShowViewController никогда не называется, нет ...
swalkner
Я получаю то же самое. Я использую SpriteKit и SceneKit и подозреваю их!
Говард Ловатт
3
Кто-нибудь подает отчет об ошибке? Я собираюсь.
Дэвид ДельМонте
1
Пожалуйста, посмотрите на этот ответ. stackoverflow.com/a/39997761/6602495
Снеха

Ответы:

285

в вашем Xcode:

  • Нажмите на название вашей активной схемы прямо рядом с кнопкой Стоп
  • Нажмите на Редактировать схему ....
  • в Run (Debug) выберите вкладку Arguments
  • в переменных среды нажмите +
  • добавить переменную: OS_ACTIVITY_MODE = отключить

Скриншот

Издание
источник
4
Спасибо за дополнительную информацию
Amergin
26
Имейте в виду, что я случайно не получал вывод NSLog на консоль и удалил это снова, чтобы это исправить. Это больше «высококлассное» программирование, которому мы подвергаемся в компании Apple.
Amergin
37
Что бы это ни стоило, я получаю это сообщение всякий раз, когда происходит изменение ориентации, и у меня действительно отключена переменная среды OS_ACTIVITY_MODE.
user2698617 28.12.16
5
Примечание: добавив это, вы также не увидите NSLogs в консоли.
niravdesai21
4
Разве это не похоже на выключение пожарной сигнализации?
ScottyBlades
191

Это происходит +[UIWindow _synchronizeDrawingAcrossProcessesOverPort:withPreCommitHandler:]через API os_log. Он не зависит от других компонентов / каркасов, которые вы используете (только от UIKit) - он воспроизводит в чистом проекте приложения единого представления при изменении ориентации интерфейса.

Этот метод состоит из 2 частей:

  1. добавление переданного обработчика precommit в список обработчиков;
  2. выполнить некоторую работу, которая зависит от текущего состояния конечного автомата.

Когда вторая часть выходит из строя (выглядит как запрещенный переход), она печатает сообщение выше в журнал ошибок. Тем не менее, я думаю, что эта проблема не является фатальной: в этом методе есть 2 дополнительных случая подтверждения, которые приведут к сбою при отладке.

Кажется, что радар - лучшее, что мы можем сделать.

Роман Ермолов
источник
1
Не могли бы вы рассказать о инструментах, которые вы использовали для отладки, чтобы получить имя этого частного метода и его структуру?
Александр Караберов
9
@AlexanderKaraberov Вы можете использовать Hopper Disassembler, чтобы найти текст предупреждения в двоичном формате фреймворка и ссылки на этот текст из частного метода.
k06a
Я также получаю это, когда клавиатура прокручивается, и у меня есть контроллер, подписанный, чтобы ответить изменением его представлений.
yo.ian.g
82

Попробуйте вставить следующее environment variablesдля схемы подrun(debug)

OS_ACTIVITY_MODE = disable
Ник Пичи
источник
Я получил это в симуляторе при вращении iPhone 7 с помощью пунктов меню «аппаратное обеспечение» - «поворот». Эта переменная окружения убрала ложное сообщение.
Джордж Д Гиртон
1
Ответ от @Foo ниже полезен, потому что он включает в себя подробные инструкции.
Кевин Оуэнс
1
Также не печатается журнал предупреждений об ограничениях
чираг шах
36
ОП спросил, откуда пришло сообщение. Просто сказать, как заставить замолчать, это не правильный ответ.
iCaramba
6
Ответ "IOS_ACTIVITY_MODE = disable" отключает ВСЕ записи! Просто закройте окно регистрации, если вы не хотите видеть журнал. Действительно смешной ответ, удивительно, что у него так много голосов! Ничего не предпринимает для решения фактического сообщения. Наши приложения, которые интенсивно используют основные данные, работают нормально, эти сообщения и другие начали появляться после одного из последних обновлений XCode. Грустно, что Apple не может решить такие проблемы.
Джон
13

Мы можем отключить его таким образом (устройству и симулятору нужны разные значения):

Добавьте Имя OS_ACTIVITY_MODEи Значение ${DEBUG_ACTIVITY_MODE}и проверьте его (в Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment).

введите описание изображения здесь

Добавить определяемых пользователем Настройка DEBUG_ACTIVITY_MODE, а затем добавить Any iOS Simulator SDKк Debugи установите его значение disable(в Project -> Настройки Build -> + -> User-Defined Setting)

введите описание изображения здесь

Игорь
источник
У меня не сработало: я также вижу это в консоли, несмотря на то, что уже отключил режим отладочной активности, как предложено выше.
Йохан
-1

Чтобы исправить, я удалил приложение из симулятора.

Я также побежал Чистым первым.

Я не думаю, что что-либо связанное с ориентацией вызвало это. Самое главное, что изменилось до появления этого симптома, это то, что среда Swift начала вызывать NSLogрабочие потоки вместо основного потока.

Джефф
источник
1
Вначале выполнение очистки работало нормально, когда я запускал его в симуляторе, не поворачивая его, но затем, как только я снова проверил его с помощью команды вращения, он сообщил об ошибке.
Cheznead
Я использую панорамирование и получаю эту ошибку только при смене ориентации.
Джереми Эндрюс
-8
OS_ACTIVITY_MODE = disable

Это также отключит возможность отладки на реальных устройствах (с этого момента не будет выводиться консоль с реальных устройств).

kindaian
источник
6
Вы только что скопировали более ранний ответ (с меньшими подробностями)
Эшли Миллс
2
на самом деле помогает TL; DR.
Хуан Дже Гарсия