【10】iOS开发·私有库的创建
一、创建本地私有库
1、项目目录中,新建文件夹Lib进入,然后执行pod lib create 库名,根据提示进行模板创建库;例:
pod lib create FXGBaseKit
2、第一步完成之后,会有个子工程,可在Classes文件夹中存放代码,Assets中存放图片资源等;
(注1:加载图片资源中,需要在XXX.podspec文件中配置,具体格式后面会贴上来;)
(注2:图片加载方式也不能再用[UIImage imageName:@""],需要指定bundle加载图片)
3、抽离代码,在原有项目工程中的Podfile文件中导入本地路径,例:
pod 'FXGBaseKit', :path => 'Lib/FXGBaseKit'
(注:新版的cocoapods需要在开头加上source路径)
新版Podfile格式范例:
use_frameworks!
platform :ios, '9.0'
source 'https://github.com/CocoaPods/Specs.git'
target 'XXX' do
pod 'FXGBaseKit', :path => 'Lib/FXGBaseKit(你的本地私有库路径)'
target 'XXX_Tests' do
inherit! :search_paths
end
end
备注:本地私有库的创建比较简单,此处不再过多叙述。
二、创建远程私有库
1、工程创建
pod lib create FXGBaseKits
2、新建远程仓库(GitHub/GitLab/coding等)
3、将远程索引库关联到本地
pod repo (查看本地已关联仓库源)
pod repo add 本地索引库名称 远程索引库仓库地址 (添加关联私有库)
pod repo update 索引库名称 (更新私有库)
pod repo remove 本地索引库名称 (移除私有库)
4、进入到本地项目工程FXGBaseKits中,关联远程仓库
git remote add origin 你的仓库地址
git add .
git commit -m "commit"
git push origin master 或者 git push -u origin master 【这个一般是第一次提交的时候】
5、修改XXX.podspec文件,简易的格式及名词解释(请勿直接复制):【此处为注释】
Pod::Spec.new do |s|
s.name = 'FXGBaseKits'【库名】
s.version = '0.1.0' 【版本号】
s.summary = '' 【短描述】
s.description = <<-DESC
(此处需要填写)【详细的描述,需要比短描述长】
DESC
s.homepage = 'https://github.com/xxx' 【你仓库所在的网页网址,不是仓库地址】
s.license = { :type => 'MIT', :file => 'LICENSE' }【MIT许可证,一般不用动】
s.author = { 'xxx' => 'xxx' } 【作者名,默认会给你,一般也不需要动】
s.source = { :git => 'https://github.com/xxx.git', :tag => s.version.to_s } 【你仓库的Git地址】
s.ios.deployment_target = '9.0' 【系统版本号】
s.source_files = 'xxx/Classes/*' 【代码存放的路径,是相当于XXX.podspec的路径,一定要正确,否则会报错】
# s.resource_bundles = {
# 'XXX' => ['XXX/Assets/*.png'] 【这是图片资源的路径】
# }
# s.public_header_files = 'Pod/Classes/**/*.h' 【在这个属性中声明的.h文件能够使用<>方法联想调用】
# s.frameworks = 'UIKit', 'MapKit' 【依赖系统的动态库】
# s.vendored_framework = 'XXX.framework' 【依赖非系统的动态库,未验证】
# s.libraries = 'XXX.a' 【依赖系统的静态库】
# s.vendored_libraries = 'XXX.a' 【依赖非系统的静态库,例:libWeiboSDK.a】
s.dependency 'AFNetworking', '~> 4.0.1' 【依赖的pod库】
end
注:当有多级库的时候,可分解出多个子库,只需要将s.source_files = 'xxx/Classes/*'注释,在XXX.podspec添加以下代码:
s.subspec 'Category' do |c|【此处"||"中的字母不能写大写的,注意】
c.source_files = 'FXGBaseKit/Classes/Category/**/*'【子库的路径】
end
s.subspec 'General' do |g|
g.source_files = 'FXGBaseKit/Classes/General/**/*'【子库的路径】
end
s.subspec 'Utils' do |u|
u.source_files = 'FXGBaseKit/Classes/Utils/**/*'【子库的路径】
end
s.subspec 'Vendor' do |v|
v.source_files = 'FXGBaseKit/Classes/Vendor/**/*'【子库的路径】
end
6、验证XXX.podspec文件,终端执行:
pod lib lint XXX.podspec --allow-warnings【本地验证】
pod spec lint XXX.podspec --allow-warnings 【远程验证】
注 ①:若使用了静态库,需要在后面加 --use-libraries;
注 ②:当依赖了其他第三方库,需要在--allow-warnings 前面加上 --source='https://xxx.git【你的仓库地址】, https://github.com/CocoaPods/Specs.git'
7、当XXX.podspec验证通过后,给远程master分支添加tag
git tag 0.1.0 【添加本地tag】
git push --tags 【push到远程tag】
git tag -d 0.1.0 【删除本地tag】
git push origin :0.1.0 【删除远程tag】
git tag 【查看tag列表】
8、给master设置完tag之后,执行发布命令
pod repo push XXX XXX.podspec --allow-warnings
注 ①:若使用了静态库,需要在后面加 --use-libraries;
注 ②:当依赖了其他第三方库,需要在--allow-warnings 前面加上 --source='https://XXX.git【你的仓库地址】, https://github.com/CocoaPods/Specs.git'
9、发布完成之后,私有库便已经创建完毕,附上使用方法:
新建工程,编辑Podfile,编辑完毕后,pod install或者pod update;
注意:私有库需要指定git的写法,否则可能会install不成功,备注:当第一次使用的时候,需要先更新本地索引库;
pod repo update 【更新所有的索引库】
pod repo update xxx 【指定更新某个索引库】
指定git的写法
pod 'AFNetworking', :git => 'https://github.com/AFNetworking/AFNetworking.git'
pod 'AFNetworking', :git => 'https://github.com/AFNetworking/AFNetworking.git', :branch => 'dev'
pod 'AFNetworking', :git => 'https://github.com/AFNetworking/AFNetworking.git', :tag => '3.1.1'
pod 'AFNetworking', :git => 'https://github.com/AFNetworking/AFNetworking.git', :commit => '0f506b1c45'
指定podspec的写法
pod 'AFNetworking', :podspec => '~/Desktop/AFNetworking/AFNetworking.podspec'
指定subspecs的写法(这也是subspec的另一个用法)
pod 'MyThirdparty', '~> 0.0.1', :subspecs => ['Sparta', 'GotyeSDK', 'TalkingData', 'Tingyun', 'BaiduPanorama']