[组件化]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 就会根据描述文件中的真实源码地址去下载框架源码。

一般上传我们自己开发的框架步骤如下:

  1. 在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就能找到了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容

  • 最近在学习vue.js的时候发现,vue的组件化的思想对于编写代码是一个非常有用的事情。 首先为什么需要组件化? ...
    拂晓的云阅读 7,168评论 6 23
  • iOS开发 - CocoaPods的常见使用方式 https://www.cnblogs.com/hs-funky...
    itlover2013阅读 360评论 0 0
  • 组件化课程笔记 多人开发的时候,没有必要吧pods文件夹的东西传过去; pod install与pod updat...
    Steven_2016阅读 580评论 0 1
  • 前段时间学习完了python,再加上最近需要找工作,决定爬取招聘网站(本文以拉勾网为抓取对象),通过建立相关数...
    励秣阅读 2,241评论 11 40
  • 来到南京上学后,最初的两年住在文澜路北的宿舍,之后一年租住在茶苑,前女友坚持北上之后,我搬到了苜林巷。 没有太多经...
    仲樵阅读 271评论 0 3