这一篇主要是介绍一种特殊情况的打包。有两个功能:功能1 与 功能2,其中 功能2 是在 功能1 的基础上开发,现在我想将 功能2 打包,而不用将 功能1 打到这个静态包中。
想必很多人,都想在 AFN 的基础上做一层封装。那么问题来了,这个网络的二次封装是建立在 AFN 的基础上的,如果想将这个二次封装打包,而又不想将 AFN 的代码打进去,应该如何做呢?
一、创建项目
创建一个名叫 HttpManager 的项目。
二、核心代码
进入 HttpManager.h 文件,代码如下:
#import <Foundation/Foundation.h>
@interface HttpManager : NSObject
/**
POST 请求
@param url 链接
@param params 参数
@param success 成功回调
@param failure 失败回调
*/
- (void)POST:(NSString *)url params:(NSDictionary *)params success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure;
@end
进入 HttpManager.m 文件,代码如下:
#import "HttpManager.h"
#import "AFNetworking.h"
@implementation HttpManager
/**
POST 请求
@param url 链接
@param params 参数
@param success 成功回调
@param failure 失败回调
*/
- (void)POST:(NSString *)url params:(NSDictionary *)params success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure {
// TODO: 1.基本的一些处理
// TODO: 2.这里用到了 AFN 中的请求方法
}
@end
假装上面就是对 AFN 高大上的二次封装(实际上,可没有这么简单)。仅仅是上面的代码是会出错的。因为用到了 AFN ,但是没有引进 AFN 的代码。
三、引进 AFN 的代码
直接到 这里 将 AFN 的代码下载下来。找到 AFNetworking 目录。
将其拖入到 HttpManager 的项目中。这里有一个很值得注意的地方:
你没有看错,这里是不能选中 Add to target的,因为我们的目的就是不希望将这部分打入包中的(你也可以选中试试看)。这样 HttpManager 项目就不会报错了。
三、打静态包前的配置
1、Build Active Architecture Only 全部设置成NO。
2、设置暴露文件
因为没有多余创建其它的文件,而是直接用HttpManager这个类。所以这里不用做任何的设置。在这里,你应该已经发现,没有与 AFN 相关的文件,这是对的。
四、开始编译
编译方式,与基础篇的相同。
五、找到编译结果
最终结果,如下:
同样,将这个 HttpManager 文件拖入到项目中,就可以使用的。但是有一个前提的条件,这个项目必须要有 AFNetworking ,不管是直接拖入的,还是pod 进入的。
网友评论