如何在Xcode Playground上使用Charles Proxy?

时间:2017-06-19 14:34:24

标签: ios swift xcode charles-proxy

当从Swift游乐场收看网络请求时,我无法在Charles Proxy中看到网络呼叫。但是,当我按照答案here中的步骤从iOS模拟器进行网络请求时,它可以正常工作。

很高兴能让它适用于Xcode Playgrounds以加快迭代速度。有谁知道需要做些什么来使它在那里工作?

3 个答案:

答案 0 :(得分:1)

我找到了gist,它描述了使其与Playgrounds配合使用的方法。它避免了更改ATS设置的需要。通过以下实现创建符合import org.apache.spark.sql.expressions.{Window} import org.apache.spark.sql.functions.{when, col, rank, lit, lag} val win = Window.partitionBy("id", "refId").orderBy("timestamp") val result = df .withColumn("previous", lag("timestamp", 1) over win) .withColumn("rank", rank() over win) .withColumn("session", when(col("refId").isNull || col("rank") === lit(1), true) .otherwise(false) ) .withColumn("diff", col("timestamp") - col("previous")) 的对象:

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!)) } } 。使用该会话进行请求将使您可以使用Charles。

答案 1 :(得分:1)

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)

答案 2 :(得分:0)

与模拟器不同,Playgrounds没有自己的网络配置。如果您需要在Playground上使用代理,则需要代理Mac的网络连接。这将影响Mac上的每个应用程序,这可能是大量数据。它应该可以工作,但您可能想要退出任何其他与网络相关的应用程序。例如,如果您在测试时不需要使用浏览器,请在完成之前退出。