我尝试使用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;
}
答案 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()}
);
}