前言
学习记录这个知识点的原因其实是因为最近准备研究一个跨平台插件化的库Small, 在查看官方文档介绍的时候看到这句话
iOS组件化基于Cocoa Touch Framework(以下简称CTF)通过NSBundle实现。
所以开启的一个奇妙的学习旅程。
概念
CTF实际上是在项目中的一个结构化的目录文件,其中包含了动态共享库及其相关的资源,如nib文件,图像文件和头文件。 当我们在开发App时,我们的项目就会引用一个或多个Framework。我们在代码中使用API(application programming interface)来使用Framework中的功能。而API则暴露在Framework的头文件当中。因为Framework时动态共享的,所以多个App可以同时访问同一个Framework。系统会把Framework加载到内存中,按需共享这个Framework给各个App使用。
一图以蔽之:
因为CTF是一个文件,所以我们可以使用NSBundle的Function去访问其内容。
实操
1.此出选择 Cocoa Touch Framework
2.创建一个叫OkarTestFramework的项目
3.创建OKManager类, 代码如下:
OKManager.h
#import <Foundation/Foundation.h>
@interface OKManager : NSObject
+(instancetype)sharedManager;
- (void)test;
@end
OKManager.m
+ (instancetype)sharedManager {
static OKManager *shareManger = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
shareManger = [[[self class] alloc] init];
});
return shareManger;
}
- (void)test {
NSLog(@"Okar Test Framework!");
}
在OKManager中创建单例,然后加了一个很水的- (void)test 方法。
- build. (cmd+b) 快捷键,然后我们在可以在根目录的build文件夹看到一个’OkaeTestFramework.framework’
这个就是我们创建出来的一个Framwork
5.引入到其他项目中
- 创建一个 TestFrameworkProject
- 把我们的Framework拖拽进去并在build setting中引入,然后调用我们的方法,此处注意,因为我们在build的时候选择的是真机build,所以生成出来的动态库是一个真机才可以使用的库,用模拟器会报错,如果要公用,需要合并。
- 成功
总结
过程不算太复杂,但通过这种形式我们可以理解到Small框架其实在iOS插件化native的这一块是通过这样去把系统的模块分开出来的。