亲爱的
我正在使用此代码
var Locations = [LocationListStats]()
func downloadJSON(completed: @escaping () -> ()) {
let url = URL(string: "http://teslm.net/app/LocationList.php")
URLSession.shared.dataTask(with: url!) { (data, response, error) in
do {
self.Locations = try JSONDecoder().decode([LocationListStats].self, from: data!)
DispatchQueue.main.async {
completed()
}
}catch {
print("JSON Error")
}
}.resume()
}
但是我收到此错误:EXC_BAD_INSTRUCTION(code = EXC_I386_INVOP,subcode = 0x0)
但如果我使用其他网址,它没有任何错误。 所以你认为我的代码在这里有问题,或者我应该在后端用我的Json文件做些什么?
错误在这一行:
self.Locations = try JSONDecoder().decode([LocationListStats].self, from: data!)
如果我打印错误,它会给我这个:
无法加载资源,因为App Transport Security策略要求使用安全连接
我在我的plist文件中使用它来尝试解决这个问题,但同样的事情:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>http://teslm.net/app/LocationList.php</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<true/>
</dict>
</dict>
</dict>
我认为这个问题与我正确的HTTPS协议有关吗?
答案 0 :(得分:0)
您的例外情况不正确。 NSExceptionDomain
应该只是域名。您还需要添加例外以允许不安全的连接。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>teslm.net</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<true/>
</dict>
</dict>
</dict>
请注意,Apple已声明在将来的某个时候,您必须提供理由来说明您需要这些例外的原因。如果您拥有teslm.net服务器,您应该使用它来支持安全连接,包括ATS的所有要求。