NSURLSession/NSURLConnection HTTP load failed

Today I have downloaded and installed Xcode 7 beta 5.

There are many tweaks I needed to do to my Swift code to make it run with the new iOS 9 but there was one which took most of the time to figure out.

If your simulator stopped sending HTTP requests over HTTPs and started throwing an error message like “NSURLSession/NSURLConnection HTTP load failed”:

  • open your info.plist as a source code
  • Add following:

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

This should help.

Here is what Apple says about it:

Source:
App Transport Security (ATS) enforces best practices in the secure connections between an app and its back end. ATS prevents accidental disclosure, provides secure default behavior, and is easy to adopt; it is also on by default in iOS 9 and OS X v10.11. You should adopt ATS as soon as possible, regardless of whether you’re creating a new app or updating an existing one.If you’re developing a new app, you should use HTTPS exclusively. If you have an existing app, you should use HTTPS as much as you can right now, and create a plan for migrating the rest of your app as soon as possible. In addition, your communication through higher-level APIs needs to be encrypted using TLS version 1.2 with forward secrecy. If you try to make a connection that doesn’t follow this requirement, an error is thrown. If your app needs to make a request to an insecure domain, you have to specify this domain in your app’s Info.plist file.

  • Aram Hakopian

    Does this mean we must use HTTPS for our app to be accepted by the app store?

    • I am pretty sure that if Apple does not reject an app submitted at this moment, they will, later on start rejecting apps that do not follow practices they are trying to enforce.