【问题标题】:IOS Simple rest API works in simulator but not on any device [duplicate]IOS简单的rest API在模拟器中工作,但在任何设备上都没有[重复]
【发布时间】:2019-02-19 08:34:13
【问题描述】:

此代码在模拟器 iphone 8 Plus 上按预期运行,但在运行到 iphone 8 plus 或 iphone 6 时出现此控制台日志失败,并出现此奇怪结果。运行当前操作系统版本的 Mac 和两部 iphone。

import UIKit

let DomainURL = "http://museum-dev.williams.edu:3003/id?labID="

class artObject : Codable {
    var ObjectID : Int?
    var ObjectName : String?
    var Creators : String?
    var Medium : String?
    var Titles : String?
    var LabelUUID : String?

    static func fetch(withID id : String){
        let urlString = DomainURL + "\(id)"
        print("urlString is \(urlString)")

        if let url = URL(string: urlString) {
            let task = URLSession.shared.dataTask(with: url, completionHandler: { (data,response,error) in
                print(String(data: data!,encoding: .ascii) ?? "no data")

                if let newArtObj = try? JSONDecoder().decode(artObject.self, from: data!) {
                    print(newArtObj.Medium ?? "no url")
                }


            })
            task.resume()
        }
    }
}

class ViewController: UIViewController {


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

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        artObject.fetch(withID: "E8EE71C6F5822")
    }

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


}

urlString 是http://museum-dev.williams.edu:3003/id?labID=E8EE71C6F5822

2018-09-14 09:47:45.384385-0400 RestFul[330:16235] [] tcp_timers tcp[1] retransmit SYN 3
2018-09-14 09:47:46.389844-0400 RestFul[330:16235] [] tcp_timers tcp[1] retransmit SYN 4
2018-09-14 09:47:47.395361-0400 RestFul[330:16236] [] tcp_timers tcp[1] retransmit SYN 5
2018-09-14 09:47:49.398078-0400 RestFul[330:16234] [] tcp_timers tcp[1] retransmit SYN 6
2018-09-14 09:47:53.403567-0400 RestFul[330:16236] [] tcp_timers tcp[1] retransmit SYN 7
2018-09-14 09:48:00.098736-0400 RestFul[330:16150] Status bar could not find cached time string image. Rendering in-process.
2018-09-14 09:48:01.409005-0400 RestFul[330:16234] [] tcp_timers tcp[1] retransmit SYN 8
2018-09-14 09:48:17.412384-0400 RestFul[330:16236] [] tcp_timers tcp[1] retransmit SYN 9
2018-09-14 09:49:00.722310-0400 RestFul[330:16520] TIC TCP Conn Failed [1:0x1d4168700]: 1:50 Err(50)
2018-09-14 09:49:00.722701-0400 RestFul[330:16236] Task <5D9E2547-23CE-4959-8CF5-211114B1C533>.<1> finished with error - code: -1001
2018-09-14 09:49:00.724537-0400 RestFul[330:16520] Task <5D9E2547-23CE-4959-8CF5-211114B1C533>.<1> HTTP load failed (error code: -1009 [1:50])

【问题讨论】:

  • 您是否为 http 加载设置了传输安全性?
  • 将您的设备连接到移动数据并检查。
  • 我已经准备好了,感谢您的建议。很高兴看到人们热心提供帮助。我理解允许任意负载的需要。我的网络错误是因为我在实际设备上进行测试时忘记在 iPhone 上启用必要的 VPN。

标签: ios swift rest


【解决方案1】:

尝试在 info.plist 中设置以下键

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

在生产中不建议这样做。它将允许您的应用程序调用不安全的 url。你想要的是一个有效的 ssl 证书。

【讨论】:

  • 你应该解释为什么他应该设置钥匙。
  • @ClausJørgensen 给我一分钟 :)
猜你喜欢
  • 2014-06-18
  • 2022-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-24
  • 2014-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多