初次接触swift开发,准备尝试大名鼎鼎的Alamofire的网络库。按照官方提供的常规导入方法不知道为什么导入不成功,故转向其他解决方案,官方提供了CocoaPods解决方案,经过搜索感觉配置有点繁琐且该方案会会改变我的结构,在对iOS项目结构不是很熟悉的情况下遂放弃该解决方案。 官方提供了carthage解决方案,经过了解carthage配置和使用比较简单,最为重要的是carthage不会改变我的项目结构,遂尝试并记录之。

1、安装carthage

安装这里费了不少时间,安装最新版的carthage需要xcode7.3的版本,而xcode7.3版本又需要最新的os系统,这里更新系统和xcode版本花费了不少时间。更新完成后执行如下命令

~ brew update
➜  ~ brew install carthage
==> Downloading https://homebrew.bintray.com/bottles/carthage-0.16.2.el_capitan.bottle.tar.gz
######################################################################## 100.0%
==> Pouring carthage-0.16.2.el_capitan.bottle.tar.gz
/usr/local/Cellar/carthage/0.16.2: 44 files, 11.7M

安装成功后进入到项目根目录下

➜  ~ cd /Users/luojh/ios_workplace/Network

2、编写Cartfile

➜  Network vi Cartfile

文档内容为如下:

github "Alamofire/Alamofire" ~> 3.3

保存退出

3、执行update

carthage update

成功后将会看到如下输出,该部分有网络请求和编译过程,故大概需要一点时间。

*** Cloning Alamofire
*** Checking out Alamofire at "3.3.1"
*** xcodebuild output can be found in /var/folders/xn/mgf96m7d4y5876764_z3px5w0000gn/T/carthage-xcodebuild.zz4wcA.log
*** Building scheme "Alamofire watchOS" in Alamofire.xcworkspace
*** Building scheme "Alamofire tvOS" in Alamofire.xcworkspace
*** Building scheme "Alamofire OSX" in Alamofire.xcworkspace
*** Building scheme "Alamofire iOS" in Alamofire.xcworkspace

4、项目添加framework依赖

操作步骤如下: 
单击项目workspace,在文件中找到build phases,点击+按钮在弹出的选择框中选择add other找到生成的Carthage文件夹,在build文件夹下找到所需的framework.

5、添加脚本

猜测是在打包的时候将相应的framework也拷进项目,以防找不到该框架。官方是这么说的:

This script works around an App Store submission bug triggered by universal binaries and ensures that necessary bitcode-related files are copied when archiving. Only officially supports dynamic frameworks. Dynamic frameworks can be used on any version of OS X, but only on iOS 8 or later.

操作方式如下:

6、测试运行

在ViewController中编码进行测试,所有代码如下

import Alamofire  
Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])  
            .responseJSON { response in
                print(response.request)  // original URL request
                print(response.response) // URL response
                print(response.data)     // server data
                print(response.result)   // result of response serialization

                if let JSON = response.result.value {
                    print("JSON: \(JSON)")
                }
        }

输出结果如下:

Optional(<NSMutableURLRequest: 0x7fd540edcbf0> { URL: https://httpbin.org/get?foo=bar })  
Optional(<NSHTTPURLResponse: 0x7fd540f11c40> { URL: https://httpbin.org/get?foo=bar } { status code: 200, headers {  
    "Access-Control-Allow-Origin" = "*";
    "Content-Length" = 363;
    "Content-Type" = "application/json";
    Date = "Fri, 22 Apr 2016 09:03:56 GMT";
    Server = nginx;
    "access-control-allow-credentials" = true;
} })
Optional(<7b0a2020 22617267 73223a20 7b0a2020 20202266 6f6f223a 20226261 72220a20 207d2c20 0a202022 68656164 65727322 3a207b0a 20202020 22416363 65707422 3a20222a 2f2a222c 200a2020 20202241 63636570 742d456e 636f6469 6e67223a 2022677a 69703b71 3d312e30 2c20636f 6d707265 73733b71 3d302e35 222c200a 20202020 22416363 6570742d 4c616e67 75616765 223a2022 656e2d55 533b713d 312e3022 2c200a20 20202022 486f7374 223a2022 68747470 62696e2e 6f726722 2c200a20 20202022 55736572 2d416765 6e74223a 20224e65 74776f72 6b2f636f 6d2e6e63 7468696e 6b65722e 4e657477 6f726b20 28313b20 4f532056 65727369 6f6e2039 2e332028 4275696c 64203133 45323330 2929220a 20207d2c 200a2020 226f7269 67696e22 3a202231 31332e31 31382e31 37302e31 3536222c 200a2020 2275726c 223a2022 68747470 733a2f2f 68747470 62696e2e 6f72672f 6765743f 666f6f3d 62617222 0a7d0a>)  
SUCCESS  
JSON: {  
    args =     {
        foo = bar;
    };
    headers =     {
        Accept = "*/*";
        "Accept-Encoding" = "gzip;q=1.0, compress;q=0.5";
        "Accept-Language" = "en-US;q=1.0";
        Host = "httpbin.org";
        "User-Agent" = "Network/com.ncthinker.Network (1; OS Version 9.3 (Build 13E230))";
    };
    origin = "113.118.170.156";
    url = "https://httpbin.org/get?foo=bar";
}