我不确定这是否是完整/最佳答案,但我在苹果开发者论坛上发现了这种方法:
func createTLSParameters(allowInsecure: Bool, queue: DispatchQueue) -> NWParameters {
let options = NWProtocolTLS.Options()
sec_protocol_options_set_verify_block(options.securityProtocolOptions, { (sec_protocol_metadata, sec_trust, sec_protocol_verify_complete) in
let trust = sec_trust_copy_ref(sec_trust).takeRetainedValue()
var error: CFError?
if SecTrustEvaluateWithError(trust, &error) {
sec_protocol_verify_complete(true)
} else {
if allowInsecure == true {
sec_protocol_verify_complete(true)
} else {
sec_protocol_verify_complete(false)
}
}
}, queue)
return NWParameters(tls: options)
}
self.workQueue = DispatchQueue(label: "mqtt")
self.connection = NWConnection(
host: NWEndpoint.Host("172.16.202.172"),
port: NWEndpoint.Port(integerLiteral: 8899),
using: createTLSParameters(allowInsecure: true, queue: self.workQueue))
使用这种技术,我根本不需要更改info.plist。
有一些迹象表明,该论坛更倾向于将自签名证书以某种方式拉入您的iOS信箱。