亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Cocoapods詳解之---進階篇2

2019-11-07 23:29:31
字體:
來源:轉載
供稿:網友

CocoaPods 詳解之----更新篇

博客原地址:http://foggry.com/blog/2016/03/23/cocoapods-xiang-jie-zhi-geng-xin-pian/

CocoaPods 大概是 2011 年出現的開源組件管理工具(目前已支持 Objective-C 和 Swift),近年來普及率越來越高,幾乎已是所有 Cocoa 開源項目的標配。另外,很多大點的團隊會用 CocoaPods 拆分工程,實現項目插件化。

博主曾在 2014 年寫過 CocoaPods 詳解 系列文章:CocoaPods詳解之——使用篇、CocoaPods詳解之——進階篇、CocoaPods詳解之——制作篇,簡單介紹了從使用到親手制作 CocoaPods 開源組件的過程。

然而隨著時間的推移,CocoaPods 有些使用方式也發生了變化,比如組件提交方式等。本文將從 Trunk 和私有倉庫兩個方面介紹自己對 CocoaPods 的新認識。

一、Trunk 方式提交開源組件

從 CocoaPods 0.33 版本開始,CocoaPods 將組件的提交從 Pull requests 變成了自動化的 Trunk 方式。Trunk 提交方式有以下步驟:

1、向 Trunk 注冊自己的電腦

首次使用 Trunk 時,需要注冊自己的電腦:

12
# pod trunk register [E-mail] [User Name]$ pod trunk register foggry@foggry.com "foggry"

執行命令以后,上述郵箱會收到一封驗證郵件,按照郵件說明打開制定的鏈接,注冊流程就完成了。

注冊流程完成后,可以使用命令:

1
$ pod trunk me

可以檢驗注冊結果,如果輸出:

123456
- Name:     foggry- Email:    foggry@foggry.com- Since:    May 19th, 2014 16:03- Pods:     None- sessions:- March 19th, 22:23 - July 25th, 22:26. ip: 10.1.1.1

則說明注冊成功。

2、提交組件

準備好 podspec 文件后,首先要檢查其合法性:

12
# Enter podspec path$ pod lib lint

解決完錯誤和警告后,會顯示以下內容:

123
-> FGMarqueeView (1.0.0)FGMarqueeView passed validation.

這就說明驗證可以提交了。

執行提交命令:

1
$ pod trunk push WZMarqueeView.podspec

如果順利的話,會輸出以下內容:

1234567891011
Updating spec repo `master`Validating podspec-> WZMarqueeView (2.0.0)Updating spec repo `master`- Data URL: https://raw.githubusercontent.com/CocoaPods/Specs/1f2d70d978843a29cbe17b2476ffed8204eea6ef/Specs/WZMarqueeView/2.0.0/WZMarqueeView.podspec.json- Log messages:- March 21st, 00:49: Push for `WZMarqueeView 2.0.0' initiated.- March 21st, 00:49: Push for `WZMarqueeView 2.0.0' has been pushed (2.327208585 s).

僅需要這一條命令,開源組件就被推送到 CocoaPods 主倉庫中了??梢詧绦幸韵旅铗炞C下:

1
$ pod search WZMarqueeView

輸出為:

123456
-> WZMarqueeView (2.0.0)A marquee view used on iOS.pod 'WZMarqueeView', '~> 2.0.0'- Homepage: https://github.com/wangzz/WZMarqueeView- Source:   https://github.com/wangzz/WZMarqueeView.git- Versions: 2.0.0, 1.0.0 [master repo]

說明組件 WZMarqueeView 已經成功從 1.0.0 升級成了 2.0.0 版本。

3、其它說明

權限聲明

在執行下述命令時:

1
$ pod trunk push WZMarqueeView.podspec

提示了以下錯誤:

123456
Updating spec repo `master`Validating podspec-> WZMarqueeView (2.0.0)[!] You are not allowed to push new versions for this pod.

原來,Trunk 要求只有組件所有者和開發者才能更新已有組件,而上例的組件 WZMarqueeView 是 2014 年通過 Pull requests 方式上傳到 CocoaPods 主倉庫的,并沒有聲明過所有權。

隨后,到 CocoaPods 指定的網頁:Claim your Pod上填寫對應信息后,按照提示執行命令:

1
$ pod trunk info WZMarqueeView

看到執行結果:

12345
WZMarqueeView- Versions:- 1.0.0 (2014-05-19 22:03:59 UTC)- Owners:- foggry <foggry@foggry.com>

組件的所有權已經變成了本人,此時再去執行 trunk push 命令時就正常了。

為組件添加其它所有者

一個組件可以通過以下命令,添加多個所有者(以郵箱為標識):

12
# pod trunk add-owner [Module Name] [Owner E-mail]$ pod trunk add-owner WZMarqueeView kyle@cocoapods.org

執行成功后,kyle@cocoapods.org 也變成了 WZMarqueeView 的所有者。

Pull requests 和 Trunk 對比

對于開發者來說,Pull requests 的操作過程十分繁瑣,需要開源組件制作者先 fork 一份主倉庫,然后將組件提交到 fork 后的倉庫,再 Pull requests 給 CocoaPods 主倉庫的維護者;

