Alamofire访问Symfony本地开发服务器自签SSL报错如何解决?
错误成因
你收到的报错核心是对象生命周期问题:你将自定义的Session实例定义为发起请求所在作用域的局部变量,ARC(自动引用计数)会在当前作用域的同步代码执行完成后直接回收这个Session对象。而网络请求是异步执行的,在服务器响应返回前Session就已经被释放,所以触发了无效化提示。这个错误和你配置的自签名证书信任逻辑无关。
解决方案
- 首先将自定义的
Session实例升级为当前使用类的存储属性,保证请求完成前Session不会被回收,示例代码如下:
// 示例:在你的ViewController或者网络工具类中定义为全局属性 private let afSession: Session = { let manager = ServerTrustManager(evaluators: ["192.168.2.9": DisabledEvaluator()]) return Session(serverTrustManager: manager) }() // 发起请求的逻辑中直接调用持有的实例 func fetchTableData() { afSession.request("https://192.168.2.9:8000/api/tables/1", method: .get) .responseDecodable(of: Table.self) { response in // 你的响应处理逻辑 } }
- 完成上述修改后如果仍遇到SSL校验问题,可确认项目的App Transport Security(ATS)配置:在Info.plist中添加针对
192.168.2.9的访问例外,或临时开启NSAllowsArbitraryLoads(仅建议开发阶段使用)。 - 你当前的自签名证书忽略配置本身是正确的,
ServerTrustManager的evaluators键只需填写IP/域名,不需要携带端口号。
内容的提问来源于stack exchange,提问作者Jannis6023
相关产品推荐
相关产品推荐

