由於項目需求,需要把項目的不同模塊拆分出來即 組件化 ,一開始想做成多target模式,后來換成私有pods
CocoaPods的安裝和使用,網上很多,自行搜索即可。
聽說可以基於svn創建pod私有庫(文章點這里),但我斷斷續續的折騰了兩三天沒成功,實在不想搞了,只能老老實實搞git的。有誰弄成功了希望不吝賜教。
cd到需要做庫的工程目錄下 創建一個podspec文件
pod spec create podName (如:pod spec create testPods,會在當前目錄生成 testPods.podspec)
修改testPods.podspec文件,修改.podspec文件時可參考這里
可以用vim修改 也可以使用文本編譯器進行修改,(注意:使用文本編輯器修改時注意標點符號,要保證的半角符號,文本編輯器有時會自動改成全角的)
在使用時需要注意的是:Podfile文件里面的寫法區別於公有庫 示例:pod 'Utility',:git=>"http://xxxxx.git"(替換為真實的git地址)
更具體的請參考:http://www.cnblogs.com/superhappy/p/3468377.html
http://www.cocoachina.com/ios/20150228/11206.html
我遇到了這個錯誤:Unable to run command 'StripNIB AQPhotoPickerView.nib' - this target might include its own product
是因為我指定的文件夾里有xib文件,xib文件算是資源文件的,需要另外添加s.resource引入
修正前
s.source_files = "pod/classes/**/*"
修正后
s.source_files = "pod/classes/**/*.{h,m}" s.resource = "pod/classes/TestViewController.xib"
2016-07-14 更新
如何在私有庫里引用私有庫(基於CocoaPods v1.0.0)
一般,在組件化之路上,不可避免的會用到 私有庫中引用私有庫,即 s.dependency "私有庫"。網上的資料我沒有找到完整的、可行的流程,我斷斷續續的折騰了3、4天才終於解決了這個問題,特來次記錄下:
1、首先要簡單說下pod install 的流程
終端運行 pod install后,會默認從github上搜索公開庫的,因此,我們需要在PodFile上指明我們的私有庫的地址,在PodFile 的頂上添加如下代碼:
source 'https://github.com/CocoaPods/Specs.git' # 這個是github上公有庫的地址,沒有這個,pod就不會去公有庫查詢,就不能下載公有庫的東西
source '私有庫地址',可以放多個source
2、前面的步驟基本一致:
1)創建遠程倉庫
2)創建並編輯 .podspec 文件
3)pod repo add #repo名# #遠程倉庫地址,如:http://git.xxxxx/xx/test.git#
4)驗證 pod lib lint
3、驗證通過
pod spec lint --sources='http://git.#私有倉庫地址#,https://github.com/CocoaPods/Specs'
核心就在這了,不然會報找不到repo的錯誤。
4、打tag
cd到項目文件夾
$ git tag #版本號#
$ git push --tags
5、推送到遠端倉庫(記住:在推送之前要先打tag,不然會出錯)
pod repo push #本地Repo名字# #.podspec名# 如:pod repo push test test.podspec
打開遠端倉庫,會看到剛才打的tag
6、私有庫更新后,要重復4、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來管理這些組件。
1、在遠端創建私有repo,如:http://git.xxxx.com/xfx/iOSRepo.git
2、添加私有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 檢查時,會在后面無限打出 .......... 字符,不知啥原因,不過沒有影響。
3、添加組件的 .podspec到剛創建的repo
這一步參考前面2016-07-14更新的 5、推送到遠端倉庫,不過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"
僅記錄。
參考:
1、http://www.cnblogs.com/superhappy/p/3468377.html
2、http://www.cocoachina.com/ios/20150228/11206.html
3、http://www.jianshu.com/p/ddc2490bff9f/comments/3113292#comment-3113292