【发布时间】:2017-11-21 20:04:11
【问题描述】:
当绑定来自 Swift 游乐场的网络请求时,我在 Charles Proxy 中看不到网络调用。但是,当我按照答案 here 中的步骤从 iOS 模拟器发出网络请求时,它可以工作。
如果能让它在 Xcode Playgrounds 上运行以加快迭代速度,那就太好了。有谁知道需要做什么才能让它在那里工作?
【问题讨论】:
标签: ios swift xcode charles-proxy
当绑定来自 Swift 游乐场的网络请求时,我在 Charles Proxy 中看不到网络调用。但是,当我按照答案 here 中的步骤从 iOS 模拟器发出网络请求时,它可以工作。
如果能让它在 Xcode Playgrounds 上运行以加快迭代速度,那就太好了。有谁知道需要做什么才能让它在那里工作?
【问题讨论】:
标签: ios swift xcode charles-proxy
Swift 5 版本的fruitcoder 的回答:
public class NetworkEnabler: NSObject, URLSessionDelegate {
public func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
completionHandler(.useCredential, URLCredential(trust: challenge.protectionSpace.serverTrust!))
}
}
然后初始化URLSession:
let session = URLSession(configuration: .default, delegate: NetworkEnabler(), delegateQueue: nil)
【讨论】:
Enable SSL Proxy 处理这些请求?
我找到了一个gist,它描述了一种使它与 Playgrounds 一起工作的方法。它避免了更改 ATS 设置的需要。使用以下实现创建一个符合URLSessionDelegate 的对象:
public class NetworkEnabler: NSObject, NSURLSessionDelegate {
public func URLSession(session: NSURLSession, didReceiveChallenge challenge: NSURLAuthenticationChallenge, completionHandler: (NSURLSessionAuthChallengeDisposition, NSURLCredential?) -> Void) {
completionHandler(.UseCredential, NSURLCredential(trust: challenge.protectionSpace.serverTrust!))
}
}
并创建一个以实例为委托的会话:URLSession(configuration: .default, delegate: enabler, delegateQueue: nil)。使用该会话处理请求将允许您使用 Charles。
【讨论】:
与模拟器不同,游乐场没有自己的网络配置。如果您需要 Playground 上的代理,则需要代理 Mac 的网络连接。这将影响 Mac 上的每个应用程序,这可能是大量数据。它应该可以工作,但您可能想退出任何其他与网络相关的应用程序。例如,如果您在测试时不需要使用浏览器,请退出浏览器,直到完成。
【讨论】: