聲明:html
網上已有不少教程,參考示例:CocoaPods安裝教程linux
建立遠程代碼倉庫(並非podspec文件的倉庫),此倉庫放的是源代碼。能夠在GitHub上建立倉庫。ios
若是要發佈到Cocopods的官方specs倉庫(公開的官方specs倉庫),那麼就不須要建立。固然私有庫是須要建立的(建立方式和遠程代碼倉庫同樣,只不過specs放的是podspec文件),在這一步二者不同。
公開庫參考示例:發佈開源庫到Cocopods官方倉庫git
可使用pod命令建立,獲得一個工程模板,而且能夠根據須要配置工程,以下:github
pod lib create <組件庫名>
What platform do you want to use?? [ iOS / macOS ]
iOS
What language do you want to use?? [ Swift / ObjC ]
ObjC
Would you like to include a demo application with your library? [ Yes / No ]Yesjson
Which testing frameworks will you use? [ Specta / Kiwi / None ]
None
Would you like to do view based testing? [ Yes / No ]
No
What is your class prefix?
WT
工程建立以後,就能夠添加代碼文件到組件庫的class目錄,圖片資源到asset目錄,不過要注意資源的引用方式是否是一個bundle(參考連接:資源文件)segmentfault
若是用第三步的命令建立工程模板,那麼在Podspec Metadata目錄下已經自動生成了。若是是已有的工程或者庫文件目錄,也能夠利用Pod命令本身製做.podspec文件,命令以下:windows
pod spec cretae <組件庫名>
參考連接: podspec文件的具體說明
注意:自動生成的podspec文件只是模板,須要結合工程的庫文件、資源目錄、遠程代碼倉庫(第一步建立的遠程代碼倉庫)修改補充podspec文件。緩存
命令以下:ruby
pod lib lint (從本地驗證你的pod可否經過驗證)
pod spec lint (從本地和遠程驗證你的pod可否經過驗證,⚠️ 須要更新提交podspec到遠程specs倉庫,參考第8步,通常本地驗證經過便可提交到遠程specs倉庫)
pod lib lint --verbose (加--verbose能夠顯示詳細的檢測過程,出錯時會顯示詳細的錯誤信息)
pod lib lint --allow-warnings (容許警告,用來解決因爲代碼中存在警告致使不能經過校驗的問題)
pod lib lint --sources= https://git.xxx.com/windtersh... (私有庫依賴須要添加specs源)
pod lib lint --help (查看全部可選參數,可選參數能夠加多個)
新建工程,切換到工程目錄,執行命令
pod init
修改podfile文件, 並添加上本地庫路徑
pod '庫名', :path => '/Users/xxx/Documents/庫名'
提交工程代碼到遠程代碼倉庫,能夠利用git或者svn進行代碼版本管理,提交代碼到GitHub等, 初始化提交命令以下:
初始化git版本管理倉庫,模板代碼已經初始化了(有.git文件夾),此步驟能夠忽略
git init
添加到暫存區
git add .
提交到本地倉庫
git commit -a -m 'Initial project'
打標籤,注意此標籤可能在podspec中用到,用於區分版本
git tag 0.0.1
本地倉庫與遠程倉庫關聯
git remote add origin <url>
拉取和合並本地與遠程倉庫
git pull origin master --allow-unrelated-histories
本地倉庫代碼推送到遠程
git push --set-upstream origin master
推送標籤
git push --tags
開源庫提交podspec文件到Cocopods官方倉庫, 固然須要如今ocopods官方倉庫中註冊帳號,命令以下:
pod trunk me (檢查是否註冊trunk)
pod trunk register <郵箱> <註冊名字> --verbose (註冊命令)
註冊完成以後會給你的郵箱發個郵件,進入郵箱郵件裏面有個連接,須要點擊確認一下.以後開始提交,切換到有.podspec文件的組件工程根目錄執行命令
pod trunk push <組件庫名>.podspec
pod trunk push <組件庫名>.podspec --allow-warnings
添加到本地倉庫, git@git.xxxx/.git爲遠程specs庫的地址,成功以後目錄(~/.cocoapods/repos)除了master以外,新增了一個文件夾(<組件庫名>)
pod repo add <specs倉庫名> <specs遠程倉庫地址>
查看是否添加成功
pod repo list
push到遠程specs倉庫
pod repo push <specs遠程倉庫地址> <組件庫名>.podspec
pod搜索一下:
pod search <組件庫名>
若是報錯,搜索不到,建議更新下pod:
pod update
以後仍然搜索不到,那麼進入CocoaPods緩存目錄,刪除緩存索引文件search_index.json:
cd ~/Library/Caches/CocoaPods
ls
rm -f search_index.json
若是是開源庫(公有的),修改podfile文件:
pod '組件庫名'
若是是私有倉庫,建議在podfile文件開頭添加source源:
source 'https://github.com/CocoaPods/Specs.git' #官方遠程倉庫地址 source ‘http://xxx/組件庫.git’ #私有podspecs遠程倉庫地址
最後執行命令進行安裝:
pod install
文件形式:
靜態庫和動態庫區別:
靜態庫和動態庫如何構建和加載
靜態庫和動態庫的依賴關係
查看Framework是不是動態庫
在framework目錄之下,若是帶有dynamically標識着是動態庫, 不然是靜態庫,運行命令
file xxxx.framework
參考連接:iOS動態庫和靜態庫分析
一般能夠經過Xcode(Xcodebuild)來打包靜態庫和動態庫,如今經過Cocopods插件(脫離Xcode)來打包
直接經過gem命令安裝
sudo gem install cocoapods-packager
找到 Gemfile文件,添加下面一行:
gem "cocoapods-packager"
而後運行命令
bundle install
運行打包命令,注意在podspec文件的目錄下, 默認生成靜態framework形式,而且類名和方法名會被加組件庫的前綴避免衝突(好比:SDK引入AFNetworking,本身的項目中也引用 AFNetworking,SDK經過此種方式打包會被添加前綴,如:PodWTNetworking_AFURLSessionManager)
pod package xxxx.podspec
能夠添加命令參數,運行一下命令查看
pod package --help
--force :強制覆蓋以前已經生成過的二進制庫
--no-mangle :不添加符號前綴(由於默認是添加前綴,避免衝突,如:PodWTNetworking_AFURLSessionManager)
--exclude-deps : 不包含依賴的符號表,生成動態庫的時候不能包含這個命令,靜態庫必定須要包含依賴的符號表。
--embedded :生成靜態.framework
--library : 生成靜態.a(默認目錄下只有.a,頭文件須要本身整理)
--dynamic : 生成動態framework
--configuration=Debug :表示生成的庫是debug仍是release,默認是release
--spec-sources= https://xxxxx.git, https://github.com/CocoaPods/... :依賴庫的遠程specs,特別當依賴的庫是私有倉庫specs時須要添加
示例:
pod package WTNetworking.podspec --spec-sources= https://git.dev.tencent.com/w...://github.com/CocoaPods/Specs.git --force --library
⚠️注意: 默認的符號添加前綴可能會形成問題:
參考連接:Cocopods插件安裝及說明