Swift - 在mac app中记录所有请求

时间:2017-02-10 18:27:38

标签: swift swift2 nsurlprotocol

我尝试使用NSURLProtocol来记录Swift 2.3项目中的所有请求。但是,并未记录所有URL请求。特别是所有Alamofire请求都没有被记录。

示例代码

public ArrayList<Integer> getFats(int timeOfDay) {
    //0:breakfast
    //1:lunch
    //3:dinner
    //4:other
    ArrayList<Integer> result = new ArrayList<Integer>();
    SQLiteDatabase db = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
    String selectQuery = "SELECT * FROM TABLE WHERE timeOfDay = " + timeOfDay;
    Cursor cursor = db.rawQuery(selectQuery, null);
    if (cursor.moveToFirst()) {
        result.add(cursor.getInt(cursor.getColumnIndex("fatColumn")));
        while (cursor.moveToNext()) {
            result.add(cursor.getInt(cursor.getColumnIndex("fatColumn")));
        }
    }
    cursor.close();
    db.close();
    return result;
}

2 个答案:

答案 0 :(得分:0)

我认为这是因为Alamofire使用的新URLSession API不受NSURLProtocol.registerProtocol调用的影响。

您必须使用URLSession创建一个URLSessionConfiguration,其protocolClasses数组设置为[TestURLProtocol.self]

但有了这个,您必须在任何地方使用自定义SessionManager来记录请求,而不是使用我认为的隐式Alamofire.request

答案 1 :(得分:0)

我最终使用的是pod OHHTTPStubs。我将以下代码添加到我的app委托中,以记录每个使用的主机。

func applicationDidFinishLaunching(aNotification: NSNotification) {
    var hosts = [String: Int]()

    stub({ req in
        if let url = req.URL, let host = url.host{
            var count = 1
            if let c = hosts[host]{
                count = c + 1
            }
            hosts[host] = count

            print("Request #\(count): Host = \(host)")
        }
        return false
        },
         response:{_ in return OHHTTPStubsResponse()}
    );
}