[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/guides/ios/debug-network-requests":3,"mdc-zidz4n-key":474,"mdc--dh9ycf-key":485,"mdc--361d3s-key":493,"mdc-h6ujam-key":501,"mdc-hlexqd-key":509,"mdc-rnep92-key":517,"mdc--8rgty7-key":525,"mdc--xxa4lt-key":533,"mdc--v9b2tv-key":541,"related-/guides/ios/debug-http-requests,/guides/ios/use-charles-proxy,/guides/ios/debug-app-crash":549},{"id":4,"title":5,"appliesTo":6,"author":8,"body":9,"canonical":409,"code":409,"createdAt":410,"description":411,"difficulty":412,"draft":413,"estimatedTime":414,"extension":415,"faq":416,"howToSteps":429,"howToTotalTime":445,"image":409,"keywords":446,"locale":455,"meta":456,"navigation":457,"path":458,"platform":459,"related":460,"section":464,"seo":465,"severity":409,"stem":466,"summary":467,"tags":468,"twitterCreator":409,"twitterSite":409,"type":472,"updatedAt":410,"__hash__":473},"content_ru/guides/ios/debug-network-requests.md","Как отладить сетевые запросы в iOS-приложении за 5 минут",[7],"iOS 15, iOS 16, iOS 17","FixPedia Team",{"type":10,"value":11,"toc":391},"minimark",[12,17,21,25,44,48,52,70,73,99,103,139,143,208,211,215,220,242,246,265,269,311,314,318,341,344,348,388],[13,14,16],"h2",{"id":15},"введение","Введение",[18,19,20],"p",{},"Когда iOS-приложение неожиданно перестает отправлять данные, отображает устаревший контент или работает медленно, первое, что нужно сделать — это посмотреть, что именно происходит в сети. В этом руководстве вы узнаете, как быстро отладить сетевые запросы, используя встроенные инструменты разработки Xcode, браузерный Web Inspector и сторонний инструмент Charles Proxy. После выполнения этих шагов вы сможете выявлять причины сетевых ошибок, эмулировать реалистичные условия соединения и сохранять логи для дальнейшего анализа.",[13,22,24],{"id":23},"требования","Требования",[26,27,28,32,35,38,41],"ul",{},[29,30,31],"li",{},"macOS 12+ (Monterey) или более новая.",[29,33,34],{},"Xcode 14+ (в комплекте с последними инструментами разработчика).",[29,36,37],{},"iOS-устройство на iOS 15–17 (iPhone, iPad) с включённым Режимом разработчика.",[29,39,40],{},"USB-кабель для подключения устройства к Mac.",[29,42,43],{},"Charles Proxy (бесплатная пробная версия или лицензия) и сертификат Root CA, установленный на устройстве.",[13,45,47],{"id":46},"пошаговая-инструкция","Пошаговая инструкция",[13,49,51],{"id":50},"шаг-1-включить-web-inspector-и-подключить-устройство","Шаг 1: Включить Web Inspector и подключить устройство",[18,53,54,55,59,60,59,63,59,66,69],{},"Откройте ",[56,57,58],"strong",{},"Настройки"," → ",[56,61,62],{},"Safari",[56,64,65],{},"Показать отладку",[56,67,68],{},"Включить Web Inspector",". Это позволит Safari на Mac отслеживать сетевые запросы, идущие от iOS-приложения.",[18,71,72],{},"Подключите iPhone/iPad к Mac по USB. На устройстве убедитесь, что включён Режим разработчика:",[74,75,76,87],"ol",{},[29,77,54,78,59,80,59,83,86],{},[56,79,58],{},[56,81,82],{},"Основы",[56,84,85],{},"О программе",".",[29,88,89,90,94,95,98],{},"Тапните по ",[91,92,93],"code",{},"IPA"," (или ",[91,96,97],{},"Build",") 10 раз — Режим разработчика активируется.",[13,100,102],{"id":101},"шаг-2-использовать-network-inspector-в-xcode","Шаг 2: Использовать Network Inspector в Xcode",[74,104,105,112,122,136],{},[29,106,107,108,111],{},"Запустите ",[56,109,110],{},"Xcode"," и откройте проект вашего приложения.",[29,113,114,115,59,118,121],{},"Перейдите во вкладку ",[56,116,117],{},"Инспектор",[56,119,120],{},"Сеть",". В правом верхнем углу выберите подключённое iOS-устройство.",[29,123,124,125],{},"Запустите приложение (⌘ + R). В инспекторе отображаются все HTTP/HTTPS запросы с деталями:\n",[26,126,127,130,133],{},[29,128,129],{},"URL и HTTP-метод.",[29,131,132],{},"Код ответа (например, 200, 404, 500).",[29,134,135],{},"Размер тела и время загрузки.",[29,137,138],{},"Щёлкните по запросу, чтобы увидеть исходящие/входящие заголовки и тело (если закодировано в JSON, body отображается в читаемом виде).",[13,140,142],{"id":141},"шаг-3-настроить-charles-proxy-для-перехвата-трафика","Шаг 3: Настроить Charles Proxy для перехвата трафика",[74,144,145,156,159,175,188],{},[29,146,147,148,151,152,155],{},"Скачайте и установите ",[56,149,150],{},"Charles Proxy"," (",[91,153,154],{},"https://www.charlesproxy.com/",").",[29,157,158],{},"Подключите iOS-устройство к той же Wi-Fi сети, что и Mac.",[29,160,161,162,59,164,167,168,171,172,86],{},"На устройстве перейдите в ",[56,163,58],{},[56,165,166],{},"Профили и инструменты управления устройствами"," → найдите сертификат ",[56,169,170],{},"Charles Root CA"," и нажмите ",[56,173,174],{},"Установить",[29,176,177,178,59,181,184,185,86],{},"В Charles перейдите в ",[56,179,180],{},"Proxy",[56,182,183],{},"Proxy Settings"," и убедитесь, что включён режим ",[56,186,187],{},"Allow",[29,189,190,191,59,193,196,197,59,200,203,204,207],{},"На iOS-устройстве перейдите в ",[56,192,58],{},[56,194,195],{},"Wi-Fi",", тапните по активной сети, в разделе DNS установите ",[56,198,199],{},"DNS Settings",[56,201,202],{},"Manual"," и добавьте ",[91,205,206],{},"127.0.0.1",". Подтвердите изменение подключения.",[18,209,210],{},"Теперь все HTTP/HTTPS запросы приложения пройдут через Charles.",[13,212,214],{"id":213},"шаг-4-эмулировать-сетевые-условия","Шаг 4: Эмулировать сетевые условия",[216,217,219],"h3",{"id":218},"в-xcode","В Xcode",[74,221,222,225,239],{},[29,223,224],{},"Выберите устройство в интерфейсе запуска.",[29,226,227,228,231,232,235,236,86],{},"Перейдите в ",[56,229,230],{},"Device → Network"," и выберите режим ",[56,233,234],{},"Slow 3G"," или ",[56,237,238],{},"Lossy Network",[29,240,241],{},"Запустите приложение — теперь запросы будут обрабатываться с искусственно большим latency и packet loss.",[216,243,245],{"id":244},"в-charles","В Charles",[74,247,248,253,259],{},[29,249,227,250,86],{},[56,251,252],{},"Proxy → Options → SSL Proxying",[29,254,255,256,86],{},"Включите ",[56,257,258],{},"Enable SSL Proxying",[29,260,255,261,264],{},[56,262,263],{},"Preview"," для конкретного домена, чтобы видеть полные запросы/ответы в реальном времени.",[13,266,268],{"id":267},"шаг-5-проанализировать-логи-и-исправить-проблему","Шаг 5: Проанализировать логи и исправить проблему",[74,270,271,282,293,300],{},[29,272,273,274,277,278,281],{},"В ",[56,275,276],{},"Network Inspector"," (Xcode) или ",[56,279,280],{},"Console"," (Charles) найдите запрос с ошибкой (коды 4xx/5xx, длительностью >5 сек).",[29,283,284,285,288,289,292],{},"Проверьте URL, заголовки (",[91,286,287],{},"User-Agent",", ",[91,290,291],{},"Authorization",") и payload на корректность.",[29,294,295,296,299],{},"Если проблема в сервере, используйте браузер на Mac (",[91,297,298],{},"Cmd+Shift+2",") для проверки того же URL.",[29,301,302,303,306,307,310],{},"Для Charles сохраните сессию: ",[56,304,305],{},"File → Save Session As…"," → выберите формат ",[91,308,309],{},".cap",". Это удобно для последующего анализа или отправки разработчикам бэкенда.",[312,313],"in-article-ad",{},[13,315,317],{"id":316},"проверка-результата","Проверка результата",[26,319,320,326,332],{},[29,321,322,325],{},[56,323,324],{},"Сетевой трафик",": в Network Inspector (Xcode) или Charles отображаются все ожидаемые запросы с успешными статусами.",[29,327,328,331],{},[56,329,330],{},"Производительность",": задержка соответствует выбранным сетевым условиям (например, ~200–300 мс для Slow 3G).",[29,333,334,337,338,340],{},[56,335,336],{},"Логи",": экспортированные ",[91,339,309],{},"-файлы содержат полную историю запросов без пропущенных записей.",[18,342,343],{},"Если всё отображается корректно, вы можете быть уверены, что сетевые ошибки устранены.",[13,345,347],{"id":346},"возможные-проблемы","Возможные проблемы",[26,349,350,356,365,382],{},[29,351,352,355],{},[56,353,354],{},"Сертификат Charles не установлен"," – запросите установку заново в профиле устройства.",[29,357,358,361,362,155],{},[56,359,360],{},"Запросы не проходят через Charles"," – убедитесь, что прокси настроен правильно (",[91,363,364],{},"Settings → Wi-Fi → Configure Proxy",[29,366,367,370,371,374,375,378,379,86],{},[56,368,369],{},"Network Inspector показывает пустой список"," – убедитесь, что приложение не использует ",[91,372,373],{},"NSURLConnection","/",[91,376,377],{},"URLSession"," напрямую без поддержки HTTPS, проверьте параметры ",[91,380,381],{},"NSExceptionDomains",[29,383,384,387],{},[56,385,386],{},"Эмуляция сетевых условий не влияет на запросы"," – перезапустите симулятор/устройство и проверьте, что выбранные настройки активны.",[18,389,390],{},"Следуя этим шагам, вы сможете быстро выявлять и исправлять любые сетевые проблемы в iOS-приложениях. Удачной отладки!",{"title":392,"searchDepth":393,"depth":393,"links":394},"",2,[395,396,397,398,399,400,401,406,407,408],{"id":15,"depth":393,"text":16},{"id":23,"depth":393,"text":24},{"id":46,"depth":393,"text":47},{"id":50,"depth":393,"text":51},{"id":101,"depth":393,"text":102},{"id":141,"depth":393,"text":142},{"id":213,"depth":393,"text":214,"children":402},[403,405],{"id":218,"depth":404,"text":219},3,{"id":244,"depth":404,"text":245},{"id":267,"depth":393,"text":268},{"id":316,"depth":393,"text":317},{"id":346,"depth":393,"text":347},null,"2026-07-25 09:14:26","Пошаговое руководство по отладке сетевых запросов в iOS. Узнайте, как использовать Network Inspector, Charles Proxy и инструменты разработчика для быстрого устранения проблем с подключением.","medium",false,"5-10 мин","md",[417,420,423,426],{"question":418,"answer":419},"Как начать отладку сетевых запросов в iOS?","Включите отладку в Safari Web Inspector (Настройки → Safari → Показать отладку → Включить Web Inspector) и подключите устройство к компьютеру Mac.",{"question":421,"answer":422},"Какие инструменты лучше для отладки запросов?","Native Network Inspector в Xcode, Charles Proxy для перехвата HTTP/HTTPS трафика и встроенный Network Logger в Instruments.",{"question":424,"answer":425},"Как эмулировать медленное соединение?","Используйте опцию «Эмуляция сетевых условий» в Xcode (Device → Network → Slow 3G) или настройки «Сетевой режим» в Charles Proxy.",{"question":427,"answer":428},"Как сохранить логи сетевых запросов для последующего анализа?","В Xcode экспортируйте логи через «Save As...» в Instruments, в Charles Proxy сохраните капчу в формате .cap.",[430,433,436,439,442],{"name":431,"text":432},"Включить Web Inspector и подключить устройство","Откройте Настройки → Safari → Показать отладку → Включить Web Inspector. Подключите iPhone/iPad к Mac по USB и убедитесь, что на устройстве включён Режим разработчика (Настройки → Основы → О программе → IPA на 10 раз).",{"name":434,"text":435},"Использовать Network Inspector в Xcode","Откройте проект в Xcode, перейдите во вкладку «Инспектор» → «Сеть». Выберите активное устройство и запустите приложение. В inspector отображаются исходящие и входящие HTTP/HTTPS запросы, заголовки, тело и статус ответа.",{"name":437,"text":438},"Настроить Charles Proxy для перехвата трафика","Скачайте Charles Proxy, установите сертификат Root CA на iOS-устройстве (Настройки → Профили и инструменты управления устройствами → установить сертификат). Настройте прокси в Wi-Fi сети. Все запросы приложения пройдут через Charles.",{"name":440,"text":441},"Эмулировать сетевые условия","В Xcode выберите устройство → Network → Slow 3G или Lossy Network, чтобы симулировать медленное соединение и потери пакетов. В Charles включите режим «Preview» для просмотра трафика в реальном времени.",{"name":443,"text":444},"Проанализировать логи и исправить проблему","Проверьте статус коды ответов, длину payload и время загрузки. Отфильтруйте ошибки (например, 404, 500). Если проблема в запросе, исправьте URL, заголовки или параметры. В Charles сохраните сессию в формате .cap для дальнейшего анализа.","PT8M",[447,448,449,450,451,452,453,454],"отладка сетевых запросов iOS","debug network requests iOS","Network Inspector iOS","Charles Proxy iOS","инструменты разработчика iOS","решение проблем сети iOS","коды ошибок сетевых запросов iOS","тестирование подключения iOS","ru_RU",{},true,"/guides/ios/debug-network-requests","ios",[461,462,463],"/guides/ios/debug-http-requests","/guides/ios/use-charles-proxy","/guides/ios/debug-app-crash","Гайды iOS",{"title":5,"description":411},"guides/ios/debug-network-requests","Когда iOS-приложение не отсылает данные или медленно работает, важно увидеть, что именно происходит в сети. В этом гайде вы научитесь использовать встроенные инструменты разработчика, эмулятор сетевых условий и сторонние инструменты, чтобы быстро диагностировать и исправить любые сетевые ошибки.",[469,470,471,276,150],"iOS","отладка","сеть","guide","BARYU6wVJDI1Lv5tNoD5eWPccuixxiL-ceWbhgSCiC0",{"data":475,"body":476},{},{"type":477,"children":478},"root",[479],{"type":480,"tag":18,"props":481,"children":482},"element",{},[483],{"type":484,"value":419},"text",{"data":486,"body":487},{},{"type":477,"children":488},[489],{"type":480,"tag":18,"props":490,"children":491},{},[492],{"type":484,"value":422},{"data":494,"body":495},{},{"type":477,"children":496},[497],{"type":480,"tag":18,"props":498,"children":499},{},[500],{"type":484,"value":425},{"data":502,"body":503},{},{"type":477,"children":504},[505],{"type":480,"tag":18,"props":506,"children":507},{},[508],{"type":484,"value":428},{"data":510,"body":511},{},{"type":477,"children":512},[513],{"type":480,"tag":18,"props":514,"children":515},{},[516],{"type":484,"value":432},{"data":518,"body":519},{},{"type":477,"children":520},[521],{"type":480,"tag":18,"props":522,"children":523},{},[524],{"type":484,"value":435},{"data":526,"body":527},{},{"type":477,"children":528},[529],{"type":480,"tag":18,"props":530,"children":531},{},[532],{"type":484,"value":438},{"data":534,"body":535},{},{"type":477,"children":536},[537],{"type":480,"tag":18,"props":538,"children":539},{},[540],{"type":484,"value":441},{"data":542,"body":543},{},{"type":477,"children":544},[545],{"type":480,"tag":18,"props":546,"children":547},{},[548],{"type":484,"value":444},[550],{"id":551,"title":552,"appliesTo":553,"author":8,"body":557,"canonical":409,"code":392,"createdAt":1044,"description":1045,"difficulty":412,"draft":413,"estimatedTime":414,"extension":415,"faq":1046,"howToSteps":1059,"howToTotalTime":445,"image":409,"keywords":1075,"locale":455,"meta":1084,"navigation":457,"path":461,"platform":459,"related":1085,"section":464,"seo":1088,"severity":392,"stem":1089,"summary":1090,"tags":1091,"twitterCreator":409,"twitterSite":409,"type":472,"updatedAt":1044,"__hash__":1097},"content_ru/guides/ios/debug-http-requests.md","Как отладить HTTP-запросы в iOS: пошаговое руководство",[554,555,556],"iOS 15","iOS 16","iOS 17",{"type":10,"value":558,"toc":1031},[559,563,569,573,598,600,604,611,640,659,663,666,820,828,832,837,855,859,862,885,892,894,898,907,925,929,932,966,969,971,974,985,988,990,1024,1027],[13,560,562],{"id":561},"введение-зачем-это-нужно","Введение / Зачем это нужно",[18,564,565,566,568],{},"В iOS-приложениях почти каждый запрос к серверу выполняется через ",[91,567,377],{},". Когда данные не приходят, приходят с ошибками или приложение ведет себя странно, важно быстро найти причину. Встроенные инструменты отладки Xcode позволяют увидеть исходящие и входящие пакеты, а дополнительные утилиты (эмулятор сети, HTTP-прокси, консоль разработчика Safari) расширяют возможности диагностики. После выполнения этого гайда вы сможете выявлять ошибки подключения, проверять ответы сервера и тестировать работу приложения в различных сетевых условиях.",[13,570,572],{"id":571},"требования-подготовка","Требования / Подготовка",[26,574,575,581,587,590,595],{},[29,576,577,578,580],{},"Последняя версия ",[56,579,110],{}," (включает Network Debugger и Network Link Conditioner).",[29,582,583,584,586],{},"Установленный ",[56,585,150],{}," (или аналогичный HTTP-прокси) для перехвата трафика.",[29,588,589],{},"Устройство эмулятора iOS с подключением к интернету.",[29,591,592,593,86],{},"Базовые знания Swift и работы с ",[91,594,377],{},[29,596,597],{},"Доступ к консоли разработчика Safari (в macOS).",[13,599,47],{"id":46},[216,601,603],{"id":602},"шаг-1-включить-логирование-сетевых-запросов-в-xcode","Шаг 1: Включить логирование сетевых запросов в Xcode",[18,605,606,607,610],{},"Включите встроенный логгер сетевых запросов, чтобы видеть все HTTP-запросы в панели ",[91,608,609],{},"Network"," во время выполнения приложения.",[74,612,613,619,630],{},[29,614,615,616,155],{},"Запустите приложение в Xcode (",[91,617,618],{},"Product → Run",[29,620,621,622,625,626,629],{},"В меню ",[91,623,624],{},"Debug"," выберите ",[56,627,628],{},"Network Logging"," (или используйте значок лупы в нижней панели Instruments).",[29,631,632,633,636,637,639],{},"Переключите ползунок в положение ",[56,634,635],{},"ON"," — теперь каждый запрос ",[91,638,377],{}," будет отображаться в списке.",[641,642,643],"blockquote",{},[18,644,645,648,649,651,652,655,656,155],{},[56,646,647],{},"💡 Совет:"," Если панель ",[91,650,609],{}," отсутствует, откройте ",[91,653,654],{},"Window → Development → Show Console"," и убедитесь, что отладка включена (",[91,657,658],{},"Product → Scheme → Debug",[216,660,662],{"id":661},"шаг-2-добавить-кастомный-делегат-urlsession","Шаг 2: Добавить кастомный делегат URLSession",[18,664,665],{},"Кастомный делегат позволяет записывать детали каждого запроса и ответа напрямую в консоль, что полезно для отладки сложных сценариев.",[667,668,672],"pre",{"className":669,"code":670,"language":671,"meta":392,"style":392},"language-swift shiki shiki-themes github-light github-dark","import Foundation\n\nclass NetworkLogger: URLSessionTaskDelegate {\n    func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {\n        let request = task.currentRequest\n        let response = task.response as? HTTPURLResponse\n\n        var log = \"📤 Request: \\(String(describing: request?.httpMethod)) \\(String(describing: request?.url))\\n\"\n        log += \"📥 Response: \\(response?.statusCode ?? 0)\\n\"\n        if let err = error {\n            log += \"❌ Error: \\(err.localizedDescription)\"\n        }\n        print(log)\n    }\n\n    // Дополнительные методы при необходимости\n    func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {\n        completionHandler(.useCredential, URLCredential(trust: challenge.protectionSpace.serverTrust!))\n    }\n}\n\n// Использование\nlet config = URLSessionConfiguration.default\nlet logger = NetworkLogger()\nlet session = URLSession(configuration: config, delegate: logger, delegateQueue: nil)\n","swift",[91,673,674,682,687,692,698,704,710,715,721,727,733,739,745,751,757,762,768,774,780,785,791,796,802,808,814],{"__ignoreMap":392},[675,676,679],"span",{"class":677,"line":678},"line",1,[675,680,681],{},"import Foundation\n",[675,683,684],{"class":677,"line":393},[675,685,686],{"emptyLinePlaceholder":457},"\n",[675,688,689],{"class":677,"line":404},[675,690,691],{},"class NetworkLogger: URLSessionTaskDelegate {\n",[675,693,695],{"class":677,"line":694},4,[675,696,697],{},"    func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {\n",[675,699,701],{"class":677,"line":700},5,[675,702,703],{},"        let request = task.currentRequest\n",[675,705,707],{"class":677,"line":706},6,[675,708,709],{},"        let response = task.response as? HTTPURLResponse\n",[675,711,713],{"class":677,"line":712},7,[675,714,686],{"emptyLinePlaceholder":457},[675,716,718],{"class":677,"line":717},8,[675,719,720],{},"        var log = \"📤 Request: \\(String(describing: request?.httpMethod)) \\(String(describing: request?.url))\\n\"\n",[675,722,724],{"class":677,"line":723},9,[675,725,726],{},"        log += \"📥 Response: \\(response?.statusCode ?? 0)\\n\"\n",[675,728,730],{"class":677,"line":729},10,[675,731,732],{},"        if let err = error {\n",[675,734,736],{"class":677,"line":735},11,[675,737,738],{},"            log += \"❌ Error: \\(err.localizedDescription)\"\n",[675,740,742],{"class":677,"line":741},12,[675,743,744],{},"        }\n",[675,746,748],{"class":677,"line":747},13,[675,749,750],{},"        print(log)\n",[675,752,754],{"class":677,"line":753},14,[675,755,756],{},"    }\n",[675,758,760],{"class":677,"line":759},15,[675,761,686],{"emptyLinePlaceholder":457},[675,763,765],{"class":677,"line":764},16,[675,766,767],{},"    // Дополнительные методы при необходимости\n",[675,769,771],{"class":677,"line":770},17,[675,772,773],{},"    func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {\n",[675,775,777],{"class":677,"line":776},18,[675,778,779],{},"        completionHandler(.useCredential, URLCredential(trust: challenge.protectionSpace.serverTrust!))\n",[675,781,783],{"class":677,"line":782},19,[675,784,756],{},[675,786,788],{"class":677,"line":787},20,[675,789,790],{},"}\n",[675,792,794],{"class":677,"line":793},21,[675,795,686],{"emptyLinePlaceholder":457},[675,797,799],{"class":677,"line":798},22,[675,800,801],{},"// Использование\n",[675,803,805],{"class":677,"line":804},23,[675,806,807],{},"let config = URLSessionConfiguration.default\n",[675,809,811],{"class":677,"line":810},24,[675,812,813],{},"let logger = NetworkLogger()\n",[675,815,817],{"class":677,"line":816},25,[675,818,819],{},"let session = URLSession(configuration: config, delegate: logger, delegateQueue: nil)\n",[641,821,822],{},[18,823,824,827],{},[56,825,826],{},"⚠️ Важно:"," Для работы делегата убедитесь, что проект подписан (сертификат разработчика) и включена отладочная информация.",[216,829,831],{"id":830},"шаг-3-перехватить-трафик-через-эмулятор-сети-или-proxy","Шаг 3: Перехватить трафик через эмулятор сети или proxy",[833,834,836],"h4",{"id":835},"_31-симуляция-условий-сети-network-link-conditioner","3.1. Симуляция условий сети (Network Link Conditioner)",[74,838,839,845,852],{},[29,840,841,842,86],{},"В Xcode откройте ",[56,843,844],{},"Features → Network Link Conditioner",[29,846,847,848,155],{},"Выберите один из предустановленных профилей (например, ",[849,850,851],"em",{},"Bad 3G",[29,853,854],{},"Запустите приложение и наблюдайте, как оно ведет себя при ограниченном bandwidth и высокой задержке.",[833,856,858],{"id":857},"_32-перехват-трафика-через-http-прокси","3.2. Перехват трафика через HTTP-прокси",[18,860,861],{},"Установите Charles Proxy (или аналогичный) и настройте устройство/эмулятор на его использование:",[667,863,867],{"className":864,"code":865,"language":866,"meta":392,"style":392},"language-bash shiki shiki-themes github-light github-dark","# В настройках сети устройства укажите прокси:\n# IP-адрес Mac, где работает Charles: 192.168.1.1\n# Порт: 8888\n","bash",[91,868,869,875,880],{"__ignoreMap":392},[675,870,871],{"class":677,"line":678},[675,872,874],{"class":873},"sJ8bj","# В настройках сети устройства укажите прокси:\n",[675,876,877],{"class":677,"line":393},[675,878,879],{"class":873},"# IP-адрес Mac, где работает Charles: 192.168.1.1\n",[675,881,882],{"class":677,"line":404},[675,883,884],{"class":873},"# Порт: 8888\n",[18,886,887,888,891],{},"В Charles включите ",[56,889,890],{},"Proxy → Proxy Options → Enable transparent proxy",", чтобы перехватывать HTTPS-трафик.",[312,893],{},[216,895,897],{"id":896},"шаг-4-использовать-инструменты-разработчика-safari-для-проверки-запросов","Шаг 4: Использовать инструменты разработчика Safari для проверки запросов",[18,899,900,901,903,904,86],{},"Safari может показывать исходящие запросы, что полезно для проверки запросов, идущих через ",[91,902,377],{}," с ",[91,905,906],{},"URLSessionConfiguration.allowsCellularAccess = true",[74,908,909,915,922],{},[29,910,911,912,86],{},"В Safari откройте ",[56,913,914],{},"Разработчик → Показать веб-консоль",[29,916,917,918,921],{},"Нажмите на значок ",[56,919,920],{},"Эмуляция сетевого окружения"," (иконка радиоволны) и выберите, например, «Slow 3G».",[29,923,924],{},"Перезапустите приложение в симуляторе и выполните действия, которые инициируют сетевые запросы. В консоли вы увидите полный путь запроса, заголовки и тело ответа.",[216,926,928],{"id":927},"шаг-5-проверить-и-оптимизировать-логи","Шаг 5: Проверить и оптимизировать логи",[18,930,931],{},"После выполнения предыдущих шагов проанализируйте собранную информацию:",[26,933,934,940,954,960],{},[29,935,936,939],{},[56,937,938],{},"Статус коды:"," 200‑299 — успех, 400‑499 — клиентские ошибки, 500‑599 — серверные ошибки.",[29,941,942,945,946,288,949,288,952,86],{},[56,943,944],{},"Заголовки:"," обратите внимание на ",[91,947,948],{},"Content-Type",[91,950,951],{},"Cache-Control",[91,953,291],{},[29,955,956,959],{},[56,957,958],{},"Тело ответа:"," убедитесь, что парсинг JSON/XML не вызывает ошибок.",[29,961,962,965],{},[56,963,964],{},"Время выполнения:"," в панели Network отметьте задержки и возможные тайм-ауты.",[18,967,968],{},"Если проблема выявлена, внесите необходимые изменения (корректные URL, токены, обработку ошибок) и повторите цикл отладки.",[13,970,317],{"id":316},[18,972,973],{},"После внесения изменений запустите приложение в режиме отладки и выполните те же действия, которые вызвали ошибку ранее. Убедитесь, что:",[26,975,976,979,982],{},[29,977,978],{},"Запросы отображаются в панели Network с правильными статусами.",[29,980,981],{},"Кастомный делегат выводит лог в консоль без ошибок.",[29,983,984],{},"В Safari (или эмуляторе сети) трафик соответствует ожидаемому.",[18,986,987],{},"Если всё отображается корректно, отладка успешна завершена.",[13,989,347],{"id":346},[26,991,992,1005,1018],{},[29,993,994,997,998,1000,1001,1004],{},[56,995,996],{},"Запросы не отображаются в Network:"," Убедитесь, что запросы выполняются через ",[91,999,377],{}," (а не через ",[91,1002,1003],{},"URLSession.shared.dataTask","). Проверьте, что логирование сетевых запросов действительно включено.",[29,1006,1007,1010,1011,59,1014,1017],{},[56,1008,1009],{},"Прокси не перехватывает HTTPS:"," Убедитесь, что сертификат Charles доверен (",[91,1012,1013],{},"Edgewise Proxy",[91,1015,1016],{},"Certificates","). Добавьте сертификат в доверенные корневые сертификаты устройства.",[29,1019,1020,1023],{},[56,1021,1022],{},"Network Link Conditioner не влияет на трафик:"," Убедитесь, что эмулятор сети подключен к Wi-Fi/Cellular и что профиль активирован перед запуском приложения.",[18,1025,1026],{},"С этими инструментами вы сможете быстро выявлять и устранять любые сетевые проблемы в iOS-приложениях. Удачной отладки!",[1028,1029,1030],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":392,"searchDepth":393,"depth":393,"links":1032},[1033,1034,1035,1042,1043],{"id":561,"depth":393,"text":562},{"id":571,"depth":393,"text":572},{"id":46,"depth":393,"text":47,"children":1036},[1037,1038,1039,1040,1041],{"id":602,"depth":404,"text":603},{"id":661,"depth":404,"text":662},{"id":830,"depth":404,"text":831},{"id":896,"depth":404,"text":897},{"id":927,"depth":404,"text":928},{"id":316,"depth":393,"text":317},{"id":346,"depth":393,"text":347},"2026-08-07 19:49:50","Узнайте, как быстро отладить HTTP-запросы в iOS с помощью инструментов Xcode и консоли. Пошаговая инструкция поможет вам выявить ошибки, проверить ответы и оптимизировать сетевое взаимодействие за 5 минут.",[1047,1050,1053,1056],{"question":1048,"answer":1049},"Как включить логирование сетевых запросов в Xcode?","Включите опцию «Debug > Network Logging» в меню «Product» или добавьте делегат URLSessionTaskDelegate, чтобы вручную записывать запросы и ответы.",{"question":1051,"answer":1052},"Можно ли перехватывать трафик без физического подключения?","Да, используйте эмулятор сети в Xcode, инструмент Network Link Conditioner или локальный HTTP-proxy, например Charles Proxy, настроенный для работы в режиме «Bridge».",{"question":1054,"answer":1055},"Что делать, если запросы не показываются в отладчике?","Убедитесь, что запросы выполняются через URLSession, проверьте включение логирования и убедитесь, что устройство эмулятора подключено к интернету.",{"question":1057,"answer":1058},"Как протестировать работу приложения при плохом соединении?","Включите Network Link Conditioner, выберите профиль «Bad 3G» и запустите тестовые запросы, чтобы увидеть, как приложение обрабатывает нестабильный трафик.",[1060,1063,1066,1069,1072],{"name":1061,"text":1062},"Включить логирование сетевых запросов в Xcode","Откройте Xcode → выберите проект → перейдите в «Scheme» → «Run» → в меню «Debug» включите опцию «Network Logging». Это позволит видеть все HTTP-запросы в панели «Network».",{"name":1064,"text":1065},"Добавить кастомный делегат URLSession","Создайте класс, унаследованный от `URLSessionTaskDelegate`, и имплементируйте методы `willPerformHTTPRedirection`, `didReceiveChallenge`, `didCompleteWithError`. Присвоите экземпляр делегата `URLSessionConfiguration` и используйте его в `URLSession`.",{"name":1067,"text":1068},"Перехватить трафик через эмулятор сети или proxy","Для симуляции различных условий используйте **Network Link Conditioner** (Xcode → «Features» → «Network Link Conditioner»). Для перехвата трафика установите Charles Proxy или аналогичный инструмент и настройте устройство/эмулятор на использование локального прокси (`192.168.1.1:8888`).",{"name":1070,"text":1071},"Использовать инструменты разработчика Safari для проверки запросов","В Safari откройте «Разработчик → Показать веб-консоль» и активируйте «Эмуляция сетевого окружения», чтобы видеть исходящие запросы и ответы напрямую.",{"name":1073,"text":1074},"Проверить и оптимизировать логи","Проанализируйте записи в консоли и в панели «Network», найдите ошибки (например, 404, 500), проверьте заголовки, тело запроса и ответов. Устраните проблемы, повторите шаги.",[1076,447,1077,1078,1079,1080,1081,1082,1083],"iOS debug HTTP requests","Xcode Network Debugger","URLSession отладка","код ошибки HTTP","проверка запросов iOS","console.log HTTP","инструменты разработчика Safari","Network Link Conditioner",{},[458,1086,1087],"/guides/ios/urlsession-guide","/errors/ios/http-404-ios",{"title":552,"description":1045},"guides/ios/debug-http-requests","HTTP-запросы могут вызывать проблемы в iOS-приложениях — от отсутствия соединения до неправильного парсинга данных. Это руководство покажет, как использовать встроенные инструменты отладки, эмулятор сети и сторонние утилиты, чтобы быстро выявлять и устранять сетевые ошибки.",[469,1092,1093,110,1094,1095,1096],"debug","HTTP","Swift","network","troubleshooting","h-CsY06HADVkRJ6PN6kaGkfBQJxAUetfpA_VjlkGrh0"]