• 主页
  • 随笔
  • 技术笔记
  • 全部文章
标签 友链 关于我

  • 主页
  • 随笔
  • 技术笔记
  • 全部文章

创建属于自己的私有库(github)以及提交到cocoapods

阅读数:次 2018-01-18
字数统计: 2.4k字   |   阅读时长≈ 9分

创建属于自己的私有库(github)以及提交到cocoapods

相信每个Develophttps://link.jianshu.com/?t=https://github.com/CharlsPrince/CommonExtension.git%27er都会在使用Cocoapods这儿第三方库管理工具,虽然有时候pod install的时候会有种想死的感觉o(╯□╰)o,但依然无法阻挡某些程序员去使用它的热情,why?因为它能使你的项目工程看起来更加简洁,更加有条理性,而不至于使自己项目的Vendor文件夹看起来臃肿,而且能减少手动导入静态framework的麻烦,也可以将自己封装好的代码提交到Trunk供自己和别人使用,的确方便。

但有时候我们将代码封装起来后,想要重复利用,又不想push到Trunk(毕竟在又要验证又要被墙什么的,麻烦),这时就需要使用到私有库了,作为小白和英语四级都没过的“程序猿”,在Cocoapods上的确踩了不少的坑,而且Cocoapods官网上面的流程看起来比较官方,只把一些主要的步骤标记出来,根本就没有一个完成的流程,而且全英文,看起来有点吃力(毕竟我是中国人O(∩_∩)O~)
那么我们就不扯远了,什么是私有库?

私有库及公有库理解

在我看来,私有库就是自己封装的Code放到不开源的代码仓库,而GitHub就是一个管理开源Code的代码仓库,相信很多同学都是通过在GitHub上开源自己封装好的组件的,毕竟有好东西要学会分享✧(≖ ◡ ≖✿)嘿嘿

Cocoapods的原理及目录结构

Cocoapods一共分成两块,就是Cocoapods和Specs,Specs是一个目录容器,将所有的第三方的podspec存放在这里,而podspec就相当于是这个库的介绍文件,里面包含了库的名字、版本、下载地址等信息
注意项

   • ~/.cocoapods/repos/master

开源第三方库管理podspec的地方,这个文件夹是在使用Cocoapods的时候自动从Specs上clone到本地的

基本目录结构:

    repos->master->Specs->[Name]->[Version]->[Name].podspec

这个就是共有的第三方的目录,我们要做私有库,可以模仿共有库的目录结构,建立一个自己的Spec私有仓库来维护,以后我们要维护的东西基本就两样:

    1. 私有的Specs目录
    2. 我们要上传的库

步骤

一、git上创建私有的Specs库文件夹

在远端GitHub建一个仓库,命名为MySpecs,将仓库clone到本地(可以是桌面或指定文件夹下),将共有的Cocoapods-version.yml(见附件)文件拷贝到里面,并创建一个命名为“Specs”的文件夹(在文件夹里面随意的文件,只要不是空文件夹就行了,因为如果是空文件夹的话在push到远端的时候会被忽略),然后推送到远端,就这样,远端的Specs仓库已经创建完成了,这时本地和远端都会有了两个同步的库,如图:

 本地仓库.png
 远程仓库.png

二、将远端的私有Specs仓库clone到本地.cocoapods目录下

在终端运行:

 $ pod repo add MySpecs https://github.com/CharlsPrince/MySpecs.git(clon到本地.cocoapods目录指令)(建议使用github Desktop克隆到本地cocoapods目录方便同步代码到远端)

MySpecs 指的是仓库的名字,后面的路径就是仓库在远端的路径,这个是根据每个人远端仓库的路径而定的,将路径改成你的远端路径就行了

三、创建一个podspec文件

cd到工程文件目录下 ,
在终端执行命令:

    $ pod spec create CommonExtension https://github.com/CharlsPrince/CommonExtension.git
    CommonExtension 指的是这个podspec文件的名字,后面的路径就是这个工程在远端的路径,当然,如果要实现这一步,你需要先将你的工程push到远端,至于怎么push,这里就不详细介绍了,因为如果你使用不同的代码管理服务器方法也不尽相同,执行完了以后你会发现在当前的这个工程文件目录下回出现一个叫CommonExtension.podspec的文件(添加一个LICENSE文件见附件)

