@废话在前

IOS中库分为静态库(staitc library)和动态库(dynamic library),这里先介绍快速制作动态库的方法,目的主要是将自己写的插件或者sdk做成一个库包,供其他人快速调用而不暴露内部细节。


制作动态库工程主要提取以下原工程的几部分文件:

1.图片等资源文件;

2.核心类文件,包括第三方插件类文件和自定义类文件;

3.预编译头文件;

4.导入和原工程一样的用到的系统库;

iOS 自制动态库 ios 创建动态库_ios开发



一.制作动态库工程


1.新建一个基于UIKit的动态库工程

*新建动态库工程:

iOS 自制动态库 ios 创建动态库_iOS 自制动态库_02


*设置动态库名称等:

iOS 自制动态库 ios 创建动态库_iOS 自制动态库_03


*运行动态库工程编译成功时Products文件夹下的framework文件即将要生成的类的动态库:

iOS 自制动态库 ios 创建动态库_sdk_04


2.导入图片资源

新建一个文件夹,将所有图片资源放入文件夹中,将文件夹名字后缀改成xx.bundle做成bundle包。

命名最好整齐,使用图片的时候要加上bundle包名,最好做成常量:

iOS 自制动态库 ios 创建动态库_uikit_05

iOS 自制动态库 ios 创建动态库_uikit_06

iOS 自制动态库 ios 创建动态库_uikit_07

3.导入类文件

将所有类文件包括第三方库类文件全部拷贝到动态库工程中;


4.预编译头文件

新建一个pch预编译文件,将原工程的pch文件中的内容原样复制进来,这个会在编译时编译到framework中;

pch预编译头文件的新建、配置方法和注意事项见文章:


5.根据原工程导入必要的系统库:

iOS 自制动态库 ios 创建动态库_uikit_08



6.设置暴露的接口头文件

将暴露的接口头文件及其直接引用的头文件拖入public头文件组内:

iOS 自制动态库 ios 创建动态库_ios开发_09

iOS 自制动态库 ios 创建动态库_framework_10


7.运行编译通过表示配置成功,此时动态库工程中已经有了我们之后需要的framework库文件。



二.导出动态库文件

iOS 自制动态库 ios 创建动态库_framework_11

1.动态库类文件即Products文件夹中的.framework包文件;


2.资源文件打包之间将Assets.xcaassets的后缀名改为bundle即可,不能打包plist文件(其实图片资源不需要导入动态库工程,可以直接将原工程的图片资源打成bundle包即可)。



三.库文件的调用


1.将资源包和类库导入工程中,由于是动态库,需要在Embed Frameworks(没有则手动添加)中手动加入.framework库,否则崩溃报image not found错。

iOS 自制动态库 ios 创建动态库_ios开发_12


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



@注:这样做的库文件只能用于真机或者模拟器,取决于动态库工程编译时的选择,不同同时通用于真机和模拟器。