【问题标题】:Can't open HTTP links in iOS due to security issue由于安全问题,无法在 iOS 中打开 HTTP 链接
【发布时间】:2026-02-01 02:40:01
【问题描述】:

App Transport Security 已阻止明文 HTTP (http://) 资源加载,因为它不安全。可以通过应用的 Info.plist 文件配置临时例外。

我已经尝试了图片上的解决方案,但仍然出现错误

   import UIKit

   class ViewController: UIViewController {


   lazy var data = NSMutableData()


    override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.



    let url = NSURL(string: "http://android.goidx.com/search")
    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in
        if error != nil {
            print(error)
            } else {
            do {
                let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as!  NSDictionary
                // print(jsonResult)

                print(jsonResult[0])
            } catch {
                print("my error")
            }
        }

    })

    task.resume()





}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
  }




 }

【问题讨论】:

    标签: ios json xcode swift app-transport-security


    【解决方案1】:

    您的 plist 文件应如下所示: 请注意,您的代码会使应用程序崩溃,因为您正在转换为字典,它应该是一个数组:

     override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
    
    
    
            let url = NSURL(string: "http://android.goidx.com/search")
            let session = NSURLSession.sharedSession()
            let task = session.dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in
                if error != nil {
                    print(error)
                } else {
                    do {
                        let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as!  NSArray
                        // print(jsonResult)
    
                        print(jsonResult[0])
                    } catch {
                        print("my error")
                    }
                }
    
            })
    
            task.resume()
    
    
    
    
    
        }
    

    然后一切都应该工作 - 它对我有用。

    【讨论】:

    • 它工作了谢谢。我有最后一个问题,因为我的 json 文件在该链接上显示为字典。我应该像你说的那样存储我们的 nsdictionary
    • 它是一个返回的数组,并给定您的print(jsonResult[0]) 我猜您是期待的。 jsonResult[0] 的对象是字典。