真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Git&CocoaPods&私有化,你不得不知的組件化基礎(chǔ)!

Git & CocoaPods & 私有化,你不得不知的組件化基礎(chǔ)!

桑植ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書(shū)合作)期待與您的合作!

Git

理解Git的設(shè)計(jì)思想和基本的工作原理,對(duì)更好的使用Git至關(guān)重要。

Git思想

直接記錄快照,而非比較差異。和其他版本控制系統(tǒng)不同的是,Git存儲(chǔ)數(shù)據(jù)時(shí)將數(shù)據(jù)看成小型的文件系統(tǒng)的一組快照,每次在修改文件提交更新后,它主要對(duì)當(dāng)時(shí)的所有文件制作一個(gè)快照并保存到快照索引中。Git還對(duì)這一個(gè)保存過(guò)程進(jìn)行了優(yōu)化,也就是說(shuō)當(dāng)文件沒(méi)有本修改時(shí),Git不會(huì)重新存儲(chǔ)文件而是只保留一個(gè)鏈接指向之前存儲(chǔ)的文件。這是Git與其他版本控制系統(tǒng)的重要區(qū)別。

近乎所有的操作都是在本地執(zhí)行。Git的大多數(shù)操作都是在本地完成,當(dāng)我們?cè)跊](méi)有網(wǎng)絡(luò)或者沒(méi)有×××的情況下,同樣可以使用Git進(jìn)行辦公。因?yàn)樵诒镜卮疟P(pán)上有項(xiàng)目的完整歷史,可以在任何時(shí)候?yàn)g覽項(xiàng)目的歷史。

保證數(shù)據(jù)的完整性。Git為了保證數(shù)據(jù)的完整性在存儲(chǔ)前都會(huì)計(jì)算校驗(yàn)和,通過(guò)校驗(yàn)和來(lái)引用。校驗(yàn)和機(jī)制叫做SHA-1散列,也叫哈希散列。Git通過(guò)對(duì)校驗(yàn)和的檢查可以保證數(shù)據(jù)的完整性。

校驗(yàn)和是40個(gè)十六進(jìn)制組成的字符串。例如

24b9da6552252987aa493b52f8696cd6d3b00373

在Git中,所以文件都是通過(guò)校驗(yàn)和進(jìn)行查找的,而不是文件名。

Git工作原理

為了更好的理解Git,需要理解其設(shè)計(jì)原理。在Git中,文件有三種狀態(tài): 已提交(committed),已修改(modified)和已暫存(staged)。

  • 已提交: 數(shù)據(jù)已經(jīng)安全的保存到本地?cái)?shù)據(jù)庫(kù)中。
  • 已修改: 數(shù)據(jù)文件被修改,還沒(méi)保存到數(shù)據(jù)庫(kù)中。
  • 已暫存: 對(duì)已經(jīng)修改的文件的當(dāng)前版本做了標(biāo)記,包含下次提交的快照。

對(duì)應(yīng)文件的三種狀態(tài),還引入了三個(gè)工作區(qū)域的概念: Git倉(cāng)庫(kù),工作目錄和暫存區(qū)域。

  • Git倉(cāng)庫(kù): 用來(lái)保存項(xiàng)目的數(shù)據(jù)的地方。
  • 工作目錄:項(xiàng)目中某個(gè)版本獨(dú)立提取出來(lái)的內(nèi)容。
  • 暫存區(qū)域:保存文件下次提交的信息。

工作流程:

  • 在工作目錄中修改文件。
  • 暫存文件,將文件的快照放入暫存區(qū)域。
  • 提交更新,找到暫存區(qū)域的文件,將快照永久存儲(chǔ)。

工作區(qū)域和文件狀態(tài)關(guān)系,如下圖:

Git & CocoaPods & 私有化,你不得不知的組件化基礎(chǔ)!

驗(yàn)證

首先在桌面創(chuàng)建一個(gè)文件夾

$ cd Desktop & mkdir GitDemo & cd GitDemo