podspec文件.png
用sublime打开这个文件,没有sublime的也可以使用系统自带的文本编辑器打开,只不过用sublime打开可以将编辑语言改成Ruby,这样这些文本就会高亮显示了,编辑podspec里面的信息:(参考附件最好复制容易报错)

    s.name          = "HomePageModule"
    s.version       = "1.0"
    s.summary       = "description of HomePageModule"
    s.description   = <<-DESC
    "this is HomePageModule content description."
    DESC
    s.homepage      = "https://coding.net/u/LiuXiaoZhuang/p/HomePageModule/git"
    s.license       = "MIT"
    s.author        = { "LiuXiaoZhuang" => "2046703959@qq.com" }
    s.source        = { :git => "https://git.coding.net/LiuXiaoZhuang/HomePageModule.git", :tag => "#{s.version}" }
    s.exclude_files = ""
    s.source_files  = "HomePageModule/HomePageModule/*.{h,m}"
    s.frameworks    = 'UIKit'
    s.platform      = :ios

当然还有一些其他的,详细介绍可以去Cocoapods看看或可以看看AFNetworking的podspec,他们写得很正规和简洁。

四、验证podspec合法性

如果终端是在项目的当前目录下就直接执行一下命令,否则你需要cd到你要验证的.podspec的文件目录下:
(如果有文件夹s.source_files = “GGCoServers/**/*.{h,m}”)

    $ pod lib lint  (--allow-warnings可消除警告)
    或
    $ pod spec lint
    注意项
    • pod lib lint 所编译的源代码是来自于podspec所在目录而不是source所指定git地址
    • pod spec lint 会联网校验,通过source中的git地址获取源代码,同时还会校验git地址上是否有对应version字段的tag
    • 执行完,如果有错就根据错误修改podspec文件,通过则继续

五、给当前代码打上tag

cd到你的.podspec私有库文件目录下
验证通过后,给当前代码打上tag,建议tag和版本号一致,并push到远端(官网的tag是不能向下修改的),这时候打开你的远端,你会发现出现了你提交的tag

    $ git tag "0.0.1"
    $ git push origin --tags

远端tag.png

六、向mySpecs提交.podspec文件

将tag推送到远端以后,向自己的私有库提交podspec文件:(进入私有库podspec所在目录)

$ pod repo push MySpecs [name].podspec –allow-warnings

如果提交成功,去/.cocoapods/repos/MySpecs文件夹下就能找到你创建的私有库了,当然,只是podspec文件哦,因为/.cocoapods/repos/只是用来保存podspec文件的嘛
到这,你的私有库就已经创建完成了

问题小结

1、执行pod lib create (组件库) 出错

