Search code examples
ioshttprequestios9xcode7app-transport-security

Api Call Error in Xcode 7 / iOS 9 (how to setup App Transport Security in plist)


I am using xcode 7 beta version. Now, I am working an API. If, I use the API in Xcode 6.3 it works fine but when same API I used in xcode 7 error message appears Unable to parse.

here is the API i am using

Please help me out. Thanks in Advance


Solution

  • In iOS9, Apple added new feature called App Transport Security(ATS).

    ATS enforces best practices during network calls, including the use of HTTPS.

    Apple Pre-release documentation:

    ATS prevents accidental disclosure, provides secure default behavior, and is easy to adopt. 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.

    Add Below key in your info.plist & then see.

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

    Even you can add specific exception,

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>testdomain.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <false/>
                <key>NSExceptionAllowInsecureHTTPSLoads</key>
                <false/>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <true/>
                <key>NSExceptionMinimumTLSVersion</key>
                <string>TLSv1.2</string>
                <key>NSThirdPartyExceptionAllowInsecureHTTPSLoads</key>
                <false/>
                <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                <true/>
                <key>NSThirdPartyExceptionMinimumTLSVersion</key>
                <string>TLSv1.2</string>
                <key>NSRequiresCertificateTransparency</key>
                <false/>
            </dict>
    
            ...
    
        </dict>
    </dict>