Подтвердить что ты не робот

Ресурс не может быть загружен, потому что для политики безопасности приложений для транспорта требуется использование безопасного соединения

Я столкнулся с проблемой, когда обновил свой Xcode до 7.0 или iOS 9.0. Как-то это начало давать мне титульную ошибку

"Ресурс не может быть загружен, потому что безопасность приложений на транспорте политика требует использования безопасного соединения"

Метод Webservice:

-(void)ServiceCall:(NSString*)ServiceName :(NSString *)DataString
{
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
    [sessionConfiguration setAllowsCellularAccess:YES];
    [sessionConfiguration setHTTPAdditionalHeaders:@{ @"Accept" : @"application/json" }];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration];

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",ServiceURL]];
    NSLog(@"URl %@%@",url,DataString);
    // Configure the Request
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setValue:[NSString stringWithFormat:@"%@=%@", strSessName, strSessVal] forHTTPHeaderField:@"Cookie"];
    request.HTTPBody = [DataString dataUsingEncoding:NSUTF8StringEncoding];
    request.HTTPMethod = @"Post";

    // post the request and handle response
    NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
                                          {
                                              // Handle the Response
                                              if(error)
                                              {
                                                  NSLog(@"%@",[NSString stringWithFormat:@"Connection failed: %@", [error description]]);

                                                  // Update the View
                                                  dispatch_async(dispatch_get_main_queue(), ^{

                                                      // Hide the Loader
                                                      [MBProgressHUD hideHUDForView:[[UIApplication sharedApplication] delegate].window animated:YES];


                                                  });
                                                  return;
                                              }
                                              NSArray * cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:request.URL];
                                              for (NSHTTPCookie * cookie in cookies)
                                              {
                                                  NSLog(@"%@=%@", cookie.name, cookie.value);
                                                  strSessName=cookie.name;
                                                  strSessVal=cookie.value;

                                              }

                                              NSString *retVal = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}];
[postDataTask resume];

}

Служба работает нормально для ранних версий Xcode и предыдущих версий iOS. Но когда я обновился до Xcode 7.0, находящегося на iOS 9.0, он начал давать мне проблему вроде следующего, когда я вызываю вышеупомянутый метод веб-службы. Ошибка регистрации, которую я получаю:

Не удалось выполнить соединение: Ошибка домена = NSURLErrorDomain Code = -1022 "ресурс не может быть загружен, потому что политика безопасности приложений для транспорта требует использования безопасного соединения". UserInfo = {NSUnderlyingError = 0x7fada0f31880 {Ошибка Domain = kCFErrorDomainCFNetwork Code = -1022 "(null)" }, NSErrorFailingURLStringKey = MyServiceURL, NSErrorFailingURLKey = MyServiceURL, NSLocalizedDescription = Ресурс не может быть загружен, поскольку Политика безопасности приложений для транспорта требует использования безопасного соединение.}

Я пробовал следующие вопросы и ответы, но не получил никакого результата, есть ли какая-либо предварительная идея о том, как я могу удалить эту служебную ошибку?

4b9b3361

Ответ 1

Я решил это с добавлением ключа в info.plist. Шаги, которые я выполнил:

  1. Открыл мой целевой файл проекта info.plist

  2. Добавлен ключ под названием NSAppTransportSecurity в качестве Dictionary.

  3. Добавил подраздел с именем NSAllowsArbitraryLoads качестве Boolean и установил его значение YES как NSAllowsArbitraryLoads на следующем рисунке.

enter image description here

Очистите проект, и теперь все работает как обычно.

Ссылка: fooobar.com/questions/18895/...

РЕДАКТИРОВАТЬ: ИЛИ В исходный код файла info.plist мы можем добавить, что:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>yourdomain.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
       </dict>
  </dict>

Ответ 2

Помните, что использование NSAllowsArbitraryLoads = true в проекте info.plist позволяет небезопасно подключаться к любому серверу. Если вы хотите убедиться, что через незащищенное соединение доступен только определенный домен, попробуйте следующее:

