iOS组件化开发--组件B引用组件A中的静态库的实现方式

378 阅读1分钟

一、问题描述

在组件化开发中,当组件A引入了静态库xxx.a时,如果想要在组件B中使用xxx.a,需要在组件B中依赖组件A。组时,在组件B中的某个.h文件中引用xxx.a的头文件时,会报如下错:

image.png

二、解决问题

首先,导入xxx.a头文件的方式为

#import "xxx.h"

其次,不能在组件B的.h文件中导入xxx.a的头文件,否则就会报上面的错误。

所以只能在组件B的.m文件中导入xxx.a的头文件,.h文件中如果使用了xxx.a静态库中的类,可以使用@class的方式声明。

image.png

BaseResp类是xxx.a静态库中的类,在组件B的.h文件中,需要使用@classs的方式进行声明即可编绎通过。

三、探究原因

问题一、为何跨组件引用只能使用import "xxx.h"的方式引用

image.png

  • 1.在组件BHPay中,引用了微信开放平台的SDK,它是个.a静态库;
  • 2..a静态库在编绎的时候会被copy到主工程的mach-o文件中;
  • 3.所以其他组件在使用.a文件时,需要依赖BHPay组件;
  • 4.因为静态库被copy到了主工程的mach-o中,所以才能使用import "xxx.h"的方式引用;
  • 5.import <>的引用方式需要知道文件的文件映射关系,但import <BHPay/xxx.h>的方式引用静态库的方式会报错,因为静态库和BHPay之间并没有相对应的映射关系。

问题二、为什么.h文件不能import "xxx.h"

参考文章