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/2 CE1CEF6-3 EBE-4720 -85 F1-6 D36B6E12A9E/data/Containers/Bundle/Application/5518 F71B-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) {
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:
因此在info.plist添加:
1
2
3
4
5
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
参考 攻城利器 —— Carthage简单介绍