因爲項目需求,須要把項目的不一樣模塊拆分出來即 組件化 ,一開始想作成多target模式,後來換成私有podshtml
CocoaPods的安裝和使用,網上不少,自行搜索便可。ios
據說能夠基於svn建立pod私有庫(文章點這裏),但我斷斷續續的折騰了兩三天沒成功,實在不想搞了,只能老老實實搞git的。有誰弄成功了但願不吝賜教。git
cd到須要作庫的工程目錄下 建立一個podspec文件
pod spec create podName (如:pod spec create testPods,會在當前目錄生成 testPods.podspec)
修改testPods.podspec文件,修改.podspec文件時可參考這裏
能夠用vim修改 也可使用文本編譯器進行修改,(注意:使用文本編輯器修改時注意標點符號,要保證的半角符號,文本編輯器有時會自動改爲全角的)github
在使用時須要注意的是:Podfile文件裏面的寫法區別於公有庫 示例:pod 'Utility',:git=>"http://xxxxx.git"(替換爲真實的git地址)vim
更具體的請參考:http://www.cnblogs.com/superhappy/p/3468377.htmlapp
http://www.cocoachina.com/ios/20150228/11206.html編輯器
我遇到了這個錯誤:Unable to run command 'StripNIB AQPhotoPickerView.nib' - this target might include its own productide
是由於我指定的文件夾裏有xib文件,xib文件算是資源文件的,須要另外添加s.resource引入svn
修正前組件化
s.source_files = "pod/classes/**/*"
修正後
s.source_files = "pod/classes/**/*.{h,m}" s.resource = "pod/classes/TestViewController.xib"
2016-07-14 更新
通常,在組件化之路上,不可避免的會用到 私有庫中引用私有庫,即 s.dependency "私有庫"。網上的資料我沒有找到完整的、可行的流程,我斷斷續續的折騰了三、4天才終於解決了這個問題,特來次記錄下:
一、首先要簡單說下pod install 的流程
終端運行 pod install後,會默認從github上搜索公開庫的,所以,咱們須要在PodFile上指明咱們的私有庫的地址,在PodFile 的頂上添加以下代碼:
source 'https://github.com/CocoaPods/Specs.git' # 這個是github上公有庫的地址,沒有這個,pod就不會去公有庫查詢,就不能下載公有庫的東西
source '私有庫地址',能夠放多個source
二、前面的步驟基本一致:
1)建立遠程倉庫
2)建立並編輯 .podspec 文件
3)pod repo add #repo名# #遠程倉庫地址,如:http://git.xxxxx/xx/test.git#
4)驗證 pod lib lint
三、驗證經過
pod spec lint --sources='http://git.#私有倉庫地址#,https://github.com/CocoaPods/Specs'
核心就在這了,否則會報找不到repo的錯誤。
四、打tag
cd到項目文件夾
$ git tag #版本號#
$ git push --tags
五、推送到遠端倉庫(記住:在推送以前要先打tag,否則會出錯)
pod repo push #本地Repo名字# #.podspec名# 如:pod repo push test test.podspec
打開遠端倉庫,會看到剛纔打的tag
六、私有庫更新後,要重複四、5步
2016-09-09 更新
這裏須要補充說明一點,
私有庫有引用私有庫的狀況,在驗證已經推送podspec的時候都須要加上全部的資源地址,否則,pod會默認從cocoapods官方查詢的。
如,私有庫a要引用私有庫b,在驗證與推送私有庫a的時候,要加上私有庫b的遠程倉庫地址,以下
注意:要在pod lib lint 或者 pod spec lint 以及 pod repo push ....時候加上被引用的私有庫地址
pod spec lint --sources='#私有庫b的遠程倉庫地址(如:http://xxxxxx.git)#,https://github.com/CocoaPods/Specs' pod repo push #本地Repo名字# #.podspec名# --sources='[私有庫b的遠程倉庫地址(如:http://xxxxxx.git)],https://github.com/CocoaPods/Specs' #demo: pod spec lint --sources='http://xxxxxx/iOSRepos.git,https://github.com/CocoaPods/Specs' pod repo push iOSTest iOSTest.podspec --sources='http://git.yinqiyun.com/xfx/iOSRepos.git,https://github.com/CocoaPods/Specs'
有多少個私有庫就加多少個地址,用 半角「,」隔開
2016-07-15 更新
前面咱們拆分了一堆組件,地址都是獨立的太過度散很差管理,所以須要創建一個統一的repo來管理這些組件。
一、在遠端建立私有repo,如:http://git.xxxx.com/xfx/iOSRepo.git
二、添加私有repo到CocoaPods
套用原文:
$ pod repo add REPO_NAME SOURCE_URL 注意:在你建立本地pods庫的時候,須要檢查你推送到源地址的權限。 你可使用下面兩條指令去檢查你的安裝是否完成: $ cd ~/.cocoapods/repos/REPO_NAME $ pod repo lint .
如:pod repo add iOSRepo http://git.xxxx.com/xfx/iOSRepo.git
注:我在用 pod repolint 檢查時,會在後面無限打出 .......... 字符,不知啥緣由,不過沒有影響。
三、添加組件的 .podspec到剛建立的repo
這一步參考前面2016-07-14更新的 五、推送到遠端倉庫,不過repo名要改爲剛纔建立的repo名,即 iOSRepo
2016-09-12 更新
報錯 ··· error: include of non-modular header inside framework module ··· [-Werror,-Wnon-modular-include-in-framework-module]
解決辦法:在pod lib lint 或者 pod spec lint 以及 pod repo push ....時候加上 --use-libraries
pod lib lint --use-libraries #或者 pod spec lint --use-libraries #固然,在提交的時候也要加上 pod repo push <repoName> <podspec> --use-libraries
參考:http://stackoverflow.com/questions/29132496/cocoapod-spec-wont-lint-with-0-36
2016-09-22 更新
引用本身的或者第三方的framework或者.a靜態庫
加上如下代碼便可:
s.ios.vendored_frameworks = "xxx/**/*.framework" s.ios.vendored_libraries = "xxx/**/*.a"
僅記錄。
參考:
一、http://www.cnblogs.com/superhappy/p/3468377.html
二、http://www.cocoachina.com/ios/20150228/11206.html
三、http://www.jianshu.com/p/ddc2490bff9f/comments/3113292#comment-3113292