關(guān)于CocoaPods的一些粗淺知識(shí),越感贊嘆其作者的智慧。唯有膜拜與馬不停蹄地的學(xué)習(xí)。
用到的代碼
specs
LibObject
PrivatePodDome
1. 安裝
sudo gem install cocoapods
2. 快速上手
pod init
pod search AFNetworking
pod install
pod update
Podfile.lock
pod install vs pod update
- pod install
- 將pod的版本寫(xiě)入
Podfile.lock
文件中. - 對(duì)于已經(jīng)在
Podfile.lock
中有記錄的Pod下載對(duì)應(yīng)的版本,即便有新的版本,也不會(huì)去更新. - 對(duì)于沒(méi)有記錄的,根據(jù)
Podfile
中的約定,下載版本,并把版本信息寫(xiě)入Podfile.lock
中.
- 將pod的版本寫(xiě)入
- pod outdated
-
查詢當(dāng)前所用庫(kù)的最新版本信息.
-
- pod update
- pod update PODNAME --no-update-repo
只有當(dāng)需要更新pod
版本時(shí),才用pod update
,其余時(shí)間都用pod install
3. 添加本地Repo
創(chuàng)建一個(gè)git倉(cāng)庫(kù),使用pod repo add your_private_spec_repo_name your_private_spec_repo_url
添加本地Repo
#添加本地Repo
pod repo add specs https://github.com/lbencs/specs.git
建好以后,用pod repo
可以查看當(dāng)前所有repo
的信息,可以看到specs已經(jīng)添加到本地。
4. 創(chuàng)建自己的spec
利用pod
提供的工具創(chuàng)建一個(gè)spec
項(xiàng)目 pod lib create your_project_name
pod lib create LibObject
期間,會(huì)又一些選項(xiàng)需要你去填寫(xiě),填寫(xiě)完后就會(huì)自動(dòng)生成一個(gè)項(xiàng)目
如果停在
pod install
了。可以直接中斷。改用pod install --no-repo-update
項(xiàng)目的目錄如下:
分為
Example
和Pods
兩個(gè)主要的目錄。先看
LibObject
,分為兩個(gè)目錄LibObject
|- Assets //用來(lái)存放本地資源,比如圖片、Assets.xcassets等
|- Classes //存放
pod
的.m.h.swift.xib
文件等Example
就沒(méi)啥好講的,就是一個(gè)項(xiàng)目。兩個(gè)目錄以外還有兩個(gè)文件
LICENSE
//授權(quán)文件my_spec_product.podspec
LibObject.podspec
.podspec
文件為整個(gè)pod
的配置文件。CocoaPods就是通過(guò)這個(gè)文件中的配置,來(lái)管理、拉取指定版本的代碼。
詳細(xì)配置信息內(nèi)容移步
5. 開(kāi)發(fā)與調(diào)試
用xcode
打開(kāi)項(xiàng)目
有一個(gè)
Development Pods
的虛擬文件夾,show on folder
以后你會(huì)發(fā)現(xiàn),里面的Pod
其實(shí)就是Pods
文件夾。這意味著你在這個(gè)文件夾下的操作,其實(shí)就是對(duì)Pods
文件夾的操作。這樣開(kāi)發(fā)中就可以方便的在視列程序里面進(jìn)行pod
的開(kāi)發(fā)了。
!!!!!
特別注意,每次往Pod
里面添加文件、圖片、等任何非代碼級(jí)別的改動(dòng)的時(shí)候,都需要對(duì)Example
程序進(jìn)行一次pod install
orpod update
一次。//Todo
6. 提交自己的Pods
- 創(chuàng)建自己的代碼,完成測(cè)試。
- 提交Pod到Spec之前,需要驗(yàn)證一下自己的代碼是否正確。可以通過(guò)
pod lib lint --verbose
命令驗(yàn)證當(dāng)前pod本地代碼是否運(yùn)行正常。
- 測(cè)試通過(guò)以后,可以提交代碼到remote端,并打上跟.podspec文件中,s.version 相同的tag號(hào)
- 本地驗(yàn)證通過(guò)以后,就可以提交到遠(yuǎn)程倉(cāng)庫(kù),然后打上對(duì)應(yīng)于
version
版本號(hào)的tag
,在通過(guò)pod spec lint --verbose
進(jìn)行測(cè)試,看.podspec
文件中對(duì)應(yīng)的代碼是否運(yùn)行通過(guò)。 - 通過(guò)測(cè)試以后,通過(guò)
pod repo push <#your repo name#> .podspec
命提交到上文中創(chuàng)建的specs
倉(cāng)庫(kù)
pod repo push specs LibObject.podspec --verbose
已經(jīng)成功添加到
specs
倉(cāng)庫(kù)之中。pod必須無(wú)警告、無(wú)錯(cuò)誤,否則可以用
pod repo push specs LibObject.podspec --verbose --allow-warnings
7. 使用
新建一個(gè)Dome,在Podfile中引用私有庫(kù)specs
, 然后在引用LibObject
就此,pod引用成功
8. Tips
- 怎么在開(kāi)發(fā)中調(diào)試程序
開(kāi)發(fā)過(guò)程中,可以修改Podfile
文件的,將pod
版本指向本地。
對(duì)應(yīng)pod
的代碼會(huì)被引入Development Pods
中
- 模塊之間的命名問(wèn)題,最好以模塊為單位添加不同的
前綴
。 -
Pod
之間的引用
#import "Masonry.h"
#import <Masonry/Masonry.h>
- 添加
pod
的某個(gè)tag
如0.0.1 到repo
后,需要修改代碼但又不想提升tag
版本時(shí),注意修改完后清理CocoaPods
的本地緩存
rm -rf "${HOME}/Library/Caches/CocoaPods"
pod cache list/cache
- 第三方庫(kù)的修改,盡量
fork
再通過(guò)pod
引用 - 使用
ssh
協(xié)議 -
.gitignore
有時(shí)候突然想要忽略某個(gè)文件,但是跟新.gitignore
以后,remote端并沒(méi)有馬上刪除這個(gè)文件,原因是ignore文件只能忽略沒(méi)有加入版本管理的文件,已經(jīng)被納入了版本管理的文件是無(wú)效的。
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
- 解決ArgumentError - invalid byte sequence in US-ASCII錯(cuò)誤
修改終端語(yǔ)言、地區(qū)等國(guó)際化環(huán)境變量
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
- CI
ssh
問(wèn)題
#解決ci遠(yuǎn)程slave訪問(wèn)git時(shí),要求驗(yàn)證私鑰密碼問(wèn)題
#即,pod install 時(shí),跟新pod的訪問(wèn)權(quán)限問(wèn)題
#$SSH_PARIVATE_KEY_PASS變量為私鑰密碼
#為了安全在jenkins的環(huán)境變量里面設(shè)置這個(gè)常量
eval $(ssh-agent)
expect << EOF
spawn ssh-add $1
expect "Enter passphrase"
send "$SSH_PRIVATE_KEY_PASS\r"
expect eof
EOF
CocoaPods/Specs
CocoaPods安裝和使用教程
How to Create a CocoaPod in Swift