一、本地私有库
1、准备工作
本地私有库是将自己写的第三方框架以私有pod的形式引入到项目中去,所以我们需要准备好
1)第三方框架代码;
2)新建项目
3)安装好cocoaPods环境
2、用命令pod spec create FMBase生成podspec文件。
然后用Xcode打开podspec文件,修改一些东西,诸如:
填写s.description;设置s.license
s.source_files = "Classes", "Classes/**/*.{h,m}"
#s.exclude_files = "Classes/Exclude"等。我第一次验证一直没通过,后来才发现,原来是差了一句s.platform = :ios没写。
验证 pod lib lint
3、验证通过后在项目中pod init创建podfile文件,填写pod路径:
pod 'FMBase', :path =>'../../localLib/FMBase'
引号内更换为库的真实路径。
然后pod install即可
4、但是该设置建立的本地私有库无法对库进行独立的测试,如果想要对该库进行独立测试的话,需要做如下设置:
4.1 pod lib create FMBase2 该命令是创建一个pod库模版工程
4.2 建立完成后,将classes内的replaceme替换为自己的库。
4.3 进入podfile目录,然后pod install即可。
4.4 最后修改项目中podfile中库的路径,确认可以找到FMBase2.podspec文件即可执行pod update 命令;
二、远程私有库
远程私有库的设置思路是:我们平常使用的AFN等框架都是通过官方的spec repo也就是:https://github.com/CocoaPods/Specs.git进行搜索得到的。如果我们的库想要实现远程私有,那就只能传到私有的spec repo上,然后通过私有的spec进行搜索,这样其他人无法获取私有的spec当然也就无法搜索使用私有库啦。
1、新建私有远程repo,并添加repo到Cocoapods中
pod repo add REPO_NAME SOURCE_URL
新建私有远程repo添加repo到Cocoapods中
2、新建私有远程库
tag3、将私有远程库提交到私有远程repo上
3.1 首先该私有库我们还是以pod lib create ***的形式创建
3.2 提交远程私有repo
将开发的podspec文件添加到本地索引库,系统会自动将其上传到远程索引库4、在项目中修改podfile添加私有repo,即可正常使用远程私有库
4.1 首先添加搜索源,在podfile中添加
source 'https://github.com/CocoaPods/Specs.git'
source 'https://git.coding.net/Vincent__/PrivateRepo.git'
4.2 修改podfile添加pod 'libExtension',然后执行pod install
大功告成
5、维护升级远程私有库
5.1 如果私有库中出现了依赖其他库:需要修改podspec中:
s.dependency 'AFNetworking'
5.2 或者想要细分私有库(库功能太多,将部分功能分离成子库):
s.subspec 'Base' do |b|
b.source_files = 'libExtension/Classes/Base/**/*'
end
s.subspec 'Category' do |c|
c.source_files = 'libExtension/Classes/Category/**/*'
end
5.2.1 在podfile中调用subspec的时候描述如下:
pod 'libExtension', :subspecs => ['Base', 'Category']
5.3 库中包含xib的加载图片注意事项:
5.3.1 代码中需要写bundle的地方,都使用[NSBundle bundleForClass:self]
5.3.2 所有的图片资源存放在Assets问价夹中
5.3.4 修改podspec文件:
s.resource_bundles = { 'libExtension' => ['libExtension/Assets/*.png'] }
执行pod install重新加载图片
5.3.5 如果是在xib中直接设置图片:
在图片名称前添加主bundle
5.3.6 代码加载图片的时候,不可以直接使用imageNamed方法,代码如下:
NSBundle *currentBundle = [NSBundle bundleForClass:[self class]];
NSString *bundleName = [currentBundle.infoDictionary[@"CFBundleName"] stringByAppendingString:@".bundle"];
NSString *path = [currentBundle pathForResource:@"tabbar_np_play@2x.png" ofType:nil inDirectory:bundleName];
UIImage *image = [UIImage imageWithContentsOfFile:path];
网友评论