iOS 11 使用 ATS 从 HTTP 加载图像

iOS 11 Loading Images from HTTP with ATS

您好,请使用以下代码从网络服务器下载图像。请求是 HTTP,因此不安全。

 DispatchQueue.global(qos: .userInitiated).async {
        var productImage = Utilities.GetEmptyImageBottle()
        if (entry.ImageName != nil || entry.ImageUrl != nil) {
            let data = NSData(contentsOf: URL(string: entry.ImageUrl.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed)!)!)

            if data != nil {
                let image = UIImage(data: data! as Data)
                productImage = image!
            }
        }
        DispatchQueue.main.async {
            cell.ProductImage.image = productImage
        }
    }

我还在 info.plist

中添加了以下内容
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

现在我的图片无法加载,并且出现以下错误:

NSURLConnection finished with error - code -1002

这是在 Xcode 9 运行 iOS 11。在 iOS 10 在 Xcode 8,没问题。

我错过了什么?

Error : Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL" 

-1002 似乎 URL(主机名)比 http.

更成问题

NSURLErrorUnsupportedURL 的最可能原因是 URL 没有可用的协议处理程序(也许您的 URL 字符串在 [=14= =] 前缀?).

我不太确定这个问题是由于 iOS 11 还是 Xcode 9 引起的,但听起来你需要应用这个

.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed)

仅在 URL 的最后一部分,您可能会在其中找到特殊字符。我尝试了它并且它起作用了,在完整的 url 上应用它会将 http: 格式损坏为 http%35,这不是 url 的基础,因此不会调用 web 视图的失败事件检索。因此,仅将它应用到 url 的部分,您可能会怀疑它包含特殊字符,例如空格,等