對 CocoaPods 主倉庫的維護者來說,需要手工一個個處理主倉庫的合并操作,通常第二天甚至需要更長時間 requests 才能被處理;

而 Trunk 方式,開發者只需要一條命令就能將組件上傳到主倉庫,并且 Trunk 方式是自動化的,幾乎不再需要主倉庫的維護者做任何工作,實時性更好。

另外,Trunk 增加了組件所有者的概念,非所有者無法提交組件的更新,這在一定程度上提高了 CocoaPods 的安全性。

二、創建私有 CocoaPods 倉庫

目前所有支持 CocoaPods 的開源組件,都存儲在 Github 上公共的 CocoaPods Specs 倉庫中,這種方式有以下缺點:

官方倉庫過大,里面的絕大多數組件都不是我們需要的,你一定忘不了首次執行 pod install 操作時那無盡的等待;

不能實現私有化,作為一個相當好用的組件管理工具,很多團隊都使用 CocoaPods 實現龐大項目的組件化,都放在公共倉庫肯定不行。

這時就需要創建一個和 CocoaPods Specs 類似的私有組件存儲倉庫。私有倉庫可以存放在自家公司的 Git 服務器上,也可以放在各大支持私有倉庫的 Git 平臺上,下面以支持免費私有倉庫的 coding.net為例說明 CocoaPods 私有倉庫的創建過程。

1、創建coding.net私有倉庫

按照 coding.net 官網提示創建一個私有倉庫即可。

2、本地初始化組件倉庫

執行以下命令:

12
# pod repo add [PRivate Repo Name] [GitHub HTTPS clone URL]$ pod repo add FGSpecs https://git.coding.net/foogry/FGSpecs.git

3、向倉庫中添加組件

將事先準備好的組件添加到倉庫中,組件可以存放在本地,也可以放在自家或網上的代碼托管平臺。執行以下命令:

12
# pod repo push [Private Repo Name] [Private podspec Path]$ pod repo push FGSpecs ~/Desktop/FGMarqueeView.podspec

執行成功以后,會有以下輸出:

12345678910111213141516
Validating spec-> FGMarqueeView (0.1.0)Updating the `FGSpecs' repoAlready up-to-date.Adding the spec to the `FGSpecs' repo- [Fix] FGMarqueeView (0.1.0)Pushing the `FGSpecs' repoTo git@git.coding.net:foogry/FGSpecs.gite2ad499..31a1a8e  master -> master

至此,本地和代碼托管平臺上的私有倉庫 FGSpecs 中就都已經添加了私有組件 FGMarqueeView。

4、使用私有倉庫中的組件

Podfile 文件中默認情況下已經隱式使用 source 聲明了 CocoaPods 的官方倉庫。但使用私有組件,需要使用 source 關鍵字鮮顯式聲明組件所在倉庫:

12345678
# Private Specssource 'https://git.coding.net/foogry/FGSpecs.git'# Public Specssource 'https://github.com/CocoaPods/Specs.git'pod 'FGMarqueeView', '~> 0.1.0'pod 'SBJson', '~> 4.0.0'

其中,SBJson 組件是官方倉庫的,FGMarqueeView 組件屬于我們剛創建的私有倉庫。

需要注意的是:

官方倉庫的顯式聲明

盡管官方倉庫會被隱式聲明,如果同時使用了官方倉庫和私有倉庫,就需要同時聲明二者。

倉庫聲明順序性

先聲明的倉庫具有優先權。當先后引用的兩個倉庫中都包含同一個組件時,會使用先引用倉庫中的,哪怕后引用的倉庫中版本號更高。

5、直接使用私有組件

如果不想創建私有倉庫,也可以在 Podfile 里直接引用私有組件(組件可以是本地的,也可以是托管在自家公司服務器或網上的代碼托管平臺上的),引用的同時還可以制定具體的 commit、branch 或者 tag,比如:

1
$ pod 'FGMarqueeView', :git => 'https://git.coding.net/foogry/FGMarqueeView.git', :commit => 'b4dc0ffee'

這種方式引用的組件在執行完 pod install 以后,會被添加在 Development Pods 目錄下,而通過私有倉庫或共有倉庫方式引用的組件則會被添加在 Pods 目錄下。

三、cocoapods 版本管理

cocoapods 升級新版本后可能會遇到坑,因此就有了降級的需求。

查看當前版本
1
sudo gem list cocoapods
卸載當前版本
1
sudo gem uninstall cocoapods
安裝指定版本
1
sudo gem install cocoapods -v 0.39.0

四、參考文檔

CocoaPods Trunk

Getting setup with Trunk

Private Pods

Podfile Syntax Reference

