当前位置: 首页 > 面试题库 >

App Transport Security Xcode 7测试版6

松钟展
2023-03-14
问题内容

我目前正在研究 Xcode 7 beta 6
。我正在尝试向http://mySubdomain.herokuapp.com发送“删除”请求

我收到的错误是:

由于不安全,App Transport
Security阻止了明文HTTP(http://)资源加载。可以通过应用程序的Info.plist文件配置临时异常。
进行API调用时出错:Error Domain = NSURLErrorDomain代码=
-1022无法加载资源,因为“应用程序传输安全性”策略要求使用安全连接。
NSLocalizedDescription =无法加载资源,因为应用程序传输安全策略需要使用安全连接。,NSUnderlyingError =
0x796f7ef0 {Error Domain = kCFErrorDomainCFNetwork Code = -1022“(null)”}}

在我实际的API调用中,我放置了“ https”而不是“ http”,这实际上适用于我的POST请求。但是DELETE请求会引发上述错误。

我在这里看到了涉及pList文件的解决方案,但是没有一个对我有用。我在下面列出了我的尝试。

第一次尝试:

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

第二次尝试:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>herokuapp.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSThirdPartyExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSRequiresCertificateTransparency</key>
            <false/>
        </dict>
    </dict>
</dict>

最后,我什至将所有这些临时键都放入:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>herokuapp.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryIncludesSubdomains</key>
                <true/>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSExceptionMinimumTLSVersion</key>
                <string>TLSv1.2</string>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.2</string>
                <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryThirdPartyExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSTemporaryThirdPartyExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSThirdPartyExceptionMinimumTLSVersion</key>
                <string>TLSv1.2</string>
                <key>NSTemporaryThirdPartyExceptionMinimumTLSVersion</key>
                <string>TLSv1.2</string>
                <key>NSRequiresCertificateTransparency</key>
                <false/>
                <key>NSTemporaryRequiresCertificateTransparency</key>
                <false/>
            </dict>
        </dict>
    </dict>

一切都没有运气!我总是得到同样的错误。DELETE请求的格式正确,因为当我从Postman手动进行处理时,得到了所需的结果。

这是我实际的API调用方法的外观,以防万一此处可能存在问题:

class func makeDELETEALLRequest(completion: (error:Bool) -> Void) {
        let session = NSURLSession.sharedSession()
        let url = NSURL(string:"https://mysubdomain.herokuapp.com/42kh24kh2kj2g24/clean")
        let request = NSMutableURLRequest(URL: url!)
        request.HTTPMethod = "DELETE"

        let task = session.dataTaskWithRequest(request) { (data, response, error) -> Void in

            if (error != nil) {
                print("Error making API call: \(error!)")
                completion(error: true)
            } else {
                let HTTPResponse = response as! NSHTTPURLResponse
                let statusCode = HTTPResponse.statusCode
                if (statusCode == 200){
                    print("Successfully deleted!")
                    completion(error: false)
                } else {
                    print("Different status code: \(statusCode)")
                    completion(error: true)
                }
            }
        }
        task.resume()
    }

再一次,我正在使用 Xcode 7 beta 6

关于
我选择的答案我选择为正确的答案对我来说是正确的,因为我对项目中的错误pList文件进行了所有这些更改,并且该答案是唯一解决可能性的方法。其他答案提供的解决方案没有错,因此遇到此问题的其他任何人都应该尝试一下,因为它们是有效的。希望这对遇到类似问题的人有所帮助。


问题答案:

在升级到xCode 7.0之后,我也无法覆盖App Transport
Security,并尝试了无济于事的同类解决方案。走了一段时间之后,我注意到我已经对“
MyAppName测试”的“支持文件”下的Info.plist进行了更改,而不是项目本身中的内容。我项目中的Supporting
Files文件夹没有展开,因此我什至没有注意到其中的Info.plist。

我敢肯定,这是典型的业余错误,但是在Project
Navigator中只有两行之隔,直到我注意到两者之间的区别,这让我感到沮丧。以为我会提到它,以防万一您遇到同样的问题。



 类似资料:
  • 6.6 测试 测试多 flavor 工程和测试普通的工程差不多。 androidTest sourceset 对所有的 flavor 来说是通用的测试,而每个 flavor 也可以有他们自己的测试。 正如前面所提到的,每一个 flavor 都可以创建自己的测试 sourceSets : android.sourceSets.androidTestFlavor1 ,位置是src/androidTes

  • 有几行代码不会在操场上出现。如果你把代码弄乱了,有时它就会出现,把代码移来移去或者放在其他地方。还有人吗?有修补方法吗?这只是一个测试版的问题吗?

  • 3.5 一志愿测开一面 30min 纯聊天,面试官好像有点人来疯的感觉要么就是喝多了,整场面试的氛围非常热闹跟过年串门似的,技术问题一个都没问 自我介绍 介绍实习,着重让说了几个实习的时候用到的工具和框架 问我能不能提前实习,我说行,又问我会不会开车,我说有驾照 然后就开始给我介绍业务,不光介绍她部门的业务,连别的部门的也一起介绍了,她自己不清楚的还专门去其他部门叫人来给我解释,跟推销似的特别热情

  • 测试 multi-flavors 项目与测试普通的项目相差无几。 androidTest 的 sourceSet 用于定义所有 flavor 共用的测试,但是每一个 flavor 也可以有它特有的测试。 正如前面提到的,每一个 flavor 都会创建自己的测试 sourceSet: android.sourceSets.androidTestFlavor1 位于 src/androidTestFl

  • 相关改动 commit Revision change c0fc9f8cac7d923d1a06a7235d21e54919d3d42a D66598 增加优先级队列支持 ee3d9d614fd36e5ea07460228c670f40e434dbf4 D66823 修改转发模型,到每台机器都使用单独线程池和thrift Clinet 5e068156aefda275c926b90c50f8df0

  • 我刚刚通过Flutter upgrade更新到Flutter verison 0.8.2并更新了依赖项,在media_query.dart中出现编译时错误。以下是版本信息: 以下是我的实际错误: