iOS组件化之CocoaPods发布私有库

创建索引库

所谓索引库,就是私有库的索引,具体上说就是一个个.podspec文件。比如我们的cocoapods/repos目录下,存了几十万个共有库的索引,并不会存具体库的代码,(就算如此安装cocoapods时还是很慢)。等到我们在具体项目中pod install时,才会根据.podspec文件中的代码地址去下载源代码。

同样的,我们也需要创建索引库,来存放我们所有私有库的索引。

如果是公开发布上cocoapods的,无需这一步。

  • 创建远程git仓库,地址为https://github.com/xuzhenhao/ZHSpecs.git
  • 控制台执行命令 pod repo add [索引库名]ZHSpecs [git地址]github.com/xuzhenhao/Z…

到这里,应该能在cocoapods/repos目录下看到ZHSpecs文件夹,和公开索引库master并列。

创建私有库

模板化创建

创建索引库可以通过模板快速创建,指令为 pod lib create [工程名]。包括网上绝大部分教程都是这么操作的,但个人实际项目开发下来感到有明显缺陷,更推荐下一种。

  • 如图提示缺少colored2,使用sudo gem install colored2 安装

此处可以跳过。为什么说有明显缺陷呢,因为模板化创建的,只有一个Example工程和Classes文件夹。

  • 如果你是已经开发完的,只是抽离代码到私有库,那么问题不大,直接把文件复制到Classes目录下,分好类。然后在Example下,pod install 预览效果。
  • 如果你和我一样,是从0开始边调试边开发的,那就难受了。你只能在Example工程中开发,而执行pod install后,Example工程中看到的是逻辑目录(想象一下,你在主工程中修改AFN会是什么体验)。直接new group,拖拽文件,和Classes文件夹下的具体存放都是不一致的。

Xcode创建私有库工程

  • Xcoce新建普通项目,配好.gitignore文件。
  • 创建.podspec文件。可通过pod spec create 名称创建,也可以直接拷贝其他库的.podspec文件,修改下文件名和内容。注意要放到项目根目录下,即和.xcodeproj同级。此外,还需要拷贝LICENSE文件,也是放根目录下。子目录里新建一个Sources文件夹,存放我们所有的代码。
  • 配置.podspec文件。可参考如下配置,分了多个子库。

Pod::Spec.new do |s|
  s.name             = 'HBTTools'
  s.version          = '0.0.1'
  s.summary          = '工具私有库'
  s.description      = <<-DESC
1. 封装了常用的工具类,包括分类、数据库、加密、热更新、提示框、版本更新等模块
                       DESC

  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'cloud' => '[email protected]' }
  s.source           = { :git => 'https://e.coding.net/kdk/HBTTools.git', :tag => s.version.to_s ,:submodules => true}

  s.ios.deployment_target = '8.2'
  s.source_files = 'HBTTools/Sources/HBTools.h'
  
  s.public_header_files = 'HBTTools/Sources/HBTools.h'
  s.frameworks = 'Foundation'
  s.dependency 'HBNetworking'

  s.subspec 'HBCategories' do |ss|
    ss.source_files = 'HBTTools/Sources/HBCategories/**/*.{h,m}'
  end

  s.subspec 'HBDataBase' do |ss|
    ss.source_files = 'HBTTools/Sources/HBDataBase/**/*.{h,m}'
    ss.dependency 'FMDB'
  end

  s.subspec 'HBHUD' do |ss|
    ss.source_files = 'HBTTools/Sources/HBHUD/**/*.{h,m}'
    ss.dependency 'MBProgressHUD', '~> 0.9.1'
  end

  s.subspec 'HBVersion' do |ss|
    ss.source_files = 'HBTTools/Sources/HBVersion/**/*.{h,m}'
    ss.dependency 'Mantle'
  end
  s.subspec 'HBLog' do |ss|
    ss.source_files = 'HBTTools/Sources/HBLog/**/*.{h,m}'
    ss.dependency 'Mantle'
    ss.dependency 'HBTTools/HBDataBase'
  end
end

复制代码

这种方式创建的工程和我们普通的开发没有任何区别,可以直接新建文件、直接在项目里运行调试。我们在podspec中指定了源代码,这样在pod install使用时,项目里的其他文件,如appDelegate之类的,都不会被下载。

发布私有库

  1. 打版本号。 开发完毕后,首先修改.podspec中的s.version,这个是库的版本号。最好给项目打上同样的版本号。pod tag [版本号] git push --tags

  2. 验证podspec有效性

  • pod lib lint本地验证(不会验证版本号)
  • pod spec lint远程验证(需要打好正确的版本号)

可选参数:--sources=https://e.coding.net/kdk/ZHSpecs.git,github.com/CocoaPods/S… --allow-warnings --use-libraries

--sources后跟的是索引库的地址,如果你依赖了如AFN之类的框架,需要告诉他去哪找。ZHSpecs是我们自己的索引库,如果你当前私有库依赖了自己其他的私有库,需要加上这个。 --allow-warning 忽略警告

  1. 向索引库提交索引文件

3.1 如果是私有库 pod repo push [索引库名][要提交的索引文件.podspec]. 这里和pod lib lint一样,根据需要加上可选参数。

3.2 如果是公有库

  • pod trunk register [邮箱] 邮箱中会收到一封验证邮件,点击后提示回到控制台
  • pod trunk push

采坑记录

  1. 分装第三方分享时,由于友盟的库含有.a 静态库文件,不做处理的话,在pod install时会安装失败,提示: target has transitive dependencies that include static binaries. 解决方法:podspec文件中添加 s.static_framework = true

你可能感兴趣的:(cocoapods,移动开发,git)