中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-06-03 21:27:07 來源:網絡 閱讀:8755 作者:Owenli_千 欄目:移動開發

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

Git

理解Git的設計思想和基本的工作原理,對更好的使用Git至關重要。

Git思想

直接記錄快照,而非比較差異。和其他版本控制系統不同的是,Git存儲數據時將數據看成小型的文件系統的一組快照,每次在修改文件提交更新后,它主要對當時的所有文件制作一個快照并保存到快照索引中。Git還對這一個保存過程進行了優化,也就是說當文件沒有本修改時,Git不會重新存儲文件而是只保留一個鏈接指向之前存儲的文件。這是Git與其他版本控制系統的重要區別。

近乎所有的操作都是在本地執行。Git的大多數操作都是在本地完成,當我們在沒有網絡或者沒有×××的情況下,同樣可以使用Git進行辦公。因為在本地磁盤上有項目的完整歷史,可以在任何時候瀏覽項目的歷史。

保證數據的完整性。Git為了保證數據的完整性在存儲前都會計算校驗和,通過校驗和來引用。校驗和機制叫做SHA-1散列,也叫哈希散列。Git通過對校驗和的檢查可以保證數據的完整性。

校驗和是40個十六進制組成的字符串。例如

24b9da6552252987aa493b52f8696cd6d3b00373

在Git中,所以文件都是通過校驗和進行查找的,而不是文件名。

Git工作原理

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

  • 已提交: 數據已經安全的保存到本地數據庫中。
  • 已修改: 數據文件被修改,還沒保存到數據庫中。
  • 已暫存: 對已經修改的文件的當前版本做了標記,包含下次提交的快照。

對應文件的三種狀態,還引入了三個工作區域的概念: Git倉庫,工作目錄和暫存區域。

  • Git倉庫: 用來保存項目的數據的地方。
  • 工作目錄:項目中某個版本獨立提取出來的內容。
  • 暫存區域:保存文件下次提交的信息。

工作流程:

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

工作區域和文件狀態關系,如下圖:

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

驗證

首先在桌面創建一個文件夾

$ cd Desktop & mkdir GitDemo & cd GitDemo

初始化Git倉庫

git init

查看Git倉庫狀態

git status
// 輸出:
        On branch master

        No commits yet

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

提示沒有可以提交的內容,因為現在工作區什么都沒有,下面添加A.md文件。

// 創建A.md文件
touch A.md
// 查看Git狀態
git status
// 輸出:
    On branch master

    No commits yet

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

        A.md

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

此時工作目錄中新添加了一個文件,也就是說A.md文件被修改。在查看倉庫狀態會發現Untracked files A.md, 文件是未跟蹤狀態。可以使用git add &lt;file&gt;命令提交跟蹤。

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

    No commits yet

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

        new file:   A.md

輸出結果新的文件A.md,通過git add &lt;file&gt;命令,此時的A文件已經被提交到暫存區,文件的狀態是已暫存狀態。git rm --cached &lt;file&gt;...可以將暫存的文件從暫存區移除。

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

輸出結果顯示了一些提交的基本信息,master分支,當前校驗和[af93fed]以及在本次提交中,有多少文件修訂過,多少行添加和刪改過。通過此命令將文件提交到倉庫中,此時文件的狀態是已提交狀態。

遠程倉庫

前面的提到,Git的大部分操作都是在本地完成的,但是為了多人協作就需要進行遠程倉庫管理。一些基本操作:

// 查看遠程倉庫服務器
git remote -v 

// 添加遠程倉庫
git remote add <name> <url> 

// 拉取倉庫信息
git fetch <name> 

// 推送到遠程倉庫
git push origin master

// 查看遠程倉庫
git remote show origin

// 遠程倉庫的移除和重命名
git remote rename <oldName> <newName>
git remote rm <name>

標簽操作

// 查看所有標簽
git tag

// 添加標簽
git tag -a 0.1.1 -m 'message'

// 顯示標簽信息
git show 0.1.1

// 提價標簽到遠程(--tags所有標簽)
git push origin --tags 

以上,只是Git的基本原理,其他內容請看官方文檔。Git

Cocoapods

作為iOS開發者,想必對Cocoapods都不會陌生,那么有沒有思考過這些問題?它的是如何查找庫,如何集成庫的,它的工作原理是什么。那么接下來我們學習一下Cocoapods的工作原理。

工作原理

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

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

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

工作流程:

  • 安裝Cocoapods后,本地會來去官方的索引庫,生成本地索引表。
  • 使用Pod install時,默認情況下,會去更新本地索引庫,可以在后面添加--no-repo-update忽略更新。
  • pod會根據Podfile文件內容查找索引表,找到庫所對應的的Podspec文件,獲取庫的真是地址。
  • 下載三方庫到本地。

