我们在使用远程私有库的时候必然会遇到资源依赖的问题,主要就是我们的xib或者StoryBoard这类资源,因为我们的功能组件中有可能会涉及到,所以我们今天就来讲讲如何来做,这里我们以我们的主骨架组件化为例。
-
首先我们来回顾一下整个项目的主骨架
我们在remoteLiba里面创建一个TZSoundMain的模板库
-
我们现在测试工程里面将我们的代码测试好,将组骨架的代码拖到Classes文件夹下面
然后在测试工程里面pod install安装代码,并且把宿主工程中AppDelegate里面的代码复制过来,还有测试控制器一并拖过来
- 但是项目中还是会报错,一路追寻下来我们发现原来结果是少了基础组件category中的内容
-
此时应该去修改.spec文件给我们添加基础组件的依赖,因为之前我们已经将基础组件划分了分支,我们在这里需要的仅仅是Category分支
-
我们发现这里出现了报错提示,提示我们找不到TZSoundBase/Category,这里我们需要添加源
-
现在编译就没有问题了,运行的时候居然又崩了,我们看看报错提示
-
原来是因为TZMiddleView里面的xib文件加载出错了,因为此时xib文件并不在我们的MainBundle里面
我们将MainBundle打开看看里面的内容
-
我们发现xib文件在Frameworks文件夹下面的TZSoundMain.Framework里面
进到TZMiddeleView中修改加载xib文件的包路径方法+ (instancetype)middleView中
//加载资源所在的bundle位置
NSBundle *currentBundle = [NSBundle bundleForClass:[self class]];
TZMiddleView *middleView = [[currentBundle loadNibNamed:@"TZMiddleView" owner:nil options:nil] firstObject];
-
然后再来跑一下测试工程,看看bug有没有解决
我们发现工程已经跑起来了和我们的宿主工程几乎相差无几,唯一不同的就是缺少图片,但是由于我们的资源都在宿主工程而没有在我们的组件当中,所以所有的图片都无法加载,我们其实应该将我们的图片资源都加载到我们的组件当中,否则以后别人使用我们的组件还得单独下载图片,这违背了我们的初衷。
那么下次我们将接着给大家来讲讲如何解决图片依赖的问题。