初始化Git倉(cāng)庫(kù)

git init

查看Git倉(cāng)庫(kù)狀態(tài)

git status
// 輸出:
        On branch master

        No commits yet

        nothing to commit (create/copy files and use "git add" to track)

提示沒(méi)有可以提交的內(nèi)容,因?yàn)楝F(xiàn)在工作區(qū)什么都沒(méi)有,下面添加A.md文件。

// 創(chuàng)建A.md文件
touch A.md
// 查看Git狀態(tài)
git status
// 輸出:
    On branch master

    No commits yet

    Untracked files:
      (use "git add ..." to include in what will be committed)

        A.md

    nothing added to commit but untracked files present (use "git add" to track)

此時(shí)工作目錄中新添加了一個(gè)文件,也就是說(shuō)A.md文件被修改。在查看倉(cāng)庫(kù)狀態(tài)會(huì)發(fā)現(xiàn)Untracked files A.md, 文件是未跟蹤狀態(tài)。可以使用git add <file>命令提交跟蹤。

git add A.md
git status
// 輸出:
    On branch master

    No commits yet

    Changes to be committed:
      (use "git rm --cached ..." to unstage)

        new file:   A.md

輸出結(jié)果新的文件A.md,通過(guò)git add <file>命令,此時(shí)的A文件已經(jīng)被提交到暫存區(qū),文件的狀態(tài)是已暫存狀態(tài)。git rm --cached <file>...可以將暫存的文件從暫存區(qū)移除。

git commit -m 'add A.md'
// 輸出;
    [master (root-commit) af93fed] add A.md
     1 file changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 A.md

輸出結(jié)果顯示了一些提交的基本信息,master分支,當(dāng)前校驗(yàn)和[af93fed]以及在本次提交中,有多少文件修訂過(guò),多少行添加和刪改過(guò)。通過(guò)此命令將文件提交到倉(cāng)庫(kù)中,此時(shí)文件的狀態(tài)是已提交狀態(tài)。

遠(yuǎn)程倉(cāng)庫(kù)

前面的提到,Git的大部分操作都是在本地完成的,但是為了多人協(xié)作就需要進(jìn)行遠(yuǎn)程倉(cāng)庫(kù)管理。一些基本操作:

// 查看遠(yuǎn)程倉(cāng)庫(kù)服務(wù)器
git remote -v 

// 添加遠(yuǎn)程倉(cāng)庫(kù)
git remote add   

// 拉取倉(cāng)庫(kù)信息
git fetch  

// 推送到遠(yuǎn)程倉(cāng)庫(kù)
git push origin master

// 查看遠(yuǎn)程倉(cāng)庫(kù)
git remote show origin

// 遠(yuǎn)程倉(cāng)庫(kù)的移除和重命名
git remote rename  
git remote rm 

標(biāo)簽操作

// 查看所有標(biāo)簽
git tag

// 添加標(biāo)簽
git tag -a 0.1.1 -m 'message'

// 顯示標(biāo)簽信息
git show 0.1.1

// 提價(jià)標(biāo)簽到遠(yuǎn)程(--tags所有標(biāo)簽)
git push origin --tags 

以上,只是Git的基本原理,其他內(nèi)容請(qǐng)看官方文檔。Git

Cocoapods

作為iOS開(kāi)發(fā)者,想必對(duì)Cocoapods都不會(huì)陌生,那么有沒(méi)有思考過(guò)這些問(wèn)題?它的是如何查找?guī)?,如何集成?kù)的,它的工作原理是什么。那么接下來(lái)我們學(xué)習(xí)一下Cocoapods的工作原理。

工作原理

理解其工作原理需要知道幾個(gè)概念:代碼庫(kù),索引庫(kù),本地索引庫(kù),podspec。

