背景
说起pod很多同学都熟悉是cocoapod。平时(我)靠着install 和update蒙混度日。今天在接flutter的时候看到在别的项目结构里Pod目录下有一个Development Pods的文件夹:
DevelopmentPods
一番探索之后和大家分享一下这个知识
整个的Pods就是CocoaPods把开发者提供给我们的源码拷贝了一次的地方。包含了我们podspec中所有引用到的文件
一般我们在pod中放的都是诸如别人写好的稳定第三方库等。Podfile中使用方式如下
target 'xxx' do
pod 'SDWebImage', '3.7.5'
那么考虑下我们自己有一个库。我们开发了一些新的内容,但是希望自己先测试一下再发布稳定的版本。这个时候我们可以选择获取我们当前库的git副本实现这个事情,例如:
pod 'DTFoundation', :git=>'https://github.com/Cocoanetics/DTFoundation.git', :branch=>'develop'
这样,当我们修改了一些东西的时候我们可以将改动推回GitBub。
注意,如果我们用的是第一种方式。那么我们修改pod里的文件是没有意义的。因为修改的只是一份拷贝。
修改成这样后我们运行下pod update
可以发现。我们的pod里的结构还是原先的结构。只不过文件变成了对应分支的文件。到此我们实现了既可以修改工程又可以修改Pod的目的。
既然可以克隆远端的git仓库,有同学自然想到本地的仓库是不是也可以(实际上,git仓库并不一定要在远端) 如果想实现这个效果,我们可以用两步实现
1.我们在Podfile中添加如下代码
platform :ios, '8.0'
# Allows per-dev overrides
local_podfile = "Podfile.local" eval(File.open(local_podfile).read) if File.exist? local_podfile
# Core Dependencies
pod 'DTFoundation', :git => 'https://github.com/Cocoanetics/DTFoundation.git', :branch => 'develop'
2.在PodFile.local中采用如下形式
pod 'DTFoundation', :path=>'~/Documents/Projects/DTFoundation'
这里我将所有的工程都放在了Projects下。所以如果你的目录不一样,需要做相应修改。
为什么这个可以起作用。有两点原因
- Podfile 是 Ruby
- 一个Pod的第一个实例就是Pod会生效的那个实例(小技巧)
之后pod update
就可以看到我们的Pod下DTFoundation的依赖已经挪动到了Development Pods的文件夹。
这时我们点击某个文件的引用,就不再指向Pods下的子文件夹了,而是指向我们本地的仓库目录。
总结:Development Pods相当于把某个Pod放在了本地,方便我们随时修改和验证pod的功能。同时因为是直接的拷贝。所以我们修改完了就会直接将Pod仓库中的内容也修改了。
网友评论