前一节我们将基础库做成了组件,接下来,我们来学习下将某个业务做成组件化,这样,某一个业务想添加或者下架,就很方便
进入到remoteLib里面
pod lib create YZFMMain
创建一个公共业务主组件把主要的非测试代码放入ReplaceMe所在文件夹
测试代码文件放在Example里面即可
在.spec文件里面加dependency
s.dependency 'FMBase/category'
在项目里面的[NSBundle mainBundle]
需要替换成[NSBundle bundleForClass:self]
确保能找到bundle
资源图片放在对应的组件内部
将图片存放在组件化里面的Assets文件夹下
修改.spec,打开引用图片资源的代码
s.resource_bundles = {
'YZFMMain' => ['YZFMMain/Assets/**/*.png']
}
然后执行pod install
平时的
[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];
现在,业务组件以及写完了,要集成到主项目里面
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
pod repo push YZFMBase YZFMMain.podspec --allow-warnings
现在,就可以在主项目里面,加入业务组件了
pod install
在外届使用自己的库时,最好要提供公共的api文件,使用者可以直接调用api文件使用里面的东西,不需要使用里面所有的文件接口
基础组件力度比较小,比如:分类、网络、日期相关的操作
功能组件力度比较大,比如:封装好的播放器、封装好的图片上传
pod lib create
拖入代码
添加git远程仓库关联
修改spec文件
pod install
提交本地仓库代码->远程代码仓库
打标签,并且提交标签到远程地址
验证spec,并且提交到本地私有索引库
静态库在链接时,会被完整的复制到可执行文件中;被多次使用,就有多份拷贝
.a静态库是一个纯二进制文件
.framework静态库中除了有二进制文件之外还有资源文件
.a文件不能直接使用,至少要有.h文件的配合
.framework文件可以直接使用
.a + .h + sourceFile = .framework
建议使用.framework
动态库则不会复制,只有一份,程序运行时动态加载到内存;系统只加载一次,多个程序共用,节省内存
但是,项目中如果使用自己的动态库,则不需上架!
因此,我们要学习的是,如果制作静态库
build即可,但需要在模拟器和真机下都build一次,然后合成,这样可以确保真机、模拟器都可以使用
合成方法:lip -create 模拟器地址.a 真机地址.a -output 合成名字.a