Git & CocoaPods & 私有化,你不得不知的組件化基礎(chǔ)!

  • 代碼庫(kù):Github上公開(kāi)的代碼倉(cāng)庫(kù),可以集成使用。例如: Alamofire、AFNworking等。
  • 索引庫(kù):官方索引庫(kù),能夠通過(guò)Pod安裝的庫(kù)都在這里面,存放的是每個(gè)庫(kù)的Podspec。
  • 本地索引庫(kù):在安裝Pod時(shí),會(huì)把官方索引庫(kù)拉取到本地。通過(guò)pod repo查看索引庫(kù)信息。
  • Podspec:庫(kù)的描述文件,里面記錄著庫(kù)的描述,版本,地址,依賴庫(kù)等信息。

工作流程:

  • 安裝Cocoapods后,本地會(huì)來(lái)去官方的索引庫(kù),生成本地索引表。
  • 使用Pod install時(shí),默認(rèn)情況下,會(huì)去更新本地索引庫(kù),可以在后面添加--no-repo-update忽略更新。
  • pod會(huì)根據(jù)Podfile文件內(nèi)容查找索引表,找到庫(kù)所對(duì)應(yīng)的的Podspec文件,獲取庫(kù)的真是地址。
  • 下載三方庫(kù)到本地。

關(guān)于 Podfile 設(shè)置請(qǐng)看The Podfile。

Podspec后面在做講解,也可以查看Podspec Syntax Reference

Cocoapods私有化

理解了GitCocoapods的工作原理,我們需要學(xué)以致用。本節(jié)我們學(xué)習(xí)創(chuàng)建私有索引庫(kù),可以說(shuō)這是組件化的基礎(chǔ)。

索引庫(kù)

前面提到通過(guò)命令pod repo可以查看本地的索引庫(kù)。

master
- Type: git (master)
- URL:  https://github.com/CocoaPods/Specs.git
- Path: /Users/lqq/.cocoapods/repos/master

上面的URL地址就是公共索引庫(kù)的地址,瀏覽器打開(kāi)其實(shí)就是一個(gè)倉(cāng)庫(kù)。里面存放著所有支持cocoapods的庫(kù)的索引文件podspec。因?yàn)樵搸?kù)是公共的,任何人都可訪問(wèn),所以為了使我們私有的庫(kù)也支持cocoapods就需要?jiǎng)?chuàng)建私有的索引庫(kù)。

下面我們看如何創(chuàng)建私有索引庫(kù),其實(shí)很簡(jiǎn)單。你可以選用一些代碼托管平臺(tái),例如:碼云, Coding。這里以碼云為例。

在碼云中創(chuàng)建一個(gè)私有索引庫(kù),命名為LQQSpecs。

OK私有庫(kù)就創(chuàng)建好了。接下來(lái)將私有索引庫(kù)添加到本地。通過(guò)命令pod repo add <Name> <URL>

pod repo add LQQSpecs 

添加完成后運(yùn)行pod repo就可以看到私有索引庫(kù)了。

至此,私有索引庫(kù)創(chuàng)建完成。

代碼庫(kù)

Cocoapods提供了創(chuàng)建代碼庫(kù)的命令。

pod lib create  // 創(chuàng)建倉(cāng)庫(kù)
// 拉取模板庫(kù)
// 1. 設(shè)置:編程語(yǔ)言 OC 、Swift
// 2. 是否生成Demo?
// 3. 是否生成單元測(cè)試
// 4. 是否生成UI測(cè)試
// 5. 文件前綴

文件目錄結(jié)構(gòu)如下。

├── Example
│?? ├── LQQSegmentBar
│?? ├── LQQSegmentBar.xcodeproj
│?? ├── LQQSegmentBar.xcworkspace
│?? ├── Podfile
│?? ├── Podfile.lock
│?? ├── Pods
│?? └── Tests
├── LICENSE
├── LQQSegmentBar
│?? ├── Assets
│?? └── Classes
├── LQQSegmentBar.podspec
├── README.md
└── _Pods.xcodeproj -> Example/Pods/Pods.xcodeproj
  • Example: Demo文件對(duì)應(yīng)前面第二步,在這里寫(xiě)測(cè)試代碼,或?qū)嵗绦?/li>
  • LQQSegmentBar: 封裝的庫(kù)。
  • LQQSegementBar.podspec: 這是庫(kù)的描述文件,將它提交到索引庫(kù),后面在解釋。

