文章目录
  1. 1. Carthage
  2. 2. AFNetworking
  3. 3. 参考

Carthage

Carthage是一款轻量级的第三方库管理工具,其目标是用最简单的方式来管理Cocoa第三方框架,会从Github上下载、更新、编译Dynamic framework(动态库),但不会自动修改项目文件和生成配置。项目结构和设置的控制权在用户手上。

与CocoaPods相比:

优点:

  • Carthage更轻量。CocoaPods在使用中会自动创建和更新workspace、依赖和Pod项目,并进行整合; Carthage则只编译需要的库,尽可能将任务委托给Xcode和Git,更灵活;
  • Carthage去中心化,速度更快。CocoaPods,而Carthage是去中心化的,没有中心服务器也就避免了可能因中心节点错误而带来的失败。因此Carthage每次配置和更新环境,只会去更新具体库,速度更快。

缺点:

  • CocoaPods使用更简单,Carthage则需要自己配置及设置依赖;
  • 只能访问.h文件,无法直接跳转到.m实现源码。

其安装和使用参考:攻城利器 —— Carthage简单介绍

这里需要特别之处的是, 必须在Build Phases->New Run Script Phase 中添加脚本/usr/local/bin/Carthage copy-frameworks, 在『Input Files』中,添加各个库的framework路径,如 $(SRCROOT)/Carthage/Build/iOS/AFNetworking.framework。否则Simulator会报

1
2
3
dyld: Library not loaded: @rpath/AFNetworking.framework/AFNetworking
Referenced from: /Users/zXXX/Library/Developer/CoreSimulator/Devices/2CE1CEF6-3EBE-4720-85F1-6D36B6E12A9E/data/Containers/Bundle/Application/5518F71B-B25A-4769-91E1-D448B8872C58/HuntTest.app/HuntTest
Reason: image not found

这种错误。

AFNetworking

AFNetworking 是一款基于Apple Foundatin URL Loading System的高层次的网络处理开源库,采用模块化架构,提供了丰富的API供iOS和Mac OSX开发者使用。

同样参考 攻城利器 —— Carthage简单介绍 即可使用Carthage把AFNetworking库安装配置好了。值得注意的是,在引入头文件时,需加入库名,即#import <AFNetworking/AFNetworking.h> 而非 只是 AFNetworking.h

测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- (void)networkTest {
NSURLSessionConfiguration* configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager* manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
NSURL* URL = [NSURL URLWithString:@"http://example.com/download.zip"];
NSURLRequest* request = [NSURLRequest requestWithURL:URL];
NSURLSessionDownloadTask* downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
// targetPath为下载时的临时文件路径
NSURL* documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
NSLog(@"File downloaded to: %@", filePath);
}];
[downloadTask resume];
}

此外,还需要在info.plist添加HTTP load相关的权限。这是因为在iOS9中, 苹果将原http协议改成了https协议,使用 TLS1.2 SSL加密请求数据。如果直接访问”http:// … “会出现App Transport Security 错误, 如

1
HuntTest[51649:4057693] App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

因此在info.plist添加:

1
2
3
4
5
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

参考

攻城利器 —— Carthage简单介绍

文章目录
  1. 1. Carthage
  2. 2. AFNetworking
  3. 3. 参考