因为项目需求,须要把项目的不一样模块拆分出来即 组件化 ,一开始想作成多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