Сетевые запросы не выполняются - NSURLSession - Песочница приложения - Xcode 9

У меня есть простой запрос GET, который я пытаюсь запустить в своем приложении macOS. Однако я продолжаю получать следующую ошибку:

Не удалось найти сервер с указанным именем хоста.

URL-адрес, с которого я пытаюсь загрузить данные JSON:

https://suggestqueries.google.com/complete/search?client=safari&q=mercedes

Если я протестирую его в своем браузере или на веб-сайте онлайн-тестирования API (например, Hurl.it), запрос будет работать нормально. Затем файл JSON загружается автоматически.

Однако запуск запроса через мое приложение macOS не работает. Вот мой код:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://suggestqueries.google.com/complete/search?client=safari&q=mercedes"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
[request setHTTPMethod:@"GET"];

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];

[[session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

    NSLog(@"Data: %@", data);
    NSLog(@"Response: %@", response);
    NSLog(@"Error: %@", error);

}] resume];

Вот полный журнал ошибок:

dnssd_clientstub ConnectToServer: connect()-> Кол-во попыток: 1 dnssd_clientstub ConnectToServer: connect()-> Кол-во попыток: 2 dnssd_clientstub ConnectToServer: connect()-> Кол-во попыток: 3 dnssd_clientstub ConnectToServer: connect() не удалось

path:/var/run/mDNSResponder Socket:6 Err:-1 Errno:1 Операция не разрешена [1:0x600000164080]: 10:-72000 Err(-65563) Задача ‹12212C3B-8606-49C2-BD72-AEBD575DB638>.‹1> Ошибка загрузки HTTP (код ошибки: -1003 [10:-72000]) Задача ‹12212C3B -8606-49C2-BD72-AEBD575DB638>.‹1> завершено с ошибкой - код: -1003

Данные: (null) Ответ: (null) Ошибка: Error Domain=NSURLErrorDomain Code=-1003 «Не удалось найти сервер с указанным именем хоста». UserInfo={NSUnderlyingError=0x60400004fa20 {Домен ошибки=kCFErrorDomainCFNetwork Code=-1003 "(null)" UserInfo={_kCFStreamErrorCodeKey=-72000, _kCFStreamErrorDomainKey=10}}, NSErrorFailingURLStringKey=https://www.suggestqueries.google.com/complete/search?client=safari&q=mercedes, NSErrorFailingURLKey=https://www.suggestqueries.google.com/complete/search?client=safari&q=mercedes, _kCFStreamErrorDomainKey=10, _kCFStreamErrorCodeKey=-72000, NSLocalizedDescription=Не удалось найти сервер с указанным именем хоста.}

Что я делаю неправильно? Это просто простой запрос GET, я не понимаю, почему данные не загружаются.

Спасибо за ваше время, Дэн.


person Supertecnoboff    schedule 27.10.2017    source источник


Ответы (4)


Я понял, что не так, хотя я установил Allow Arbitrary Loads на YES, этого уже недостаточно для включения сетевых запросов.

«Разрешить

В Xcode 9 есть новый параметр App Sandbox, который также может блокировать входящие/исходящие сетевые соединения! Мне пришлось отключить эту настройку, и тогда все сетевые запросы начали работать.

«Настройки

person Supertecnoboff    schedule 27.10.2017
comment
Я только что провел два дня, пытаясь отладить, почему я не мог заставить работать свой WebView. Это была настройка песочницы. Спасибо за этот пост. - person Joshua Kifer; 28.12.2017

В XCode 11.5 мне пришлось проверить эти два флага.

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

person schmidt9    schedule 31.07.2020

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

Вы должны отключить «песочницу приложений».

Go to:

xcode Project-> Capabilities -> App SandBox

person meMadhav    schedule 05.09.2018

Пожалуйста, попробуйте код ниже

@property (nonatomic, strong) NSURLConnection *connection;

NSMutableString *urlString = [NSMutableString stringWithString:BASE_URL];

[urlString appendFormat:@"%@",apiName]; //apiName —> Webservice Name

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];

[request setValue:@"gF!DeEfFrjqaAaD$gH#Mn@w(z" forHTTPHeaderField:@"PC-API-KEY"];  //Optional Parameter pass if required key
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];

[request setHTTPMethod:@"POST"]; //if your required Get than  [request setHTTPMethod:@"GET"];

[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[parameterDict toJSON]];
[request setTimeoutInterval:45.0];

self.connection =[[NSURLConnection alloc] initWithRequest:request delegate:self];

if (self.connection) {
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
    self.downLoadedData = [NSMutableData data];
}
person Akshay Degada    schedule 27.10.2017
comment
Я не понимаю, как это решит мою проблему. Это в основном тот же код, что и мой, за исключением того, что он использует методы делегата для загрузки данных, а не блока. - person Supertecnoboff; 27.10.2017
comment
Также мое приложение предназначено для платформы macOS, поэтому [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; не применимо. - person Supertecnoboff; 27.10.2017