常用技术收集iOS技术资料实用工具

教你如何从0到1实现组件化架构

2017-02-22  本文已影响12914人  袁峥

前言

本篇主要讲解组件化架构思想,从零教你如何组件化一个项目。

如果喜欢我的文章,可以关注我微博:袁峥Seemygo

为什么要组件化

组件化好处

组件化思想

如何组件化

Podfile文件.png podspec文件.png

Cocopods原理

  1. 根据Podfile描述,找到对应代码库的描述文件podspec
  2. podspec中描述,去哪(s.source)才能找到代码库,并且找到之后,需要拷贝哪些文件(s.source_files)到自己的工程中。

如何组件化(公共远程仓库)

pod path.png

如何组件化(私有远程仓库)

组件化升级

组件化资源

Snip20170213_2.png Snip20170213_4.png
    ```
     NSBundle *selfBundle = [NSBundle bundleForClass:self];

    NSLog(@"%@",selfBundle);
    
    // 获取bundle还不够,图片在bundle的XMGLib.bundle文件中
    // 注意图片要全名
    NSString *path = [selfBundle pathForResource:@"XMGLib.bundle/图片@2x.png" ofType:nil];
    
    UIImage *image = [UIImage imageWithContentsOfFile:path];
    
    ```
Snip20170223_19.png
    NSBundle *bundle = [NSBundle bundleForClass:[self class]];
// 获取当前bundle名称
    NSString *bundleName = bundle.infoDictionary[@"CFBundleName"];
    bundleName = [NSString stringWithFormat:@"%@.bundle",bundleName];
// xib名称需要拼接Bundle名称,否则找不到xib
    NSString *nibName = [NSString stringWithFormat:@"%@/XMGHomeRecommendCell",bundleName];
    [self.tableView registerNib:[UINib nibWithNibName:nibName bundle:[NSBundle bundleForClass:[self class]]] forCellReuseIdentifier:ID];
Snip20170223_21.png Snip20170223_22.png Snip20170223_23.png

框架依赖

如何组件化(划分子组件)

Snip20170213_7.png Snip20170224_28.png
s.subspec 'GIF' do |gif|
    gif.ios.deployment_target = '7.0'
    gif.source_files = 'SDWebImage/FLAnimatedImage/*.{h,m}'
    // 设置依赖,依赖自己组件的子组件Core
    gif.dependency 'SDWebImage/Core'
    gif.dependency 'FLAnimatedImage', '~> 1.0'
    gif.xcconfig = {
      'USER_HEADER_SEARCH_PATHS' => '$(inherited) $(SRCROOT)/FLAnimatedImage/FLAnimatedImage'
    }
  end

Snip20170223_18.png
上一篇 下一篇

猜你喜欢

热点阅读