Skip to content

Kejiasir/MakingCocoaPods

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 

Repository files navigation

MakingCocoaPods

  • 我想大家做项目都会利用CocoaPods来引用别人的框架吧, 就像的AFN,SDWebImage这些知名的大神级框架, 但是你知道这样的CocoaPods依赖库是怎样制作的吗? 刚好前几天写了点 东西 想共享给大家使用, 所以呢! 费了些神找Google要了资料, 在这记录下制作过程吧, 给有需要的童鞋做些参考, 先放个 CocoaPods的官方Blog链接 吧 !

下面来说下制作步骤

  • 首先在Github创建一个Repository不用说了吧, 大家都会的 ;
  • 第二 GitHub 你刚才创建的Repository到本地 ;
  • 第三 话说大神的框架都会提供一个Demo给人参考是咋使用的吧, 嘿嘿, 所以我们在Xcode创建一个和仓库同名的工程放在刚刚 Clone 到本地的文件夹下面, 就跟大家平时新建工程项目一样的操作就好啦 ;
  • 然后呢, 注意啦, 最重要的一步, 现在请打开你的终端, 执行如下命令:
 $ pod spec create your framework name
 # your framework name 你的依赖库的名字, 比如 SDWebImage
  • 这个命令会帮我们创建一个 .podspec 的文件, 这是一个非常非常非常重要的文件, 你可以在本地使用文本编辑器打开来进行编辑(千万不要在本地编辑, 这是天坑, 可以看下面的更新血泪史), 但最好是提交到github上来编辑, 比较方便, 里面有很多CocoaPods帮我们生成的内容, 包括有完整的注释说明, 但大部分是我们不需要的, 直接删掉留下有用的就好 ;

  • 以我的项目为例, 先截个本地代码库结构目录图 :

  • 如图: 你需要再另外创建一个和你的 .podspec 文件对应的同名的文件夹用来放你的依赖库的源代码, 文件夹的存放路径至少是和 .podspec 文件同个目录的, 当然你可以放到更里面的子目录中去, 就像我的, 但是这样的话 .podspec 文件里的 s.source_files 路径就要写对了 ;

GitHub

  • 下面就是 .podspec 文件中我们需要编辑内容, 对于一个简单的依赖库有这些就足够了, 当然如果是像 AFN, SDWebImage 这样的大神级开源框架那就可能不止这些了, 感兴趣的童鞋可以自己去找来打开看看哈 .
Pod::Spec.new do |s| 
  s.name         = "LaunchAnimation" 
  s.version      = "0.1.0" 
  s.summary      = "只需要一行代码就可以使您的项目增加一个启动动画效果"
  s.description  = <<-DESC
                  只需要一行代码就可以使您的项目增加一个启动动画效果,简单快捷,没有任何依赖
                   DESC
  s.homepage     = "https://github.com/Kejiasir/" 
  s.license      = "MIT" 
  s.author       = { "Arvin" => "yasir86@126.com" } 
  s.platform     = :ios, "7.0" 
  s.source       = { :git => "https://github.com/Kejiasir/LaunchAnimation-demo.git", :tag => s.version }
  s.source_files = "LaunchAnimation-demo/LaunchAnimation-demo/LaunchAnimation/*.{h,m}" 
  s.requires_arc = true 
end
  • s.names.summary 声明库的名称和说明文档 , pod search 命令就是根据这两项内容作为搜索文本的 ;
  • s.version 依赖库源代码的版本 ;
  • s.description 依赖库的详细功能描述 ;
  • s.homepage 声明依赖库的主页 ;
  • s.license 所采用的开源许可协议 ;
  • s.author 依赖库的作者 ;
  • s.platform 依赖库支持的系统平台, 可以指定平台版本 ;
  • s.source 声明依赖库源代码的地址, 后面的Tag是每发布一个Release版本时打上的标签, 注意:每个版本的Tag需要与s.version声明的一致 ;
  • s.source_files 是包含依赖库所有源代码的目录, 以上述的格式为例, 前面部分 LaunchAnimation-demo/LaunchAnimation-demo/LaunchAnimation/ 是一个相对目录路径, 目录的层级关系一定要跟(本地及线上)代码库的保持一致, 最后的 *.{h,m} 则是一个类似正则表达式的字符串, 表示匹配所有以.h.m为扩展名的文件 ;
  • s.requires_arc 声明是否使用ARC, 'true'表示YES, 'flase'则表示NO

这里先插播说下Git打标签吧

  • 常用的就两种方式
  • 第一, 含附注的标签
    • 创建一个含附注类型的标签非常简单, 用-a(取annotated的首字母)指定标签名字即可:
$ git tag -a 0.1.0 -m 'my version 0.1.0'
# -m 则指定了对应的标签说明, Git 会将此说明一同保存在标签对象中, 类似commit 代码时附带的-m说明
& git show
# 用此命令查看相应标签的版本信息, 并连同显示打标签时的提交对象
  • 第二, 轻量级标签
  • 轻量级标签, 实际上就是一个保存着对应提交对象的校验和信息的文件, 后面神马都不带, 我一般就使用这种
$ git tag 0.1.0
  • 打完标签需要将标签分享到远端服务器, 默认情况下, git push 并不会把标签传送到远端服务器上, 只有通过显式命令才能分享标签到远端仓库, 其命令格式如同推送分支, 使用如下命令即可:
$ git push origin 0.1.0

完成了上述步骤后, 把文件提交到github, 我们需要对 .podspec 文件进行验证

  • 使用如下命令
$ pod lib lint 
  • 如无意外, 你将看到如下图这样的结果, -> LaunchAnimation (0.1.0) 前面的箭头是绿色的, 表示验证通过;

GitHub

  • 如果是 Error 呢? 哈哈O(∩_∩)O哈!我没遇到, 但是会有提示处理错误的信息, 跟着做就好了 ;

20160914 更新, 终于遇到ERROR了, 记录下

说说导致无法通过验证的主要原因有两个

  • 第一, - ERROR❎ 这是个致命的, 必须解决才能通过

  • 第二, -️ WARN⚠️ 警告, 可以通过命令 --allow-warnings 来忽略

  • 如下图, 这是一个致命的错误, 可以看到 -> YYInfiniteLoopView.podspec 前面的箭头是红色的, 表示error, 验证失败

GitHub

  • 如下图, 可以看到提示有2个 errors, 6个 warnings, 从而无法通过验证

GitHub

  • 如下图, 提示有10个 warnings, 但是后面接着提示我们可以使用 --allow-warnings 命令来忽略它们
  • -> YYInfiniteLoopView (0.1.0) 前面的箭头是黄色的, 表示warning

GitHub

下面是解决问题的过程及方法

  • 上面第一张图的 ERROR 其实是我一开始在创建了 .podspec 文件后在本地用文本工具编辑所导致的, 后来是提交到 github 上编辑, 但是最终还是提示错误, 如下图所示的验证失败提示:

GitHub

  • 讲真, 这个ERROR搞的我都快绝望了, 各种Google, 找遍Stackoverflow, 甚至向CocoaPods仓库提issues都未能解决, 最后无奈把远程和本地的仓库全部删掉重新创建一遍才通过, 真是蛋疼~~

  • 所以这里强烈建议千万不能在本地编辑 .podspec 这个文件, 另外最好是按照我这里写的步骤一步步来操作

  • 现在请使用如下命令来提交你的 .podspec 文件吧

$ pod trunk push xxxxxxxxxx.podspec --allow-warnings

# 另外如果你的库有使用到其他的依赖库, 也请在.podspec文件中声明, 并使用如下命令提交
$ pod trunk push xxxxxxxxxx.podspec --allow-warnings --use-libraries
  • 最后如下图, .podspec 文件验证通过, 并成功提交到CocoaPods, 输出 Log message

GitHub

更新 END!

最终, 顺利进入最后阶段, 将.podspec 文件提交到CocoaPods的Specs库

  • 听说啊! 在2014年5月20日之前是黑暗的日子, 提交到CocoaPods的Specs库相当麻烦, 最终还要官方人工审核通过才行, 真是淡淡的忧桑!
  • 如开头所链接的CocoaPods官方博客所说, 现在CocoaPods已不再接受向CocoaPods/Specs的pull request, 原因是为了安全考虑, 防止每个人的pod被其他人修改, 于是CocoaPods团队开发了trunk服务, 这样每个人都是其发布的pod的owner, 没有权限的人无法修改, 这样更安全, 也更方便快捷, 省去了之前的人工审核和繁琐流程, 大大提高了效率哦 .
  • so! 让我们来看看是如何使用trunk新建并提交我们的我们的pod吧:
  • 先来张CocoaPods官方的trunk提交架构图

GitHub

  • 说明: trunk需要CocoaPods 0.33版本以上, 使用pod --version命令来查看版本
  • 如果版本低, 需要先升级, 使用如下命令:
$ sudo gem install cocoapods
$ pod setup
  • 如果升级完成(版本大于0.33的请忽略上面的过程), 那么开始注册, 执行如下命令
$ pod trunk register  arvinSir.86@gmail.com 'arvin' --description='macbook pro' --verbose
# 上面的命令是我注册时使用的, 你需要把邮箱和名字以及描述替换成你的, 加上--verbose可以输出详细的debug信息, 方便出错时查看
  • 注册后CocoaPods会给你的邮箱发送验证链接, 点击后就注册成功了
  • 完了可以使用如下命令查看自己的注册信息:
$ pod trunk me
  • 如下图是我的注册信息

GitHub

最后就是将你的.podspec 文件提交到CocoaPods的Specs库了

  • 使用如下命令:
$ pod trunk push xxxxxxxxxx.podspec
# 请将 xxxxxxxxxx 替换成你的依赖库名字
  • pod trunk push 命令做了如下三个工作:

  • 验证你本地的 .podspec 文件, 这个步骤我们前面已经做过 ;

  • 上传你的 .podspec 文件到trunk ;

  • 将你的 .podspec 文件转化成trunk需要的Json文件 .

  • 就像上面官方提供的提交架构图描述的那样, 你在trunk中的操作依然会在CocoaPods/Specs仓库中更新, 以后再做更改时只需要更新版本号然后通过trunk来提交, 不用再向CocoaPods/Specspull request并等待审核和Merge了.

  • 使用如下命令来更新你的Pods依赖库就OK啦

 $ pod setup
  • 现在就使用命令 pod search 试试吧, 提交成功后马上就能搜索到自己的库了
  • 就像酱紫, O(∩_∩)O哈哈哈~, 至此大功告成啦!

GitHub

About

如何制作一个自己的CocoaPods依赖库

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published