關于 Podfile 設置請看The Podfile。

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

Cocoapods私有化

理解了GitCocoapods的工作原理,我們需要學以致用。本節我們學習創建私有索引庫,可以說這是組件化的基礎。

索引庫

前面提到通過命令pod repo可以查看本地的索引庫。

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

上面的URL地址就是公共索引庫的地址,瀏覽器打開其實就是一個倉庫。里面存放著所有支持cocoapods的庫的索引文件podspec。因為該庫是公共的,任何人都可訪問,所以為了使我們私有的庫也支持cocoapods就需要創建私有的索引庫。

下面我們看如何創建私有索引庫,其實很簡單。你可以選用一些代碼托管平臺,例如:碼云, Coding。這里以碼云為例。

在碼云中創建一個私有索引庫,命名為LQQSpecs

OK私有庫就創建好了。接下來將私有索引庫添加到本地。通過命令pod repo add &lt;Name&gt; &lt;URL&gt;

pod repo add LQQSpecs <URL>

添加完成后運行pod repo就可以看到私有索引庫了。

至此,私有索引庫創建完成。

代碼庫

Cocoapods提供了創建代碼庫的命令。

pod lib create <Name> // 創建倉庫
// 拉取模板庫
// 1. 設置:編程語言 OC 、Swift
// 2. 是否生成Demo?
// 3. 是否生成單元測試
// 4. 是否生成UI測試
// 5. 文件前綴

文件目錄結構如下。

├── 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文件對應前面第二步,在這里寫測試代碼,或實例程序
  • LQQSegmentBar: 封裝的庫。
  • LQQSegementBar.podspec: 這是庫的描述文件,將它提交到索引庫,后面在解釋。

這里需要注意是,當封裝庫更新時,Example需要使用pod install更新,才能正常使用修改過的庫。

配置Podspec

下面我們來看一下Podspec文件。 由于上面使用pod提供的模板庫創建的項目,所以默認生成了該文件。如果為現有的庫添加該文件,需要使用命令

pod spec create <name> //創建Podspec

Podspec文件創建成功。那么文件里有什么內容,如何設置。由于涉及到的參數較多,所以這里只找幾個關鍵的。其他請看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.' // 簡介
  s.homepage = 'https://github.com/AFNetworking/AFNetworking' // 項目主頁
  s.authors  = { 'Mattt Thompson' => 'm@mattt.me' } // 作者
  s.source   = { :git => 'https://github.com/AFNetworking/AFNetworking.git', :tag => s.version, :submodules => true } // 倉庫地址
  s.public_header_files = 'AFNetworking/AFNetworking.h' // 頭文件
  s.source_files = 'AFNetworking/AFNetworking.h' // 源文件

  #......
end 

上面只是涉及最基礎的設置,其他的請查看官方文檔。

封裝好代碼并且修改好Podspec文件,我們可以將項目上傳到私有倉庫了。

上傳完成后需要為項目打標簽,這個標簽與Podspec文件中的版本號對應。

接下來將Podspec上傳到私有索引庫就可以,在上傳之前最好驗證Podspec文件是否有錯誤。

pod lib lint // 本地驗證

pod spec lint // 遠程驗證

上傳到私有索引庫pod repo push &lt;索引庫名&gt; &lt;Podspec文件&gt;

pod repo push LQQSpecs xxx.podspec

OK!至此,私有索引庫,私有倉庫,添加到私有索引庫都完成了。

檢驗成果的時候到了。

pod search 'xxx'

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

WTF! 這是什么情況呢, 不要著急,并不是上述沒有成功,是因為電腦有緩存。

資料庫->Caches->Cocoapods

那么,如何將個人開源庫發送到共有索引庫,想必也回來。唯一的區別是Podspec上傳的位置不同。

總結

本文學習了Git和Cocoapods工作原理。以及通過Cocoapods創建私有庫,并集成Cocoapods功能。

參考

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

石城县| 肇源县| 盖州市| 台州市| 北海市| 光山县| 贵阳市| 上蔡县| 辽源市| 体育| 华蓥市| 沙坪坝区| 徐州市| 东兰县| 奉新县| 确山县| 轮台县| 巢湖市| 恩平市| 浏阳市| 太白县| 武邑县| 黑山县| 尤溪县| 遂川县| 当阳市| 高淳县| 深泽县| 大石桥市| 平山县| 台南市| 华宁县| 深水埗区| 沂源县| 阜康市| 东莞市| 大同市| 雅江县| 宁河县| 湖南省| 永仁县|