提示错误:rubygems/core_ext/kernel_require.rb:120:in`require': cannot load such file -- colored2
(LoadError)
解决办法:
输入上面提示的colored2的两条gem命令即可解决问题
sudo gem install colored2
sudo gem update --system

2、添加组件库到私有spec repo仓库后 执行 pod search搜索不到。

方法一:

先确认你本地仓库上面确实有你新创建的组件库,这时候可以先删除search缓存文件
rm ~/Library/Caches/CocoaPods/search_index.json,删除后从新执行pod search ***

方法二:

1.切换到某个项目(含有podfile文件)下
2.执行pod update(提示不能更新)
3.尝试 pod repo update —verbose获取详细信息,我记得是提示我删除一个 index.lock文件,
4.删除后从新 执行  pod repo update —verbose  会更新本地私有库和master仓库
5.执行pod search ***   创建search索引,可以搜到

3、提交本地podspec到Specs仓库的时候出错,提示repo 文件夹下的spec repo is not clean

方法一:cd到spec repo 文件夹下,执行 git  clean -f
方法二:cd到spec repo 文件夹下,执行  git  stash
方法三: 删除spec repo 下的Specs仓库,我这里的是“MySpecs”,然后重新从git上将私有仓库clone下来:
pod repo add MySpecs https://github.com/CharlsPrince/MySpecs.git

the repo “xxx” at “xxx” is no clean

注意:

• 每次提交本地podspec到Specs仓库都要将Specs提交到git远程服务器,确保本地仓库与远程仓库同步

七、查询私有库并使用

不出意外,这个时候,你去终端pod search 你的三方库名字,就能搜到(如果你的名字和官方Specs里面的某个三方库名字一样的话将会搜不到),使用的时候在Podfile中加入两个Specs源即:

    官方源:
    source 'https://github.com/CocoaPods/Specs.git'
    私有源:
    source 'https://github.com/CharlsPrince/CommonExtension.git' #即你的私有源仓库地址
    当然,你也可以指定地址
    pod 'xxxx', :git =>'https://github.com/CharlsPrince/CommonExtension.git'
    或
    pod 'xxx', :podspec => 'xxxx.podspec'

八、更新私有库代码

1.先把代码clone到本地修改。
2.修改完代码再修改podspecs文件的版本号提交代码。
3.给代码打上tag后push到远端私有库同步代码。
4.向自己的私有库提交podspec文件$ pod repo push MySpecs [name].podspec
5.github DeskTop客户端同步本地spec仓库到远程specs仓库。
6.更新结束,可以搜索到新版本。pod search XXX

二.让你的框架支持cocoapods

1.注册Trunk

// 加上–verbose可以输出详细debug信息,方便出错时查看。
pod trunk register wenyanjun1314@163.com “coderYJ” –verbose

2.发布到cocoapods(验证通过后,给当前代码打上tag,建议tag和版本号一致)

// –use-libraries –allow-warnings
pod trunk push YJSettingTableView.podspec(进入到podspec所在目录执行)

2.验证

pod search XXXXXXX

  • 本文作者: Grx
  • 本文链接: https://ruixiaoguo.github.io/Grx.github.io/Grx.github.io/2018/01/18/创建属于自己的私有库(github)以及提交到cocoapods/
  • 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!
  • OC

扫一扫,分享到微信

App设计的基本原则和规范
程序员安身立命的138条忠告
  1. 1. 创建属于自己的私有库(github)以及提交到cocoapods
    1. 1.1. 私有库及公有库理解
    2. 1.2. Cocoapods的原理及目录结构
    3. 1.3. 基本目录结构:
  2. 2. 步骤
    1. 2.1. 一、git上创建私有的Specs库文件夹
    2. 2.2. 二、将远端的私有Specs仓库clone到本地.cocoapods目录下
    3. 2.3. 三、创建一个podspec文件
    4. 2.4. 四、验证podspec合法性
    5. 2.5. 五、给当前代码打上tag
    6. 2.6. 六、向mySpecs提交.podspec文件
    7. 2.7. 问题小结
      1. 2.7.1. 1、执行pod lib create (组件库) 出错
      2. 2.7.2. 2、添加组件库到私有spec repo仓库后 执行 pod search搜索不到。
      3. 2.7.3. 3、提交本地podspec到Specs仓库的时候出错,提示repo 文件夹下的spec repo is not clean
      4. 2.7.4. 注意:
    8. 2.8. 七、查询私有库并使用
    9. 2.9. 八、更新私有库代码
    10. 2.10. 二.让你的框架支持cocoapods
      1. 2.10.1. 1.注册Trunk
      2. 2.10.2. 2.发布到cocoapods(验证通过后,给当前代码打上tag,建议tag和版本号一致)
      3. 2.10.3. 2.验证
© 2014-2024 Grx
GitHub:hexo-theme-yilia-plus by Litten
本站总访问量次 | 本站访客数人
  • 标签
  • 友链
  • 关于我

tag:

  • life
  • OC
  • Google
  • Fastlane
  • Flutter
  • hexo
  • 智能家居
  • Apple Watch
  • 逆向
  • Lottie
  • PHP
  • cocos2d
  • Mac
  • MonkeyKing
  • RN
  • Swift
  • RAC
  • WKWebView
  • WebView
  • Xcode
  • xcode
  • ios
  • Android
  • appledoc
  • MMKV
  • LLVM
  • FreamWork






    
    

  • 唐巧的博客
  • 王巍(喵神)OneVsDen
  • 阿里“念纪“
  • 滴滴-戴铭
  • 郭曜源(ibireme)
  • 阿里”南栀倾寒“
  • 蘑菇街李忠
  • 码农人生
  • 玉令天下
  • bang
  • Ian的博客
这里是Grx的个人博客:
iOS开发工程师一枚
联系方式:
QQ:1217255509
Email:grx0917@sina.com
知识管理,时间管理,自我管理,架构即未来
欢迎技术交流!