【10】iOS开发·私有库的创建

2020-06-12  本文已影响0人  风青殇

一、创建本地私有库

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']
上一篇下一篇

猜你喜欢

热点阅读