pod repo
如果已添加过pod repo 可以跳过
-
从0开始
在git服务端创建一个新的空仓库就好
-
从已经创建好的仓库拉取
添加pod repo
pod repo add XXX自定义名字 XXX上面的仓库地址
可以通过下面两种方式查看是否添加成功
//方式1 到文件夹中查看
cd ~/.cocoapods/repos
//方式2
pod repo list
新建pod
- 从0开始
pod lib create XXX自定义名字
按照流程配置即可
- 从已经创建好的远程仓库拉取
在创建了Example工程的情况下,我们都是在Pods->Development Pods下添加我们的代码,且可以方便的在Example中调试使用。
修改pod
-
添加代码文件
- 选择要添加的文件
-
Add to targets 这里要选择当前的私有pod
添加代码 - 添加成功后,如下图
-
添加资源文件
资源文件的添加要主要:
-
添加图片这样的资源文件可以先添加到.xcassets文件中,这样在私有pod打包之后,iOS会根据机型选择合适的图片进行应用瘦身,打包成Bundle的资源文件读取方式要用下面的方式,不然读取不到。
NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle bundleForClass:[self class]] pathForResource:@"XXXBundle" ofType:@"bundle"]]; NSURL *url = [bundle URLForResource:soundTypeName withExtension:nil];
有一点需要注意:
XXXBundle是我们在下面第三步中podspec文件中填写的。
[NSBundle bundleForClass:[self class]]
,当在类中写这个代码是没有问题的,但当是在category中读取时,[self class]
只会获取添加category的类,这样就无法读到正确的bundle。解决办法:
在当前库中建立一个新的空类,然后
[NSBundle bundleForClass:[Empty class]]
,这样便可以定位到当前库中。 -
添加非图片资源时可以先打成Bundle,也可以跟添加代码一样添加。
-
-
修改podspec文件
podspec示例如下
Pod::Spec.new do |s| s.name = 'XXXUI' s.version = '0.0.1' s.summary = '这是一个什么组件' s.description = <<-DESC 比summary更详细的描述 DESC s.homepage = 'git主页' s.license = { :type => 'MIT', :file => 'LICENSE' } s.author = { 'myname' => 'myemail@mail.com' } s.source = { :git => '代码地址', :tag => "feature/V#{s.version.to_s}" } s.ios.deployment_target = '8.0' s.subspec 'ColorAndFont' do |ss| ss.source_files = 'XXXUI/ColorAndFont/*.{h,m}' ss.public_header_files = 'XXXUI/ColorAndFont/*.h' end s.subspec 'Button' do |ss| ss.source_files = 'XXXUI/Button/*.{h,m}' ss.public_header_files = 'XXXUI/Button/*.h' ss.dependency 'XXXUI/ColorAndFont' end s.resource_bundles = { 'XXXUIBundle' => ['XXXUI/Assets/*.png'] } # s.public_header_files = '' # s.frameworks = 'UIKit', # s.dependency 'AFNetworking', '~> 2.3' end
主要注意点:
-
name
私有pod的名字 -
version
版本号 -
homepage
项目主页 -
author
项目作者 -
source
项目地址,注意后面的tag写法,这里是读取了feature分支下的对应版本 -
subspec
添加下级目录,会按照设置的二级目录整理代码和资源文件 -
resource_bundles
资源文件,这样操作会把指定目录下的资源文件在编译之后打包成一个独立的Bundle,从而防止了跟主工程中资源文件命名冲突的可能性 -
frameworks
当前pod需要的系统库 -
dependency
当前pod需要的第三方库,当多个不同的私有pod使用同一个第三方库的不同版本时会产生冲突,如果有冲突建议协商修改为统一的版本 - 同一个私有pod中,如果按照
subspec
分成了子库(文件夹),如果相互之间需要引用,需要添加dependency
,如上面的ss.dependency 'XXXUI/ColorAndFont'
,就代表着Button
字库中需要依赖ColorAndFont
字库
-
-
修改README文件
这个文件的内容,会展示在项目主页,可以修改表示作者、使用注意事项等
README
验证pod
-
Example工程添加
pod添加好之后,进入pod的Example文件中,执行下面命令,会把pod安装到当前Example工程中,这里我们可以测试私有pod是否可以正常编译、使用
pod install
-
本地验证
进入到私有pod工程主目录
目录执行命令,进行本地验证
pod lib lint
验证过程中如果有过多的警告导致验证不过,可以通过命令忽略警告
pod lib lint --allow-warnings
-
远程验证
pod spec lint
推送pod
-
推送私有pod代码
验证通过的代码可推送到远端
-
推送podsepc到pod repo
pod repo push XXXrepo XXXUI
使用pod
-
在要使用私有pod的工程的Podfile中添加,引入私有pod repo的地址,同时为了正常使用cocoapods需要加入cocoapods地址
platform :ios, '8.0' source 'http://xxxx.git' source 'https://cdn.cocoapods.org/' use_frameworks! pod 'XXXUI', '~> 0.0.1'
-
安装pod
pod install
总结
可能会用到的其他命令
//查看pod repo
pod repo list
//查看pod是否可用
pod search XXXUI
//查看pod缓存
pod cache list
//清除缓存
pod cache clean XXXUI
//清除全部缓存
pod cache clean —all
//不更新repo 快速安装、更新
pod install --no-repo-update
pod update --no-repo-update
//更新repo 安装
pod install --repo-update
Podfle使用建议,建议使用pod ‘AFNetworking’, ‘~>0.1.2′
pod ‘AFNetworking’ //不显式指定依赖库版本,表示每次都获取最新版本
pod ‘AFNetworking’, ‘2.0’ //只使用2.0版本
pod ‘AFNetworking’, ‘>2.0′ //使用高于2.0的版本
pod ‘AFNetworking’, ‘>=2.0′ //使用大于或等于2.0的版本
pod ‘AFNetworking’, ‘<2.0′ //使用小于2.0的版本
pod ‘AFNetworking’, ‘<=2.0′ //使用小于或等于2.0的版本
pod ‘AFNetworking’, ‘~>0.1.2′ //使用大于等于0.1.2但小于0.2的版本,相当于>=0.1.2并且<0.2.0
pod ‘AFNetworking’, ‘~>0.1′ //使用大于等于0.1但小于1.0的版本
pod ‘AFNetworking’, ‘~>0′ //高于0的版本,写这个限制和什么都不写是一个效果,都表示使用最新版本
网友评论