1.CocoaPods 的安装
<已经了解CocoaPods的同学请直接跳到第3步或第4步>
1.1 作用:
帮助管理和维护第三方框架,快速的搜索到第三方框架, 然后自动集成到工程里面来, 并编译成一个libPod.a的静态库给我们项目用.
1.2 理解:
1.2.1 什么是gem
Gem是一个管理Ruby库和程序的标准包,它通过Ruby Gem(如 http://rubygems.org/ )源来查找、安装、升级和卸载软件包,非常的便捷。
1.2.2 常用命令
$ gem --version (查看gem版本)
$ gem update --system(更新gem)
$ gem sources(查看数据源)
$ gem sources --remove https://rubygems.org/(删除数据源)
$ gem sources -a https://ruby.taobao.org/(添加数据源)
$ gem search 软件包关键字(搜索软件包)
$ gem install 软件包名称(安装软件包)
$ gem install cocoapods --pre(安装上一个版本软件包)
$ gem uninstall 软件包名称(卸载安装包)
注意: 以上命令最好在使用之前, 都添加sudo,代表以管理员身份运行该命令,因为有可能安装软件包的过程当中, 需要创建文件等等, 必须有管理员权限才能操作。
1.3 安装:
$ sudo gem install cocoapods
执行完这句如果报告以下错误:
ERROR: Could not find a valid gem 'cocoapods' (>= 0), here is why: Unable to download data from https://rubygems.org/ - Errno::ETIMEDOUT: Operation timed out connect(2) (https://rubygems.org/latest_specs.4.8.gz)
ERROR: Possible alternatives: cocoapods
则需要更新一下ruby的源:
$ gem sources (查看当前ruby的源)
$ gem sources --remove https://rubygems.org/ (删除数据源)
$ gem source -a https://gems.ruby-china.com/ //最新
如果gem太老,可以尝试用如下命令升级gem:
$ sudo gem update --system(注解: sudo 是以超级管理员的身份操作)
升级成功后会提示: RubyGems system software updated
然后重新执行安装下载命令
$ sudo gem install cocoapods
(可能会报错,出现以下问题:ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /usr/bin directory.)
建议使用下面的方法进行安装:
$ sudo gem install -n /usr/local/bin cocoapods --pre //最新版本
或着 sudo gem install -n /usr/local/bin cocoapods -v (版本号) //指定安装 cocoapods的版本
验证成功:$ pod --version
接下来进行安装,执行:
$ pod setup
升级到10.11, CocoaPods报错: command not found, 解决方案:
$ sudo gem update --system
$ sudo gem uninstall cocoapods
$ sudo gem install -n /usr/local/bin cocoapods
随后如果出现下列错误
[!] An error occurred while performing `Git pull` on repo `master`.
[!] /usr/bin/git pull --ff-only
原因: Cocoapods的分支不支持当前最新的Xcode版本
解决办法: 删除master分支 重新建立新的分支
$ sudo rm -fr ~/.cocoapods/repos/master
$ pod setup
2.CocoaPods 的简单使用
2.1 步骤
1> Xcode新建一个项目,名字Test
2> 终端中,cd到项目总目录(注意:包含Test.xcodeproj的那个目录)
3> 执行命令 $ pod init 或者 $ vim Podfile 建立Podfile配置文件
4> 打开podfile文件,不要选择文本编辑打开方式,选择Xcode打开,编辑文件如下
5> 执行 $ pod install 现在打开项目不是点击 Test.xcodeproj了,而是点击 Test.xcworkspace
2.2 说明
生成的重要文件Podfile.lock 用来记录着上一次下载的框架版本
2.3 pod install 和 pod update 区别
install 如果Podfile.lock文件存在, 直接从此文件中读取框架信息下载安装,如果不存在, 依然会读取Podfile文件内的框架信息。
update 不管Podfile.lock是否存在, 都会读取Podfile文件的的框架信息去下载。主要区别在于, Podfile文件内的框架信息, 版本描述没有指定具体版本。
3.创建CocoaPods远程公有库
3.1 注册CocoaPods账户信息
想要创建一个开源pod库, 首先我们需要注册CocoaPods, 这里使用trunk方式, 作为一个iOS开发人员你一定安装了CocoaPods, 那么只需要在终端执行:
$ pod trunk register 邮箱地址 '用户名' --verbose
这里我们一般使用github邮箱和用户名, 然后在你的邮箱中会收到确认邮件, 在浏览器中点击链接确认即注册成功, 成功之后可以终端执行:
$ pod trunk me
查看自己的注册信息, 以后当你有了自己的开源Pod库, 也可以用此方式随时查看自己发布过的Pods。
3.2 创建共享库文件并上传到公有仓库
共享库需要三个必不可少的部分:
A. 共享文件夹 (文件夹存放着你要共享的内容, 也就是其他人pod得到的文件, .podspec文件中的source_files需要指定此文件路径及文件类型);
B. LICENSE文件 (开源许可证,默认一般选择MIT);
C. 库描述文件.podspec (本库的各项信息描述, 需要提交给CocoaPods, pod通过这个文件查找到你共享的库)。
这一步分两种情况:
A.如果你已经有了现成的想要共享的文件,你只需要满足上面三个部分,即可上传到公有仓库即可继续其他的步骤;
B.你想要创建一个全新的工程去做自己的共享, 可以先从远端clone一个新项目,使用终端命令:
$ pod lib create 库名
然后根据需要选择各项配置后创建一个标准的工程,将代码上传到公有仓库。
3.3 创建并编辑.podspec文件
.podspec 是用 Ruby 的配置文件,描述你项目的信息。
在你的仓库目录下,使用终端命令创建:
$ pod spec create 文件名称
修改podspec文件内容:
Pod::Spec.new do |s|
s.name = 'JFPhoneNumTFLib'
s.version = '0.1.1'
s.summary = 'JFPhoneNumTFLib.'
s.homepage = 'https://github.com/MichealFan/JFPhoneNumTFLib'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'lannikeng' => 'lannikeng@163.com' }
s.source = { :git => 'https://github.com/MichealFan/JFPhoneNumTFLib.git', :tag => s.version.to_s }
s.ios.deployment_target = '8.0'
s.source_files = 'JFPhoneNumTFLib/Classes/**/*'
# s.resource_bundles = {
# 'JFPhoneNumTFLib' => ['JFPhoneNumTFLib/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
s.frameworks = 'UIKit', 'Foundation'
# s.dependency 'AFNetworking', '~> 2.3'
end
值得注意的是:podspec文件中的homepage和source不支持ssh协议地址,所以我们得放入http/https地址。
编写完成后, 我们需要验证.podspec文件的合法性, 这里需要终端cd到.podspec文件所在文件夹, 执行:
$ pod lib lint JFPhoneNumTFLib.podspec
如果遇到警告的话,我们需要加上在后面 --allow-warnings
如有其他错误请重新检查你的编写正确性, 如果没有问题会出现:
-> JFPhoneNumTFLib (0.1.1)
JFPhoneNumTFLib passed validation.
3.4 给仓库打tag标签, 发布一个release版本
验证成功后,将仓库提交到远程,然后给仓库打上标签并将标签也推送到远程。
标签相当于将你的仓库的一个压缩包,用于稳定存储当前版本。标签号与你在.podspec文件中 s.version = "0.1.1"的版本号一致。这里你可以在你的git仓库中的releases一项去手动发布, 也可以在当前文件夹下使用终端命令:
$ git tag -m 'first release' '0.1.1'
$ git push --tag #推送tag到远端仓库
3.5 发布自己的库描述文件podspec给cocoapods
发布项目的描述的文件 JFPhoneNumTF.podspec
同样在这个文件夹下, 终端执行:
$ pod trunk push JFPhoneNumTF.podspec
将你的.podspec发布到公有的specs上,这一步其实做了很多操作,包括
1> 更新本地 pods 库~/.cocoaPods.repo/master
2> 验证.podspec格式是否正确
3> 将.podspec文件转成 JSON 格式
4> 对master仓库 进行合并、提交.master仓库地址
成功后将会出现下列信息:
Updating spec repo`master`
Validating podspec -> JFPhoneNumTF (0.1.1)
Updating spec repo`master`
3.6 使用仓库
发布到Cocoapods后,在终端更新本地pods仓库信息
$ pod setup
查询仓库
$ pod search JFPhoneNumTF
若出现仓库信息说明已经成功了,这时候你就可以在 Podfile 添加、使用自己的仓库了 pod 'JFPhoneNumTF', '~> 0.1.1'
3.7 更新维护
当你的代码更新维护后,就需要重写发布,流程是:
1> 更新JFPhoneNumTF.podspec中的版本号
2> 打上tag标签推送远程
3> pod trunk push JFPhoneNumTF.podspec 推送到pods仓库
4.创建CocoaPods远程私有库
4.1 创建添加版本库(repo),远程索引库
首先,创建一个像 master 一样的存放版本描述文件的git仓库,因为是私人git仓库,我们选择 oschina 创建远程私有仓库(因为是免费的)或者也可以在GitHub上创建($7/month)。
创建版本描述仓库后,回到终端,将这个远程的私有版本仓库添加到本地,repo 就是 repository 储存库的缩写。
$ pod repo add MySpecRepo https://git.oschina.net/JMicheal/MySpecRepo.git
查看在 Finder 目录 ~/.cocoapods/repos, 可以发现增加了一个 MySpecRepo 的储存库。
4.2 创建代码库
回到 oschina 创建私人代码库,创建时添加 MIT License 和 README。
将仓库克隆到本地,添加你的代码文件、仓库名.podspec 描述文件,还有.swift-version。
.swift-version文件用来知道swift版本,用命令行创建:
$ echo "3.0" > .swift-version```
这里我要说一下一个坑,用 oschina 创建私人仓库时, 在验证时可能会找不到 MIT LICENSE证书,将其中的
s.license = "MIT"
修改为,指定文件
s.license = { :type => "MIT", :file => "LICENSE" }
验证podspec文件
$ pod lib lint 验证本地连接
$ pod spec lint 验证远程连接
与公有库的创建方式一样, 验证成功之后push到仓库, 然后打tag发布release版本。一般出现错误警告,需要添加 --private 或者 --allow-warnings,就可以通过验证。
4.3 将描述文件podspec推送到私有Sepc repo版本库中
公有库使用trunk方式将.podspec文件发布到CocoaPods/Specs, 内部的pod组件库则是添加到我们第一步创建的私有Spec repo中去, 在终端执行:
$ pod repo push MySpecRepo xxxx.podspec
这时会对远程仓库进行验证,成功的话就会在 ~/.cocoapods/repos/MySpecRepo 中发现新增的仓库描述信息了。过程为以下几步:
1> 验证 xxxx.podspec 文件
2> 拉取远程版本库 MySpecRepo
3> 添加 xxxx.podspec 到版本库中
4> push 到远程
若是出现错误信息:
[!] The repo `MySpecRepo` at `../.cocoapods/repos/MySpecRepo` is not clean
更新下我们的版本库,
$ pod repo update MySpecRepo
再继续上传即可。
添加完成后我们就可以在pod中搜索 $ pod search xxxx。
4.4 私人pod库的使用
使用私人pod库的需要在Podflie中添加这句话,指明你的版本库地址。
source ‘https://git.oschina.net/JMicheal/MySpecRepo.git’
**注意**是版本库的地址,而不是代码库的地址
若有还使用了公有的pod库,需要把公有库地址也带上
source ‘https://github.com/CocoaPods/Specs.git’
执行 $ pod install 可以看到代码已经整合到我们的项目中了。
5 创建CocoaPods本地私有库
5.1 创建本地库
5.2 创建podSpec文件
podspec文件其余都与前两种情况类似,仅仅是把本地库的source链接地址可以去掉,改为:
s.source = { :git => "", :tag => "#{s.version}" }
5.3 验证podspec文件
5.4 创建测试工程,并创建Podfile文件,进行安装本地库
path指向本地文件的相对路径即可:
pod 'xxxx',:path => '../Lib/xxxx'
执行 $ pod install 安装。
其他相关文章: