[组件化]02.上传自己的库到cocoaPod
这篇文章用来记录如何将自己的库上传到cocoaPod上。中间会讲解cocoaPod的工作机制。
一.git的基本使用
1.初始化一个代码仓库
git init
2.如果使用GIT,必须给GIT配置用户名和邮箱
给当前的git仓库配置用户名和邮箱
git config user.name “用户名”
git config uer.email “邮箱”
给git配置全局的用户名和邮箱
git config —global user.name “用户名”
git config —global uer.email “邮箱”
3.初始化项目
touch main.m 创建了main.m
git add main.m 将main.m添加到暂缓区
git commit -m “初始化项目” 将在暂缓区的所有内容提交到本地版本库,清空暂缓区
git add . 将工作区所有不在暂缓区的内容添加到暂缓区
注意:添加的文件或者是修改的文件都要通过add命令将该文件添加到暂缓区。
4.查看文件状态
git status
红色提示:该文件被添加或者被修改,但是没有添加到git得暂缓区
绿色提示:该文件在暂缓区,但是没有提交到本地版本库
5.删除文件
git rm Person.m 将Person.m删除
6.查看版本信息
git log 版本号是由sha1算法生成的40位哈希值
gut reflog:可以查看所有版本回退的操作
7.版本回退
git reset — hard HEAD: 回到当前的版本
git reset — hard HEAD^: 回到上一个版本
8.连接远程仓库
git remote add origin '远程仓库地址'
9.拉取更新
git pull --rebase origin master 或git pull,他们之间区别请看这篇文章 和这篇文章
10.推送到远端
git push origin master
11.给版本打tag
a.git tag 查看tag
b.git tag -a '0.0.1' -m '第一个版本'
c.git push --tags 将tags推到远端
如果修改了代码,重新打个tag。
a.git tag 0.0.2
b.git push origin :0.0.2 提交0.0.2版本的代码
删除某个tag
a.git tag -d 0.0.1
b.git push origin :0.0.1
这里有个问题了,我们是如何通过tag如何找到代码呢?请看下图:
如上图所示,git commit命令会产生一个40位哈希值的版本号(可以通过git log 查看),通过tag找到这个版本号,再通过版本号找到我们编写的代码。
二.cocoaPod工作机制:
cocoaPod远程索引库里保存都是框架描述文件(.spec后缀的文件),这种文件包含框架的名称,版本号以及真实的源码地址。pod setup
命令会将远程索引库拷贝到本地,生成本地索引库,通过pod search
生成检索的索引文件(以json的形式存在,key对应的是框架名称,value对应的是框架索引文件),pod search 是在本地索引库中而不是远程索引库搜索,根据框架名搜到描述文件,pod install 就会根据描述文件中的真实源码地址去下载框架源码。
一般上传我们自己开发的框架步骤如下:
- 在github上新建仓库创建自己的项目。
上图中license最好填MIT。修改spec文件时,license也填MIT。
2.本地创建项目目录,并通过git remote add origin命令关联到远端,创建框架源码,完成源码的开发。
3.创建描述文件。 使用命令:pod spec create + 描述文件名。
pod spec create SFlib1
4.编辑.podspec文件。
我的修改后的spec文件如下,大家可以参考一下:
Pod::Spec.new do |spec|
spec.name = "SFlib1"
spec.version = "0.0.1"
spec.summary = "SFlib1."
spec.description = "A short description of SFlib1."
spec.homepage = "https://github.com/shcamaker/SFlib1"
spec.license = "MIT"
# spec.license = { :type => "MIT", :file => "FILE_LICENSE" }
spec.author = { "Alex.Shen" => "shen19871216@126.com" }
spec.platform = :ios, "9.0"
spec.source = { :git => "https://github.com/shcamaker/SFlib1.git", :tag => "#{spec.version}" }
spec.source_files = "Classes", "Classes/**/*.{h,m}"
spec.exclude_files = "Classes/Exclude"
spec.frameworks = "Foundation", "UIKit"
spec.requires_arc = true
end
5.把项目推到远端。
$ git add .
$ git commit -m "Release 1.0.0."
$ git tag '1.0.0'
$ git push --tags
$ git push origin master
记得要打个tag,不然在验证 .podspec 是否有有效的时候会报错:
warning: could not find remote branch 0.0.1 to clone.
6.验证 .podspec 是否有有效。
pod lib lint
如果遇到以下问题:
ERROR | [iOS] unknown: Encountered an unknown error (Could not find a `ios` simulator (valid values: ). Ensure that Xcode -> Window -> Devices has at least one `ios` simulator listed or otherwise add one.) during validation.
解决办法:需要升级一下cocoaPod:
sudo gem install cocoapods
再次执行pod lib lint,验证通过:
也可使用pod spec lint
如果提示:
[!] The spec did not pass validation, due to 1 warning (but you can use
--allow-warnings
to ignore it).
可以使用以下命令尝试:
$ pod spec lint SFlib1.podspec --verbose --use-libraries --allow-warnings (库名记得要换成自己的)
7.把描述文件传到远程索引库,传之前我们要先通过邮箱注册trunk,注意邮箱要真实可用。
$ pod trunk register shen19871216@126.com "ShenF" --verbose
然后根据提示:
[!] Please verify the session by clicking the link in the verification email that has been sent to shen19871216@126.com.
去到邮件中给到的地址,打开以下网页:
就注册成功了。
8.将spec文件推送到远端索引库。
pod trunk push SFlib1.podspec
如果前面命令中使用到--allow-warnings,可能会提示以下错误:
[!] The spec did not pass validation, due to 1 warning (but you can use
--allow-warnings
to ignore it).
这时再加上--allow-warnings即可:
pod trunk push SFlib1.podspec --use-libraries --allow-warnings
成功了!
Note: 如果pod search找不到自己的库,就需要pod setup 一下,把远程的索引库更新到本地再pod search就能找到了。