美文网首页
iOS私有Pod, 指南+踩坑

iOS私有Pod, 指南+踩坑

作者: 开发全靠xib | 来源:发表于2018-12-04 18:13 被阅读0次

第一次做私有Pod, 也是翻遍了网上的教程来学习.
经过自己的实践, 写一篇相对详细的文章吧

文章可能有点乱, 但是文中提到的东西, 基本我都放到文章开头了. 如果还有哪里不明白, 可以评论留言.

先说一个小知识, 后面看到可以来查看

文件匹配
匹配所有文件
c
匹配以名字C开头的文件
*c匹配以名字c结尾的文件
c匹配所有名字包含c的文件
**文件夹以及递归子文件夹
?任意一个字符(注意是一个字符)
[set] 匹配多个字符,支持取反
{p,q} 匹配名字包括p 或者 q的文件

准备工作

  • 请去安装CocoaPods, 具体过程百度吧....这个不说了
    最简单的 brew 一下

  • 去代码托管平台创建两个仓库
    例如:

私有库A, 名字叫YYYPodSpecs, 地址https://github.com/YYY/YYYPodSpecs.git

私有库B, 名字叫YYYPrivatePod, 地址https://github.com/YYY/YYYPrivatePod.git

这里简单说一下两个库的作用

库A, 用于存放.podspec文件的. 这个文件大概相当于pod的索引吧.具体是什么, 请google一下.
库B, 用于存放私有库代码的. 这个没有什么值得说的

继续准备工作

终端, 切换到.cocoapods/repos 文件夹下
cd ~/.cocoapods/repos

继续执行 pod repo add 文件夹名称 私有库A的地址, 如
pod repo add YYYPodSpecs https://github.com/YYY/YYYPodSpecs.git

下面, 注意了, 换路径了, 换路径了, 换路径了

换一个其他的路径, 比如我们在Document里面创建我们的私有库项目
cd ~/Document
pod lib create YYYPrivatePod

然后巴拉巴拉一堆选择题, 您看着答.

好了, YYYPrivatePod项目已经有了, 文件结构如下


项目结构1.png

把我们的文件都放到Classes文件夹下, ReplaceMe.m删掉

如果文件都已经放到Classes文件下, 我们要测试一下正确性等相关事情, 只需要cd 到 Example目录下, 执行pod update, 然后打开.xcworkspace即可.

这里我遇到坑了

坑1
当我们pod update之后, 我们看到的文件结构, 不一定跟我们制作完后别人pod install 下来的结构一样. 也就是说, 如果没有特殊处理, 都是没有层级的(都在同级)

坑2
如果想pod install后的文件结构有层级,不同文件夹下的文件, 不要引用(个人感觉这地方绝对不能引用, 但没有仔细研究. 深入学习的自行百度一下吧)
例如: Classes里面有两个文件夹A和B,
A中有一个类, Aa.h, Aa.m
B中有一个类, Bb.h, Bb.m
Bb.h和.m中不要引入Aa.h

好了, 下面可以编码了.

编辑.podspec文件

好了,这个比较重要的地方到来了

Pod::Spec.new do |s|
  s.name             = 'YYYPrivatePod'
  s.version          = '0.0.6'
  s.summary          = 'A Method & Function Kit for YYY'
  s.description      = <<-DESC
TODO: Add long description of the pod here.
                       DESC

  s.homepage         = 'https://github.com/YYY/'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'yyy' => 'yyy@xxx.com' }
  s.source           = { :git => 'https://github.com/YYY/YYYPrivatePod.git', :tag => s.version.to_s }
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'

  s.ios.deployment_target = '8.0'

  s.source_files = 'YYYPrivatePod/Classes/*.{h}'
  s.public_header_files = 'YYYPrivatePod/Classes/*.{h}'
  s.requires_arc = true
  s.frameworks = 'UIKit', 'Foundation'

  # s.resource_bundles = {
  #  'TKKit' => ['YYYPrivatePod/Assets/*.png', 'Classes/**/*.{nib, storyboard}']
  # }

  # s.dependency 'AFNetworking', '~> 2.3'

  s.subspec 'YYY_CALayer' do |ss|
  ss.source_files = 'YYYPrivatePod/Classes/YYY_CALayer/*'
  ss.public_header_files = 'YYYPrivatePod/Classes/YYY_CALayer/*.h'
  end

  s.subspec 'YYY_Config' do |ss|
  ss.source_files = 'YYYPrivatePod/Classes/YYY_Config/*'
  ss.public_header_files = 'YYYPrivatePod/Classes/YYY_Config/*.h'
  end

  s.subspec 'YYY_Foundation' do |ss|
  ss.source_files = 'YYYPrivatePod/Classes/YYY_Foundation/*'
  ss.public_header_files = 'YYYPrivatePod/Classes/YYY_Foundation/*.h'
  end

  s.subspec 'YYY_UIKit' do |ss|
  ss.source_files = 'YYYPrivatePod/Classes/YYY_UIKit/*'
  ss.public_header_files = 'YYYPrivatePod/Classes/YYY_UIKit/*.h'
  end

end

这是我的.podspec文件. 下面对几个比较重要的字段去说明一下

s.version
这个不要随便写, 因为这个字段的值要和我们提交私有库代码的时候打的tag一致.

s.source
这个字段就写YYYPrivatePod仓库的地址就好了 (https://github.com/YYY/YYYPrivatePod.git)

s.source_files
这个字段就有点难受了.我的私有库结构如下图

文件结构2.png
因为我的Classes文件夹下, 只有一个TKKit.h这一个文件, 其他都是文件夹.我要参与编译的只有这一个文件, 所以就不需要用**去遍历子文件夹了, 并且直接将文件后缀定死为.h.
此处默认样式YYYPrivatePod/Classes/**/*( ***代表的什么, 请在文章开头处查看). 如果Classes/**的话, 那么后面设置的文件结构都将没用了, 没有层级.

s.subspec 'YYY_CALayer' do |ss|
ss.source_files = 'YYYPrivatePod/Classes/YYY_CALayer/* '
ss.public_header_files = 'YYYPrivatePod/Classes/YYY_CALayer/*.h'
end
重点来了, 我们要的分级结构, 就是由这些东西来设置的.而不是我们在项目中自己创建文件夹去分级. 写法照猫画虎吧. 如果pod install 后发现没有层级, 仔细查看这个地方和s.source_files字段

好了, 比较难过的地方基本就完成了

全部修改好之后, 我们可以在私有库项目(YYYPrivatePod)目录中, 终端执行pod lib lint --allow-warnings --verbose
如果.podspec文件验证通过, 那就是一行绿字. 验证失败就是几个error, 可以根据日志去看一下.

当.podspec验证成功之后, 我们的私有库的整体工作基本就是完成了, 下面就是提交代码, 打tag, 将.podspec上传到YYYPodSpecs库中

  • git remote add origin https://github.com/YYY/YYYPrivatePod.git
  • git add .
  • git commit -m "message"
  • git push origin master
  • git tag -m 'v0.0.0' 0.0.0(注意引号外的文字与s.version字段相同)
  • git push --tags

此时, 我们的私有库相关代码就已经上传成功了, tag也打完了. 最后一步, 该提交.podspec文件了

pod repo push YYYPodSpecs YYYPrivatePod.podspec --allow-warnings

此时还会重新校验.podspec文件. 如果没有报错, 那么新建一个项目, 在 podfile中的顶部加上
source 'https://github.com/YYY/YYYPodSpecs.git'(管理.podspec的git地址, 此处可以是ssh)

下面正常 pod 就好了

相关文章

网友评论

      本文标题:iOS私有Pod, 指南+踩坑

      本文链接:https://www.haomeiwen.com/subject/kelvcqtx.html