enter image description here

Или как исходный код:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>domain.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

Очистить & Построить проект после редактирования.

Ответ 3

Транспортная безопасность предоставляется в iOS 9.0 или новее, а в OS X версии 10.11 и более поздних.

Таким образом, по умолчанию только вызовы https разрешены только в приложениях. Чтобы отключить App Transport Security, добавьте следующие строки в файл info.plist...

<key>NSAppTransportSecurity</key>
  <dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
  </dict>

Для получения дополнительной информации:
https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33

Ответ 4

Для iOS 10.x и Swift 3.x [ниже также поддерживаются версии] просто добавьте следующие строки в "info.plist"

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

Ответ 5

В Swift 4 можно использовать

→ Перейти Info.plist

→ Нажмите плюс из списка свойств информации

→ Добавить параметры безопасности транспорта приложения в качестве словаря

→ Щелкните значок "Плюс". Настройки безопасности транспорта приложения

→ Добавить Разрешить произвольные нагрузки установить ДА

Ниже изображение выглядит

enter image description here

Ответ 6

Я решил как файл plist.

Добавьте словарь NSAppTransportSecurity:.

Добавить подраздел под названием "NSAllowsArbitraryLoads" как логический: YES

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

Ответ 7

Не удалось загрузить ресурс, поскольку политика безопасности транспорта приложений требует использования безопасного соединения, работающего в Swift 4.03.

Откройте ваш pList.info как исходный код и вставьте:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

Ответ 8

Если вы используете Xcode 8.0 и swift 3.0 или 2.2

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

Ответ 9

Из документации Apple

Если вы разрабатываете новое приложение, вы должны использовать исключительно HTTPS. Если у вас есть существующее приложение, вы должны использовать HTTPS столько, сколько вы можете прямо сейчас, и создать план по переносу остальной части приложения как можно скорее. Кроме того, ваша связь через API более высокого уровня должна быть зашифрована с использованием TLS версии 1.2 с прямой секретностью. Если вы попытаетесь установить соединение, которое не соответствует этому требованию, возникает ошибка. Если вашему приложению необходимо отправить запрос в небезопасный домен, вы должны указать этот домен в своем файле Info.plist приложения.

Чтобы обойти безопасность транспорта приложений:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>yourserver.com</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <!--Include to specify minimum TLS version-->
      <key>NSTemporaryExceptionMinimumTLSVersion</key>
      <string>TLSv1.1</string>
    </dict>
  </dict>
</dict>

Чтобы разрешить все небезопасные домены

<key>NSAppTransportSecurity</key>
<dict>
  <!--Include to allow all connections (DANGER)-->
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

Подробнее: Настройка исключений безопасности для транспорта приложений в iOS 9 и OSX 10.11

Ответ 10

В Xcode 7.1 и далее (быстрый 2.0)

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

Ответ 11

Вам просто нужно использовать HTTPS, а не HTTP в своем URL-адресе, и он будет работать

Ответ 12

Если вы не большой поклонник XML, просто добавьте тег ниже в ваш файл plist.

enter image description here

Ответ 13

iOS 9 (может) заставляет разработчиков использовать исключительно Безопасность приложений > . Я случайно услышал это где-то случайно, поэтому я не знаю, действительно ли это верно. Но я подозреваю это и пришел к такому выводу:

Приложение, работающее на iOS 9, может (возможно) больше не подключаться к серверу Meteor без SSL.

Это означает, что запуск iOS-объекта meteor run или iOS-устройства для метеорита (возможно?) больше не работает.

В app info.plist NSAppTransportSecurity [Dictionary] должен быть установлен ключ NSAllowsArbitraryLoads [Boolean] на YES, а Meteor должен использовать https для своего localhost server в ближайшее время.

Ответ 14

Если вы используете Xcode 8.0 до 8.3.3 и swift 2.2 до 3.0

В моем случае необходимо изменить URL http:// на https:// (если не работает, попробуйте)

