@废话在前
IOS中库分为静态库(staitc library)和动态库(dynamic library),这里先介绍快速制作动态库的方法,目的主要是将自己写的插件或者sdk做成一个库包,供其他人快速调用而不暴露内部细节。
制作动态库工程主要提取以下原工程的几部分文件:
1.图片等资源文件;
2.核心类文件,包括第三方插件类文件和自定义类文件;
3.预编译头文件;
4.导入和原工程一样的用到的系统库;
一.制作动态库工程
1.新建一个基于UIKit的动态库工程
*新建动态库工程:
*设置动态库名称等:
*运行动态库工程编译成功时Products文件夹下的framework文件即将要生成的类的动态库:
2.导入图片资源
新建一个文件夹,将所有图片资源放入文件夹中,将文件夹名字后缀改成xx.bundle做成bundle包。
命名最好整齐,使用图片的时候要加上bundle包名,最好做成常量:
3.导入类文件
将所有类文件包括第三方库类文件全部拷贝到动态库工程中;
4.预编译头文件
新建一个pch预编译文件,将原工程的pch文件中的内容原样复制进来,这个会在编译时编译到framework中;
pch预编译头文件的新建、配置方法和注意事项见文章:
5.根据原工程导入必要的系统库:
6.设置暴露的接口头文件
将暴露的接口头文件及其直接引用的头文件拖入public头文件组内:
7.运行编译通过表示配置成功,此时动态库工程中已经有了我们之后需要的framework库文件。
二.导出动态库文件
1.动态库类文件即Products文件夹中的.framework包文件;
2.资源文件打包之间将Assets.xcaassets的后缀名改为bundle即可,不能打包plist文件(其实图片资源不需要导入动态库工程,可以直接将原工程的图片资源打成bundle包即可)。
三.库文件的调用
1.将资源包和类库导入工程中,由于是动态库,需要在Embed Frameworks(没有则手动添加)中手动加入.framework库,否则崩溃报image not found错。
2.需要根据原工程需要做相应的配置,如info.plist文件的配置以及AppDelegate的设置等,调用前先运行编译通过。
3.在需要的类中导入类库调用接口:
//
// ViewController.m
// sdktest
//
// Created by Xinhou Jiang on 16/7/19.
// Copyright © 2016年 youme Tech. All rights reserved.
//
#import "ViewController.h"
#import <XXSDK/SDK.h> // 导入动态库
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor orangeColor];
// 初始化SDK
[SDK SDKInitWithAppID:@"46571891337916" unityVC:self];
// 调用动态库sdk的接口函数
[SDK Login:^(NSInteger result, UserInfo *info) {
if (result == 0) {
// 登录成功
// ... ...
}
}];
}
@end
@注:这样做的库文件只能用于真机或者模拟器,取决于动态库工程编译时的选择,不同同时通用于真机和模拟器。