這里需要注意是,當(dāng)封裝庫(kù)更新時(shí),Example需要使用pod install更新,才能正常使用修改過(guò)的庫(kù)。

配置Podspec

下面我們來(lái)看一下Podspec文件。 由于上面使用pod提供的模板庫(kù)創(chuàng)建的項(xiàng)目,所以默認(rèn)生成了該文件。如果為現(xiàn)有的庫(kù)添加該文件,需要使用命令

pod spec create  //創(chuàng)建Podspec

Podspec文件創(chuàng)建成功。那么文件里有什么內(nèi)容,如何設(shè)置。由于涉及到的參數(shù)較多,所以這里只找?guī)讉€(gè)關(guān)鍵的。其他請(qǐng)看Podspec Syntax Reference

下面以AFNworkingPodspec文件為例。


Pod::Spec.new do |s|
  s.name     = 'AFNetworking' // 名稱
  s.version  = '3.2.0' // 版本
  s.license  = 'MIT' // License
  s.summary  = 'A delightful iOS and OS X networking framework.' // 簡(jiǎn)介
  s.homepage = 'https://github.com/AFNetworking/AFNetworking' // 項(xiàng)目主頁(yè)
  s.authors  = { 'Mattt Thompson' => 'm@mattt.me' } // 作者
  s.source   = { :git => 'https://github.com/AFNetworking/AFNetworking.git', :tag => s.version, :submodules => true } // 倉(cāng)庫(kù)地址
  s.public_header_files = 'AFNetworking/AFNetworking.h' // 頭文件
  s.source_files = 'AFNetworking/AFNetworking.h' // 源文件

  #......
end 

上面只是涉及最基礎(chǔ)的設(shè)置,其他的請(qǐng)查看官方文檔。

封裝好代碼并且修改好Podspec文件,我們可以將項(xiàng)目上傳到私有倉(cāng)庫(kù)了。

上傳完成后需要為項(xiàng)目打標(biāo)簽,這個(gè)標(biāo)簽與Podspec文件中的版本號(hào)對(duì)應(yīng)。

接下來(lái)將Podspec上傳到私有索引庫(kù)就可以,在上傳之前最好驗(yàn)證Podspec文件是否有錯(cuò)誤。

pod lib lint // 本地驗(yàn)證

pod spec lint // 遠(yuǎn)程驗(yàn)證

上傳到私有索引庫(kù)pod repo push <索引庫(kù)名> <Podspec文件>

pod repo push LQQSpecs xxx.podspec

OK!至此,私有索引庫(kù),私有倉(cāng)庫(kù),添加到私有索引庫(kù)都完成了。

檢驗(yàn)成果的時(shí)候到了。

pod search 'xxx'

// [!] Unable to find a pod with name, author, summary, or description matching `xxx`

WTF! 這是什么情況呢, 不要著急,并不是上述沒(méi)有成功,是因?yàn)殡娔X有緩存。

資料庫(kù)->Caches->Cocoapods

那么,如何將個(gè)人開(kāi)源庫(kù)發(fā)送到共有索引庫(kù),想必也回來(lái)。唯一的區(qū)別是Podspec上傳的位置不同。

總結(jié)

本文學(xué)習(xí)了Git和Cocoapods工作原理。以及通過(guò)Cocoapods創(chuàng)建私有庫(kù),并集成Cocoapods功能。

參考

  • Git官方文檔-中文版
  • Cocoapods官方文檔

本文作者: Owenli
本文鏈接: https://jesusLove.github.io/2018/01/03/Git&Cocoapods/


網(wǎng)頁(yè)題目:Git&CocoaPods&私有化,你不得不知的組件化基礎(chǔ)!
本文來(lái)源:http://weahome.cn/article/pciogi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部