Add an App Transport Security Setting: Dictionary.
Add a NSAppTransportSecurity: Dictionary.
Add a NSExceptionDomains: Dictionary.
Add a yourdomain.com: Dictionary.  (Ex: stackoverflow.com)

Add Subkey named " NSIncludesSubdomains" as Boolean: YES
Add Subkey named " NSExceptionAllowsInsecureHTTPLoads" as Boolean: YES

enter image description here

Ответ 15

Откройте pList.info как Исходный код и внизу до </dict> добавьте следующий код,

 <!--By Passing-->
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>your.domain.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>1.0</string>
                <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
        </dict>
    </dict>
    <!--End Passing-->

И, наконец, измените your.domain.com на ваш базовый Url. Спасибо.

Ответ 16

Мне удалось решить эту проблему с помощью комбинации многих из упомянутых опций. Ill включает контрольный список всех вещей, которые я должен был сделать, чтобы заставить это работать.

Короче:

  • Установите для параметра NSAllowsArbitraryLoads значение true для расширения часовых поясов (не мое приложение для часов).
  • Убедитесь, что я использовал https, а не http.

Шаг первый:

Во-первых, и, очевидно, мне пришлось добавить ключ NSAppTransportSecurity в качестве словаря в моих расширениях часов info.plist с подразделением под названием NSAllowsArbitraryLoads в качестве логического значения в true. Только установите это в расширении часов, а не на панели приложений для просмотра. Хотя обратите внимание, что это позволяет все соединения и может быть небезопасным.

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

или

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

Шаг второй:

Затем мне нужно было убедиться, что URL-адрес, который я пытался загрузить, был https, а не только http. Для любых URL-адресов, которые были еще http, я использовал:

Swift

let newURLString = oldURLString.stringByReplacingOccurrencesOfString("http", withString: "https")

Obj-C:

NSString *newURLString = [oldURLString stringByReplacingOccurrencesOfString:@"http" withString:@"https"];

Ответ 17

Убедитесь, что вы изменили правильный файл info.plist.

Это второй раз, когда я трачу время на эту проблему, потому что я не заметил, что я изменяю info.plist в MyProjectNameUITests.

Ответ 18

Для тех из вас, кто работает на localhost, выполните следующие действия:

  1. Нажмите кнопку "+" рядом с Information Property List и добавьте App Transport Security Settings и назначьте ему тип Dictionary
  2. Нажмите кнопку "+" рядом с недавно созданной записью App Transport Security Settings и добавьте NSExceptionAllowsInsecureHTTPLoads типа Boolean и установите для него значение YES.
  3. Щелкните правой кнопкой мыши на записи NSExceptionAllowsInsecureHTTPLoads и выберите опцию "Shift Row Right", чтобы сделать ее дочерней по отношению к вышеуказанной записи.
  4. Нажмите кнопку "+" рядом с записью NSExceptionAllowsInsecureHTTPLoads и добавьте Allow Arbitrary Loads типа Boolean и установите для него значение YES

Примечание. В итоге оно должно выглядеть примерно так, как показано на следующем рисунке.

enter image description here

Ответ 19

Я решил эту проблему в случае самостоятельного синтаксического анализатора с использованием подписанного года сертификата, а не опции "NSAllowsArbitraryLoads"

Parse Server как любой сервер node.js представляет общедоступный https url, который вы должны указать. Например:

parse-server --appId --masterKey --publicServerURL https://your.public.url/some_nodejs

Не забудьте посмотреть мои конфигурационные файлы

Ответ 20

Это яблочный способ усиления безопасности на вашем apis (вынужден использовать https через http). Я объясню, как удалить этот параметр безопасности.


Большинство ответов здесь указывают на добавление этого ключа в ваш info.plist enter image description here

Одно это не решило эту проблему для меня. Мне пришлось добавить тот же ключ внутрь

Project -> Targets -> Info -> Custom iOS Target Properties enter image description here


Это позволит небезопасным соединениям происходить от кого бы то ни было. Если вы хотите разрешить незащищенные соединения только определенному домену, вы можете добавить следующее в ваш info.plist.

enter image description here