Downgrading or installing older version of Cocoapods


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情一级二级| 亚洲国产成人精品女人久久久| 久久精品2019中文字幕| 日韩免费观看视频| 欧美影院久久久| 亚洲国产成人精品久久久国产成人一区| 不卡av电影院| 欧美国产视频日韩| 亚洲免费视频一区二区| 国产女人18毛片水18精品| 亚洲欧美激情另类校园| 日本欧美爱爱爱| 久久精品99久久久久久久久| 欧美成人精品在线观看| 国产精品视频久久久| 亚洲一区999| 97香蕉超级碰碰久久免费的优势| 国产成人精品在线观看| 26uuu另类亚洲欧美日本一| 国产91在线视频| 亚洲精品福利免费在线观看| 九色精品免费永久在线| 日韩高清中文字幕| 欧美中文字幕在线视频| 国产精品视频免费观看www| 久久人体大胆视频| 国产91成人在在线播放| 麻豆国产精品va在线观看不卡| 日韩欧美中文第一页| 欧美中文在线免费| 91av在线国产| 最近2019免费中文字幕视频三| 国产成人精品av在线| 毛片精品免费在线观看| 91国产视频在线播放| 久久久久999| 亚洲第一男人av| 成人激情视频在线观看| 清纯唯美日韩制服另类| 国产91色在线播放| 国产精品99久久久久久人| 国产精品丝袜视频| 欧美成人在线免费视频| 欧美富婆性猛交| 日韩专区在线观看| 久久久久久这里只有精品| 亚洲伊人久久综合| 国产欧亚日韩视频| 91高潮精品免费porn| 日韩一二三在线视频播| 久久久久久久国产| 国产91精品黑色丝袜高跟鞋| 久久成人18免费网站| 亚洲欧美日韩国产成人| 福利视频一区二区| 不用播放器成人网| 国产精品久久电影观看| 57pao成人永久免费视频| 欧美日韩在线免费观看| 午夜精品在线观看| 亚洲精品999| 97精品国产97久久久久久免费| 国产精品27p| 欧美日韩免费网站| 1769国内精品视频在线播放| 亚洲石原莉奈一区二区在线观看| 欧美三级欧美成人高清www| 久久免费视频在线观看| 欧美高清电影在线看| 国产精品久久久久久久一区探花| 国产剧情久久久久久| 日本免费一区二区三区视频观看| 日韩一区av在线| 欧美大片欧美激情性色a∨久久| 欧美激情一区二区三区高清视频| 国内伊人久久久久久网站视频| 精品国产自在精品国产浪潮| 欧美精品在线第一页| 欧美疯狂xxxx大交乱88av| 精品视频久久久久久| 欧美午夜视频一区二区| 国产欧美精品一区二区三区介绍| 91色琪琪电影亚洲精品久久| 2018国产精品视频| 亚洲久久久久久久久久久| 国产精品午夜国产小视频| 动漫精品一区二区| 欧美激情中文字幕在线| 欧美制服第一页| 91精品国产九九九久久久亚洲| 精品国产精品三级精品av网址| 欧美日韩在线视频一区| www国产91| 国产三级精品网站| 91久久国产精品91久久性色| 国产亚洲精品美女久久久久| 96精品久久久久中文字幕| 久久九九精品99国产精品| 国产亚洲激情在线| 亚洲高清一二三区| 欧美在线一区二区三区四| 久久久亚洲福利精品午夜| 国产精品久久不能| 疯狂做受xxxx高潮欧美日本| 一区二区三区在线播放欧美| 欧美成人在线免费视频| 欧美性jizz18性欧美| 一本一本久久a久久精品综合小说| 久久久久久久久国产| 国产精品一区二区电影| 亚洲色图18p| 91夜夜揉人人捏人人添红杏| 欧美日韩亚洲91| 成人精品久久一区二区三区| 久久久久久97| 久久精品中文字幕电影| 久久影视电视剧凤归四时歌| 国内精品久久久久久影视8| 亚洲欧美中文字幕在线一区| 久久久国产一区二区| 九色成人免费视频| 在线视频欧美性高潮| 日韩资源在线观看| 成人有码视频在线播放| 欧美激情久久久| 91免费高清视频| 国产精品av在线播放| 亚洲国产小视频在线观看| 国产a级全部精品| 九九热99久久久国产盗摄| 成人免费视频在线观看超级碰| 日本久久久a级免费| 日韩欧美a级成人黄色| 欧美成人性生活| 国产午夜精品理论片a级探花| 成人激情av在线| 欧美在线视频一区二区| 久久久亚洲影院你懂的| 国产精品免费电影| 51视频国产精品一区二区| 国产精品久久久久国产a级| 日韩二区三区在线| 亚洲аv电影天堂网| 欧美亚洲国产日韩2020| 国产一区二区日韩精品欧美精品| 欧美精品www在线观看| 欧美激情亚洲精品| 日本道色综合久久影院| 2020国产精品视频| 亚洲电影免费观看高清完整版| 亚洲人成电影网站色xx| 日韩中文在线中文网在线观看| 91老司机在线| 日韩精品中文在线观看| 亚洲级视频在线观看免费1级| 日韩av成人在线| 国产精品美女久久久久久免费| 视频在线一区二区| 精品亚洲aⅴ在线观看| 久久久精品一区| 黑人精品xxx一区一二区| 成人黄色在线播放| 久久久欧美精品| 18性欧美xxxⅹ性满足|