前言
cocoapods仓库在ios开发中使用三方工具是必备的工具,可以使得一些开源框架能够与我们的项目很好的分开
多人开发、组件化开发、优化项目结构、分享优秀的框架等过程,或者方便分配工作等,有时会用到cocoapods仓库来编写某个项目模块,此时就涉及到了cocoapods仓库的搭建
搭建cocoapods案例项目的源码地址 ---- LSComponentDemo
cocoapods仓库的搭建
进入到响应的目录下,使用下面命令,即可创建pods仓库,其为https的方式下载模板模块
pod lib create LSComponentDemo
如果https模式下载模板失败的话,可以通过指定ssh模式下载模板,来创建pods仓库
pod lib create LSComponentDemo --template-url=git@github.com:CocoaPods/pod-template.git
下载完成仓库后,系统会提示输入邮箱地址,可以写上自己的邮箱地址
紧接着会弹出下面的选择,可以选择开发平台、语言等
Press return to continue.
What platform do you want to use?? [ iOS / macOS ]
> iOS
What language do you want to use?? [ Swift / ObjC ]
> ObjC
Would you like to include a demo application with your library? [ Yes / No ]
> Yes
Which testing frameworks will you use? [ Specta / Kiwi / None ]
> None
Would you like to do view based testing? [ Yes / No ]
> Yes
What is your class prefix?
> LS
注意:这一步执行后,系统会自动在Example目录
下执行pod install
指令,如果失败的话可以取消,进入到该目录下,将podfile
中导入的默认库删了即可
创建完毕后,其目录如下图所示
我们的工作笔录实际就在这个与 Example目录
同级的 LSComponentDemo(自己的仓库名字
)下开发了
即:将ReplaceMe文件删了,换上自己的即可
我们可以打开Example中的案例项目,可以在里面进行开发测试等工作,其目录如下所示
可以看到有默认的几个目录
Example for LSComponentDemo
进行组件测试的目录
Podspec Metadata
为设置pods必要信息的目录,可以在里面设置readme
和podspec
相关配置
如下图所示,我们可以在里面配置相关信息
此外,为了组件开发和测试方便,我们可以在案例Demo中,导入 与我们组件相关的项目目录(即:前面提到到自己的仓库名字
目录),添加进来,就可以在这里面创建文件进行开发和编译了
如下图所示,已经添加进入目录了
podspec的配置
podspec的配置,关系到文件导入,版本更新,依赖等信息,下面介绍下
Pod::Spec.new do |s|
s.name = 'LSComponentDemo' //仓库为我们默认的名字
s.version = '0.1.0' //仓库版本号,每次更新内容时,需要更新版本号
s.summary = 'A short description of LSComponentDemo.' //描述信息
s.description = <<-DESC
TODO: Add long description of the pod here.
DESC
//主页地址,https的pod仓库地址,后面介绍怎么传
s.homepage = 'https://github.com/Marshal-S/LSComponentPodsDemo.git'
//截图地址
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
//作者等信息
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'Marshal-S' => '921871381@qq.com' }
//pod仓库的源地址,可以设置https,也可以设置ssh
s.source = { :git => 'git@github.com:Marshal-S/LSComponentPodsDemo.git', :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.ios.deployment_target = '9.0' //支持的环境版本
//导入的源文件,注意默认是下面的*,全部导入
# s.source_files = 'LSComponentDemo/Classes/**/*'
//如果导入了bundles则导入文件类型时,需要标注,避免图片资源重复导入,报错问题
s.source_files = 'LSComponentDemo/Classes/**/*.{h,m}'
//导入此资源时,上面的source_files注意类型控制,后续版本不知道还会不会有问题,注意点总是好的
s.resource_bundles = {
'LSComponentDemo' => ['LSComponentDemo/Assets/*']
}
//设置公共头文件
# s.public_header_files = 'Pod/Classes/**/*.h'
//设置依赖库,可以设置多个,不导入的话,以pods方式导入可能会报错
# s.frameworks = 'UIKit', 'MapKit'
//设置pods依赖仓库,需要一个一个设置
# s.dependency 'AFNetworking'
# s.dependency 'Masonry'
end
设置podfie文件
use_frameworks!
platform :ios, '9.0'
target 'LSComponentDemo_Example' do
//测试环境下 如果知道自己的目录位置,可以通过path的方式从本地导入 ../则是返回到上级目录查找 ./在本级目录查找
# pod 'LSComponentDemo', :path => '../'
//这是我们传入到github之后,可以直接从github上面下载更新
pod 'LSComponentDemo', :git =>"git@github.com:Marshal-S/LSComponentPodsDemo.git"
end
添加组件文件
如下所示我们创建文件到对应的目录下(创建仓库的子目录的同名目录下),在 Classes
中创建我们的文件,这里创建的测试文件(资源文件可以放到Assets
中),如下所示:
注意:前面我们添加了该目录到项目中,因此创建的文件会自动放到对应目录下
上传的到git仓库(github或者自己公司的gitlab等)
git add .
git commit -m '提交内容'
git remote add origin 仓库地址
git push origin master
git tag 0.1.0 //这个和我们在 podspec 中设置的一样 version 版本号一样
git push origin 0.1.0 //提交 tag号即可
这样就上传的指定git仓库了
紧接着就可以更改podfile文件指定到我们的仓库地址了
pod 'LSComponentDemo', :git =>"git@github.com:Marshal-S/LSComponentPodsDemo.git"
然后指定 pod install
即可
如果需要更新最新版本,使用 pod update
即可
更新pod仓库版本
当我们编写完成之后,后续需要维护和更新,那么我们更新版本需要更改下面几步
在 podspec
中更新版本号,此外可以根据自己需要更新其他选项
使用 git
添加新的 tag 标签
git add .
git commit -m '提交内容'
git push origin master
git tag 0.1.1 //这个和我们在 podspec 中设置的一样 version 版本号一样
git push origin 0.1.1 //提交 tag号即可
如下图所示,新项目直接 pod install
即可
如果已经有低版本,执行 pod update
即可
接下来就可以在 案例中测试代码了,如下所示
更新到 cocoapods trunk中
步骤如下所示:
注册trunk账号为github绑定的邮箱,会收到一封带有链接的邮件,打开链接完成注册
pod trunk register 自己github绑定的邮箱 'mxObject-c' --description='register trunk,描述内容'
然后将仓库推送到cocoapods trunk 上
pod trunk push LSComponentDemo.podspec --allow-warnings
成功后,podfile中就可以直接使用我们的仓库名字了,不用在后面添加地址名字了
pod 'LSComponentDemo'
图片资源加载方案
项目中已经新增了图片加载方案示例代码,在testView
中
如下所示,新增了三种类型的图片(编写的时候,图片等资源都放到 Assets
文件夹中即可, pod
导入后会自动放到 Resources
文件夹中)
一种是常访问的小图片
,一般放到 Assets.xcassets
中,一般以缓存方式加载 imageNamed
一种是直接放图片临时使用
的或者大图片
,一般直接以非缓存方式加载 imageWithContentsOfFile
一种是放到 .bundle
中,方便隔离其他资源文件,使用方式同前两种,只是多了一层寻找bundle
的过程
另外新增过程不要忘了将 podspec 中的 bundle加载注释解封
s.resource_bundles = {
'LSComponentDemo' => ['LSComponentDemo/Assets/*']
}
其加载方案如下所示
//获取组件生成的framework中所在的bundle中(和 mainbundle类似)
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
//直接从该framework组件中,以缓存方式加载图片
UIImage *image = [UIImage imageNamed:@"icon_star" inBundle:bundle withConfiguration:nil];
//直接从该framework组件中,非缓存方式加载图片
UIImage *image2 = [UIImage imageWithContentsOfFile:[bundle pathForResource:@"icon_star1"
ofType:@"png"]];
//调用组件内创建的.bundle类型的内部图片资源,需要进一步获取 .bundle 的bundle
//此时的 bundle 和 前面获取到的 bundle 类似,里面也可以放置必要的资源文件
NSBundle *assetBundle = [NSBundle bundleWithPath:[bundle pathForResource:@"Component1"
ofType:@"bundle"]];
//从组件创建的.bundle中调用图片
UIImage *image3 = [UIImage imageNamed:@"icon_star2"
inBundle:assetBundle withConfiguration:nil];
注意: 上方的的 bundle
可以使用 static
的方式或者单例
方式保存,下次直接使用找到的 bundle
直接访问图片等资源
即可
最后
cocoapods仓库的搭建就介绍到这里了,cocoapods部分参考内容 这里