Alamofire のリクエストを調べていて発見したのでメモ。
Alamofre の Request インスタンスを生成する部分で break させて、 この時に lldb の po コマンドで評価してみると、
下記のように Alamofire で送信するリクエスト相当の curl コマンドが吐き出されます。
(※これって内部的には iOS アプリの通信は curl が使われているってことなんでしょうか)
たまたま気づいただけなのですがこれでサーバーとうまく通信できない時の問題の切り分けに使えますね。
おまけ
試したコードは下記です。
import Alamofire
enum Router: URLRequestConvertible {
static let baseUrl = "https://example.com/1.1/"
case ReadSelf([String: AnyObject])
var method: Alamofire.Method {
switch self {
case .ReadSelf:
return .GET
}
}
var path: String {
switch self {
case .ReadSelf(_):
return "users/show.json"
}
}
var URLRequest: NSMutableURLRequest {
get {
let URL = NSURL(string: TwitterRouter.baseUrl)!.URLByAppendingPathComponent(path)
var mutableURLRequest = NSMutableURLRequest(URL: URL)
mutableURLRequest.HTTPMethod = method.rawValue
switch self {
case .ReadSelf(let parameters):
mutableURLRequest = ParameterEncoding.URL.encode(mutableURLRequest, parameters: parameters).0
}
return mutableURLRequest
}
}
}
class Client: NSObject {
class func getuserInfo(userid: String, screenName: String, success: SucessHandler, failure: FailureHandler) {
let req = request(Router.ReadSelf(["user_id" : userid, "screen_name" : screenName]))
self.sendRequest(req, success: success, failure: failure, block: nil) // <- ここで break
}
class func sendRequest(request: Request, success: SucessHandler, failure: FailureHandler, block: ((AnyObject?) -> Void)?) {
request.responseJSON(options: NSJSONReadingOptions.AllowFragments) { (request, response, json) -> Void in
switch json{
case .Success(let data):
block?(data)
success(data)
case .Failure(let data, let _):
Logger.log("failed. status code = \(response?.statusCode), \(request?.URL?.absoluteString)")
let err = NSError(domain: "howdy", code: 1, userInfo:nil)
failure(response, data, err)
}
}
}
}
Swift2 用 Alamofire になってエラーハンドリングのやり方がうまくできず悩み中。。