iOS之组件化学习(三)---业务组件

前一节我们将基础库做成了组件,接下来,我们来学习下将某个业务做成组件化,这样,某一个业务想添加或者下架,就很方便

进入到remoteLib里面

  • 建立一个模板库
    pod lib create YZFMMain创建一个公共业务主组件

把主要的非测试代码放入ReplaceMe所在文件夹
测试代码文件放在Example里面即可

如何解决业务组件引用基础组件?

在.spec文件里面加dependency
s.dependency 'FMBase/category'

  • 在Podfile里面添加source私有源
    iOS之组件化学习(三)---业务组件_第1张图片
    iOS之组件化学习(三)---业务组件_第2张图片

  • 在项目里面的[NSBundle mainBundle]需要替换成[NSBundle bundleForClass:self]确保能找到bundle

  • 资源图片放在对应的组件内部
    将图片存放在组件化里面的Assets文件夹下

  • 修改.spec,打开引用图片资源的代码

s.resource_bundles = {
   'YZFMMain' => ['YZFMMain/Assets/**/*.png']
}

然后执行pod install
iOS之组件化学习(三)---业务组件_第3张图片平时的[UIImage imageNamed:@"name"]是从MainBundle里面加载的
现在不能这样加载了,需要:

	UIImageView *iconImageView = [[UIImageView alloc] init];
    iconImageView.frame = CGRectMake(110, 110, 200, 200);
    NSBundle *currentBundle = [NSBundle bundleForClass:self.class];
    NSString *currentBundleName = currentBundle.infoDictionary[@"CFBundleName"];
    //inDirectory是在哪个包内
    //图像需要带@2x
    //type不要写nil,写nil图片出不来!
    NSString *imagePath = [currentBundle pathForResource:@"椭圆形备份 21@2x" ofType:@"png" inDirectory:[NSString stringWithFormat:@"%@.bundle", currentBundleName]];
    iconImageView.image = [UIImage imageWithContentsOfFile:imagePath];
    [self.view addSubview:iconImageView];
  • 组件内部使用的图片,放在组件内部
  • 如果是外接传给组件内部的图片,可以放在外面

集成业务组件

现在,业务组件以及写完了,要集成到主项目里面

  • 创建一个网络私有库,用来存放该业务组件
  • 修改.spec文件
  • 将本地业务组件与远程业务组件私有库地址关联起来
git add .
git commit -m 'xx'
git remote add origin https://github.com/shanyazhou/YZFMMain.git
git push origin master
  • 打标签
git tag '0.1.0'
git push --tags
  • 将YZFMMain组件库提交到远程私有库
    pod repo push YZFMBase YZFMMain.podspec --allow-warnings

现在,就可以在主项目里面,加入业务组件了
pod install


统一披露API

在外届使用自己的库时,最好要提供公共的api文件,使用者可以直接调用api文件使用里面的东西,不需要使用里面所有的文件接口


问:基础组件 与 功能组件如何划分?

基础组件力度比较小,比如:分类、网络、日期相关的操作
功能组件力度比较大,比如:封装好的播放器、封装好的图片上传

流程再回顾:
  1. pod lib create

  2. 拖入代码

  3. 添加git远程仓库关联

  4. 修改spec文件
    pod install

  5. 提交本地仓库代码->远程代码仓库

  6. 打标签,并且提交标签到远程地址

  7. 验证spec,并且提交到本地私有索引库


静态库

静态库:.a .framework

静态库在链接时,会被完整的复制到可执行文件中;被多次使用,就有多份拷贝

.a静态库和.framework静态库的区别

.a静态库是一个纯二进制文件
.framework静态库中除了有二进制文件之外还有资源文件

.a文件不能直接使用,至少要有.h文件的配合
.framework文件可以直接使用

.a + .h + sourceFile = .framework

建议使用.framework

动态库: .dylib .tbd .framework

动态库则不会复制,只有一份,程序运行时动态加载到内存;系统只加载一次,多个程序共用,节省内存

但是,项目中如果使用自己的动态库,则不需上架

因此,我们要学习的是,如果制作静态库

制作.a静态库

iOS之组件化学习(三)---业务组件_第4张图片

iOS之组件化学习(三)---业务组件_第5张图片

build即可,但需要在模拟器和真机下都build一次,然后合成,这样可以确保真机、模拟器都可以使用

合成方法:lip -create 模拟器地址.a 真机地址.a -output 合成名字.a

制作.framework静态库

iOS之组件化学习(三)---业务组件_第6张图片
iOS之组件化学习(三)---业务组件_第7张图片

iOS之组件化学习(三)---业务组件_第8张图片
把.h文件暴露出去,放入Public里面

你可能感兴趣的:(iOS)