IOS基础知识-CocoaPods原理篇

1、cocoapods的下载原理

s.source = { :git => '[email protected]:ios-thirdpartservice/xxxreact.git', :tag => '1.0.0' }
当使用Cocoapods导入私有库时,Cocoapods先是根据:git => ‘[email protected]:ios-thirdpartservice/xxxreact.git’找到对应的git仓库,然后根据:tag => ‘1.0.0’定位到对应tag的提交(如果没有注明Pod依赖库版本则定位到最后一次的提交),然后在这次提交中检索后缀为.podspec的文件(文件可以随便命名)。找到podspec文件后先要验证s.name是否与Podfile中的一致,如果不一致则install时会报错:[!]Unable to find a specification for ‘React’.验证成功后,就会根据Podspec中的s.source_files找到需要导入的代码文件,并通过其他的的数据找到对应的配置文件或资源文件等。最后,将其下载到本地项目中。如果是共有库,这些原理也相同。只是共有库要将podspec文件上传到cocoapods。在导入的时候通过名字React去cocoapods匹配对应的podspec,然后根据s.source去找到对应的仓库和对应的版本,然后会再去匹配新的podspec,后边的步骤就完全相同了。

2、集成原理

当所有的依赖库都下载完后,Cocoapods会将所有的依赖库都放到另一个名为Pods的项目中,然后让主项目依赖Pods项目。这样,源码管理工作都从主目录移到了Pods项目中。Pods项目最终会编译成为一个名为libPods.a的文件,主项目只要依赖这个.a文件即可。对于资源文件,Cocoapods提供了一个名为Pods-resource.sh的bash脚本,该脚本在每次项目编译的时候都会执行,将Pods依赖库的各种资源文件复制到目标目录中。Cocoapods还通过一个名为Pods.xcconfig的文件来在编译时设置所有的依赖和参数。

libPods.a
Pods-resources.sh
Pods.xcconfig

3、版本控制原理

当执行完pod install之后,cocoapods会生成一个podfile.lock的文件。podfile.lock文件最大的用处在于多人开发。如果你没有在podfile中指定pods版本pod ‘React’,那么默认为获取当前React依赖库的最新版本。当团队中的某个人执行完pod install命令后,生产的podfile.lock文件就记录下了当时最新pods依赖库的版本,这时团队中的其他人check下来这份包含podfile.lock文件的工程以后,再去执行pod install命令时,获取下来的pods依赖库的版本和最开始用户获取到的版本一致。如果没有podfile.lock文件,后续所有用户执行pod install命令都会获取最新版本的React,这就可能造成一个团队使用的依赖库版本不一致,这对团队协作来说绝对是个灾难。在这种情况下,如果团队想使用当前最新版本的React依赖库,有两种方案:1、更改podfile,使其指向最新版本的React依赖库 2、执行pod update命令;鉴于podfile.lock文件对团队协作如此重要,所以应该加入到版本控制里面。

如何上传自己的库

1、 在github上创建自己的项目


image

2、填写仓库信息


image

3、把项目克隆到本地

$ git clone 项目地址

需要提前配置好SSH key:如何配置SSH?如何clone?常用github终端指令?

4、 把自己做好的库和Demo放入克隆下来的项目里


image

5、用终端cd到项目里

6、创建.podspec文件,用于上传到cocoapods

$ pod spec create WHKit

image

7、编辑.podspec文件,推荐使用sublime编辑(可以复制下述内容,注意修改)

Pod::Spec.new do |s|

s.name = "WHAddVC"

s.version = "1.0.2"

s.summary = "Simple one line code."

s.homepage = "https://github.com/remember17/WHAddVC"

s.license = "MIT"

s.author = { "wuhao" => "[email protected]" }

s.platform = :ios, "7.0"

s.source = { :git => "https://github.com/remember17/WHAddVC.git", :tag => s.version }

s.source_files = "WHAddVC", "WHAddVC/*.{h,m}"

s.framework = "UIKit"

s.requires_arc = true

s.dependency 'Masonry'

end

8、把项目推送到git(注意版本)

$ git add -A && git commit -m "Release 1.0.0."

$ git tag '1.0.0'

$ git push --tags

$ git push origin master

9、 验证 .podspec 是否有有效

$ pod spec lint (如果报错,就根据提示修改)

如实在无法通过,可以尝试下面的指令

$ pod spec lint WHKit.podspec --verbose --use-libraries --allow-warnings (库名改成自己的)

10、 注册trunk,用于上传到cocoapods

$ pod trunk register [email protected](邮箱地址) "作者姓名"

然后去所填的邮箱验证

11、发布 Pod (下面指令中的库名改成自己的)

$ pod trunk push WHKit.podspec

如果第8步用了:

$ pod spec lint WHKit.podspec --verbose --use-libraries --allow-warnings

那么这一步就用:

$ pod trunk push WHKit.podspec --use-libraries --allow-warnings

12、版本升级

修改 .podspec 中的 s.version为更高的版本号

提交到Git,并打上对应tag,然后执行终端指令

$ pod trunk push WHKit.podspec

或者

$ pod trunk push WHKit.podspec --use-libraries --allow-warnings

你可能感兴趣的:(IOS基础知识-CocoaPods原理篇)