Журналирование диагностики CFNetwork
Q: Мое приложение делает широкое применение сетевых классов Основы. Когда я встречаюсь с проблемой в своих сетях, есть ли какие-либо инструменты, чтобы помочь отладить их?
A: При отладке сетевой проблемы хорошее место для запуска является трассировкой пакетов. Получение Трассировки пакетов описывает, как получить трассировку пакетов и на OS X и на iOS.
Трассировки пакетов являются очень важным инструментом, но у них есть два недостатка:
Если данные будут защищены TLS (Безопасность Транспортного уровня), или ее предшественник SSL (Уровень защищенных сокетов), то это не будет непосредственно видимо в трассировке пакетов.
Трассировка пакетов не предлагает понимания внутреннего состояния CFNetwork, платформа, реализующая ядро сетевых классов Основы.
К счастью, существует метод, избегающий обоих из этих недостатков: журналирование диагностики CFNetwork. То, когда Вы включите эту функцию CFNetwork, зарегистрирует много полезной информации о его прогрессе к файлу, который можно тогда исследовать, чтобы помочь отладить любые сетевые проблемы, с которыми Вы встречаетесь. Эта функция поддерживается и на iOS и на OS X.
Вы включаете журналирование диагностики CFNetwork через CFNETWORK_DIAGNOSTICS переменная окружения. Это должно быть установлено в целочисленное значение от 0 до 3, где 0 выключено, и более высокие числа дают Вам прогрессивно больше журналирования.
Необходимо ограничить доступ к любым журналам, которые Вы получаете.
Как только Вы получили журнал, необходимо удалить его из исходного компьютера или устройства. На iOS самый надежный способ сделать это должно удалить приложение в целом.
При создании приложения с журналированием включенного через метод, показанный в Перечислении 1 удостоверьтесь, что любой, кто получает то приложение, понимает импликации безопасности использования его.
Если Вы отправляете журнал Apple, удостоверьтесь, что любые уязвимые данные безопасности заменяются пустым местом.
Во время нормальной разработки можно установить эту переменную окружения через редактора схемы XCode. Если необходимо исследовать проблемы за пределами XCode, можно установить его программно использование кода, показанного в Перечислении 1.
Перечисление 1 , Программно разрешающее журналирование диагностики CFNetwork
setenv("CFNETWORK_DIAGNOSTICS", "3", 1); |
Необходимо сделать это правильно в начале последовательности запуска приложения. Обычно помещение этого в начале main достаточно, но если у Вас есть C++ статические инициализаторы, использующие CFNetwork, необходимо будет выполнить его перед ними.
Журналирование диагностики CFNetwork запускает при первом использовании CFNetwork — или любая платформа, как Основа, использующая CFNetwork — в которой точке это распечатает сообщение как показанный в Перечислении 2.
Перечисление 2 пример диагностики CFNetwork, регистрирующей сообщение запуска
2014-10-28 14:23:37.115 QTestbed[2626:60b] CFNetwork diagnostics log file created at: /private/var/mobile/Applications/76531F40-3291-4565-8C75-0438052C83BC/Library/Logs/CrashReporter/CFNetwork_com.example.apple-samplecode.QTestbed_2626.nwlrb.log |
На OS X можно использовать любимый текстовый редактор для открытия этого файла журнала непосредственно; это также применяется при выполнении приложения для iOS в средстве моделирования. Для приложения для iOS, работающего на вещах устройства, немного более хитры. Вы имеете две опции в наличии для Вас:
Если Вы ограничиваете устройство Mac, можно выполнить XCode и видеть журнал в окне Devices.
Если это не выполнимо, Вы можете:
выполните приложение
воспроизведите проблему
остановите приложение
подключите устройство к Mac через USB
загрузите контейнерное использование приложения XCode (снова в окне Devices)
извлеките журнал из результата .xcappdata упакованный документ
История версии документа
| Дата | Примечания |
|---|---|
| 05.03.2015 | Новый документ, описывающий диагностическое журналирование CFNetwork, важный метод отладки для приложений, использующих Основу или Базовые сети Основы. |