1.CocoaPods?的安裝
<已經了解CocoaPods的同學請直接跳到第3步或第4步>
1.1?作用:
幫助管理和維護第三方框架,快速的搜索到第三方框架, 然后自動集成到工程里面來, 并編譯成一個libPod.a的靜態庫給我們項目用.
1.2?理解:
1.2.1 什么是gem
????????Gem是一個管理Ruby庫和程序的標準包,它通過Ruby Gem(如 http://rubygems.org/ )源來查找、安裝、升級和卸載軟件包,非常的便捷。
1.2.2 常用命令
????????$ gem --version?(查看gem版本)
????????$ gem update --system(更新gem)
????????$ gem sources(查看數據源)
????????$ gem sources --remove?https://rubygems.org/(刪除數據源)
????????$ gem sources -a?https://ruby.taobao.org/(添加數據源)
????????$ gem search 軟件包關鍵字(搜索軟件包)
????????$ gem install 軟件包名稱(安裝軟件包)
????????$ gem install cocoapods --pre(安裝上一個版本軟件包)
????????$ gem uninstall?軟件包名稱(卸載安裝包)
????????注意: 以上命令最好在使用之前, 都添加sudo,代表以管理員身份運行該命令,因為有可能安裝軟件包的過程當中, 需要創建文件等等, 必須有管理員權限才能操作。
1.3?安裝:
$ sudo gem install cocoapods
執行完這句如果報告以下錯誤:?
????????ERROR: Could not find a valid gem 'cocoapods' (>= 0), here is why: Unable to download ????????data from?https://rubygems.org/?- Errno::ETIMEDOUT: Operation timed out connect(2) (https://rubygems.org/latest_specs.4.8.gz)
????????ERROR: Possible alternatives: cocoapods?
則需要更新一下ruby的源:?
????????$ gem sources??(查看當前ruby的源)
????????$ gem sources --remove?https://rubygems.org/?(刪除數據源)
????????$ gem source -a?https://gems.ruby-china.com/ ? ?//最新
如果gem太老,可以嘗試用如下命令升級gem:?
????????$ sudo gem update --system(注解: sudo 是以超級管理員的身份操作)
????????升級成功后會提示: RubyGems system software updated?
然后重新執行安裝下載命令?
????????$ sudo gem install cocoapods
(可能會報錯,出現以下問題:ERROR:? While executing gem ... (Gem::FilePermissionError)
? ? You don't have write permissions for the /usr/bin directory.)
建議使用下面的方法進行安裝:
????????$?sudo gem install -n /usr/local/bin cocoapods --pre //最新版本
? ? ? ? 或著 sudo gem install -n /usr/local/bin cocoapods -v (版本號) //指定安裝 cocoapods的版本
????????驗證成功:$ pod --version
????????接下來進行安裝,執行:?
????????$ pod setup
升級到10.11, CocoaPods報錯: command not found, 解決方案:
????????$ sudo gem update --system
????????$ sudo gem uninstall cocoapods
????????$ sudo gem install -n /usr/local/bin cocoapods
????????隨后如果出現下列錯誤
????????[!]?An?error?occurred?while?performing?`Git?pull`?on?repo?`master`.
????????[!]?/usr/bin/git?pull?--ff-only
????????原因:?Cocoapods的分支不支持當前最新的Xcode版本
????????解決辦法:?刪除master分支?重新建立新的分支
????????$ sudo?rm?-fr?~/.cocoapods/repos/master
????????$?pod?setup
2.CocoaPods?的簡單使用
2.1?步驟
????1>?Xcode新建一個項目,名字Test
????2> 終端中,cd到項目總目錄(注意:包含Test.xcodeproj的那個目錄)
????3> 執行命令?$ pod init 或者 $ vim Podfile?建立Podfile配置文件
????4> 打開podfile文件,不要選擇文本編輯打開方式,選擇Xcode打開,編輯文件如下
? ?5> 執行?$ pod install?現在打開項目不是點擊 Test.xcodeproj了,而是點擊 Test.xcworkspace
2.2?說明
????????生成的重要文件Podfile.lock 用來記錄著上一次下載的框架版本
2.3 pod install 和 pod update 區別
? ??????install? 如果Podfile.lock文件存在, 直接從此文件中讀取框架信息下載安裝,如果不存在, 依然會讀取Podfile文件內的框架信息。
? ??????update 不管Podfile.lock是否存在, 都會讀取Podfile文件的的框架信息去下載。主要區別在于, Podfile文件內的框架信息, 版本描述沒有指定具體版本。
3.創建CocoaPods遠程公有庫
3.1 注冊CocoaPods賬戶信息
????????想要創建一個開源pod庫, 首先我們需要注冊CocoaPods, 這里使用trunk方式, 作為一個iOS開發人員你一定安裝了CocoaPods, 那么只需要在終端執行:
$ pod trunk register 郵箱地址?'用戶名' --verbose
????????這里我們一般使用github郵箱和用戶名, 然后在你的郵箱中會收到確認郵件, 在瀏覽器中點擊鏈接確認即注冊成功, 成功之后可以終端執行:????
$?pod trunk me
????????查看自己的注冊信息, 以后當你有了自己的開源Pod庫, 也可以用此方式隨時查看自己發布過的Pods。
3.2?創建共享庫文件并上傳到公有倉庫
共享庫需要三個必不可少的部分:
A.?共享文件夾?(文件夾存放著你要共享的內容, 也就是其他人pod得到的文件, .podspec文件中的source_files需要指定此文件路徑及文件類型);
B.?LICENSE文件?(開源許可證,默認一般選擇MIT);
C.?庫描述文件.podspec?(本庫的各項信息描述, 需要提交給CocoaPods, pod通過這個文件查找到你共享的庫)。
這一步分兩種情況:
A.如果你已經有了現成的想要共享的文件,你只需要滿足上面三個部分,即可上傳到公有倉庫即可繼續其他的步驟;
B.你想要創建一個全新的工程去做自己的共享, 可以先從遠端clone一個新項目,使用終端命令:
$ pod lib create 庫名
然后根據需要選擇各項配置后創建一個標準的工程,將代碼上傳到公有倉庫。
3.3 創建并編輯.podspec文件
.podspec?是用 Ruby 的配置文件,描述你項目的信息。
在你的倉庫目錄下,使用終端命令創建: ?
$?pod spec create 文件名稱
修改podspec文件內容:
Pod::Spec.new do |s|
? s.name? ? ? ? ? ? = 'JFPhoneNumTFLib'
? s.version? ? ? ? ? = '0.1.1'
? s.summary? ? ? ? ? = 'JFPhoneNumTFLib.'
? s.homepage? ? ? ? = 'https://github.com/MichealFan/JFPhoneNumTFLib'
? s.license? ? ? ? ? = { :type => 'MIT', :file => 'LICENSE' }
? s.author? ? ? ? ? = { 'lannikeng' => 'lannikeng@163.com' }
? s.source? ? ? ? ? = { :git => 'https://github.com/MichealFan/JFPhoneNumTFLib.git', :tag => s.version.to_s }
? s.ios.deployment_target = '8.0'
? s.source_files = 'JFPhoneNumTFLib/Classes/**/*'
? # s.resource_bundles = {
? #? 'JFPhoneNumTFLib' => ['JFPhoneNumTFLib/Assets/*.png']
? # }
? # s.public_header_files = 'Pod/Classes/**/*.h'
? s.frameworks = 'UIKit', 'Foundation'
? # s.dependency 'AFNetworking', '~> 2.3'
end
? ? ? ? ? ?值得注意的是:podspec文件中的homepage和source不支持ssh協議地址,所以我們得放入http/https地址。
? ? ? ? ? ?編寫完成后, 我們需要驗證.podspec文件的合法性, 這里需要終端cd到.podspec文件所在文件夾, 執行:
$ pod lib lint JFPhoneNumTFLib.podspec
? ? ? ? 如果遇到警告的話,我們需要加上在后面?--allow-warnings
? ??????如有其他錯誤請重新檢查你的編寫正確性, 如果沒有問題會出現:
-> JFPhoneNumTFLib (0.1.1)
JFPhoneNumTFLib passed validation.
3.4?給倉庫打tag標簽, 發布一個release版本
????????驗證成功后,將倉庫提交到遠程,然后給倉庫打上標簽并將標簽也推送到遠程。
????????標簽相當于將你的倉庫的一個壓縮包,用于穩定存儲當前版本。標簽號與你在.podspec文件中?s.version = "0.1.1"的版本號一致。這里你可以在你的git倉庫中的releases一項去手動發布, 也可以在當前文件夾下使用終端命令:
$?git tag -m 'first release' '0.1.1'
$ git push --tag #推送tag到遠端倉庫
3.5?發布自己的庫描述文件podspec給cocoapods
????????發布項目的描述的文件 JFPhoneNumTF.podspec
????????同樣在這個文件夾下, 終端執行:
$?pod trunk push JFPhoneNumTF.podspec
將你的.podspec發布到公有的specs上,這一步其實做了很多操作,包括
????????1> 更新本地 pods 庫~/.cocoaPods.repo/master
????????2> 驗證.podspec格式是否正確
????????3> 將.podspec文件轉成 JSON 格式
????????4> 對master倉庫 進行合并、提交.master倉庫地址
成功后將會出現下列信息:
Updating spec repo`master`
Validating podspec -> JFPhoneNumTF (0.1.1)
Updating spec repo`master`?
3.6?使用倉庫
發布到Cocoapods后,在終端更新本地pods倉庫信息
$ pod setup
查詢倉庫
$ pod search JFPhoneNumTF
若出現倉庫信息說明已經成功了,這時候你就可以在?Podfile?添加、使用自己的倉庫了?pod 'JFPhoneNumTF', '~> 0.1.1'
3.7?更新維護
當你的代碼更新維護后,就需要重寫發布,流程是:
1> 更新JFPhoneNumTF.podspec中的版本號
2> 打上tag標簽推送遠程
3> pod trunk push JFPhoneNumTF.podspec?推送到pods倉庫
4.創建CocoaPods遠程私有庫
4.1?創建添加版本庫(repo),遠程索引庫
? ? ? ? 首先,創建一個像?master?一樣的存放版本描述文件的git倉庫,因為是私人git倉庫,我們選擇?oschina?創建遠程私有倉庫(因為是免費的)或者也可以在GitHub上創建($7/month)。
????????創建版本描述倉庫后,回到終端,將這個遠程的私有版本倉庫添加到本地,repo?就是 repository 儲存庫的縮寫。
$ pod repo add MySpecRepo https://git.oschina.net/JMicheal/MySpecRepo.git
????????查看在 Finder 目錄?~/.cocoapods/repos, 可以發現增加了一個 MySpecRepo 的儲存庫。
4.2?創建代碼庫
????????回到?oschina?創建私人代碼庫,創建時添加?MIT License?和?README。
????????將倉庫克隆到本地,添加你的代碼文件、倉庫名.podspec?描述文件,還有.swift-version。
????????.swift-version文件用來知道swift版本,用命令行創建:
????????$ echo "3.0" > .swift-version```
????????這里我要說一下一個坑,用?oschina?創建私人倉庫時, 在驗證時可能會找不到?MIT LICENSE證書,將其中的
????????s.license = "MIT"
修改為,指定文件
????????s.license? ? ? = { :type => "MIT", :file => "LICENSE" } ? ? ??
????????驗證podspec文件
????????$ pod lib lint?驗證本地連接
????????$ pod spec lint?驗證遠程連接
????????與公有庫的創建方式一樣,?驗證成功之后push到倉庫, 然后打tag發布release版本。一般出現錯誤警告,需要添加?--private?或者?--allow-warnings,就可以通過驗證。
4.3?將描述文件podspec推送到私有Sepc repo版本庫中
????????公有庫使用trunk方式將.podspec文件發布到CocoaPods/Specs, 內部的pod組件庫則是添加到我們第一步創建的私有Spec repo中去, 在終端執行:
$ pod repo push MySpecRepo xxxx.podspec
????????這時會對遠程倉庫進行驗證,成功的話就會在?~/.cocoapods/repos/MySpecRepo?中發現新增的倉庫描述信息了。過程為以下幾步:
????????1> 驗證?xxxx.podspec?文件
????????2> 拉取遠程版本庫?MySpecRepo
????????3> 添加?xxxx.podspec?到版本庫中
????????4> push 到遠程
若是出現錯誤信息:
[!] The repo `MySpecRepo` at `../.cocoapods/repos/MySpecRepo` is not clean
更新下我們的版本庫,
$ pod repo update MySpecRepo
再繼續上傳即可。
添加完成后我們就可以在pod中搜索 $ pod search xxxx。
4.4?私人pod庫的使用
使用私人pod庫的需要在Podflie中添加這句話,指明你的版本庫地址。
source ‘https://git.oschina.net/JMicheal/MySpecRepo.git’
**注意**是版本庫的地址,而不是代碼庫的地址
若有還使用了公有的pod庫,需要把公有庫地址也帶上
source ‘https://github.com/CocoaPods/Specs.git’
執行 $ pod install 可以看到代碼已經整合到我們的項目中了。
5 創建CocoaPods本地私有庫
5.1?創建本地庫
5.2?創建podSpec文件
podspec文件其余都與前兩種情況類似,僅僅是把本地庫的source鏈接地址可以去掉,改為:
s.source = { :git => "", :tag => "#{s.version}" }
5.3?驗證podspec文件
5.4?創建測試工程,并創建Podfile文件,進行安裝本地庫
path指向本地文件的相對路徑即可:
pod 'xxxx',:path => '../Lib/xxxx'
執行 $ pod install 安裝。
其他相關文章: