Cocoapods xcode 环境快捷组件化

iOS组件化 (pod私有库,包含静态库)

2019-03-25  本文已影响0人  炎成
因项目业务的不断发展,应用的代码体积越来越大,代码耦合也较为严重,所以考虑先对各模块进行解耦,然后通过pod私有库来进行管理,如此每一个模块都可以单独运行。这篇文章就详细介绍如何建立远程pod私有库,以及使用。

创建远程私有库有以下几个步骤:

1. 创建两个远程仓库

创建YMSpecRepo远程仓库,用来作为索引库。
创建YMCommonViewLib远程仓库,用来存放项目工程文件。(YMSpecRepo和YMCommonViewLib是我为了让大家看的更清楚设的名字)

2. 创建spec Repo 本地索引

打开终端,在终端切换到 ~/.cocoapods/repos 目录下,然后进行pod repo add repoName http://******* 操作 (repoName为索引库名称,自定义即可,我这里就是YMSpecRepo,后面的链接为刚创建的远程索引库地址)
在终端输入:

添加本地索引库.png

这时本地的索引库已经创建好了


本地索引库.png

3. 创建pod私有库的所需的项目工程文件

cd 到一个你需要创建项目的目录下,执行pod lib create YMCommonViewLib
这里应该会提示让你设置几个问题,简单设置下即可

创建pod私有库
显示成功之后应该会自动打开创建好的项目。
打开下图目录,可删除自动生成的ReplaceMe文件,然后手动拖入项目文件
添加项目文件.png
接下来cd 到Example目录下,执行pod install,如果跳过这一步,会出现很多问题。
image.png
然后就是对podspec文件进行配置,如下图
podspec文件
配置podspec文件
配置podspec文件
主要有name,version,homepage,license,author,source,deployment_target, source_files,依赖库等

注意:homepage和source要设置成创建好的私有库的远程仓库地址,并非索引库的仓库地址

修改完成后,cd 到YMCommonViewLib目录下,即Example所在目录,再次执行pod install,然后验证podspec文件
pod lib lint YMCommonViewLib.podspec //进行本地验证文件有效性。


验证podspec文件

可能会有警告导致失败,说的是描述信息过短,可以在执行时添加跳过警告即可
pod lib lint YMCommonViewLib.podspec --allow-warnings


跳过警告

接下来就要将本地的项目与远端库建立连接,使用git remote add origin 远程仓库地址 // 将本地项目与远程仓库关联


与远程库建立连接

这里推送可能会失败
可能会出现下图情况


image.png
重新输入如下命令:
git pull origin master --allow-unrelated-histories,如果有冲突,就修改下冲突再提交,修改冲突可到sourceTree中修改,较直观,之后就再次提交。

这里先git add . 添加文件跟踪,然后git commit -am "提交" 提交本地暂存,然后再推送远端git push,可能会出现
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

git push --set-upstream origin master

那就根据提示git push --set-upstream origin master


推送远端

推送到远端之后我们还要打tag,具体如下图,不过推荐使用sourceTree,两种方式择其一


挖来的命令行
SourceTree

接着执行 pod spec lint YMCommonViewLib.podspec //命令进行本地和远程验证文件有效性。
注意:
如果私有库中依赖私有库,则验证podspec文件的时候需要加上–sources参数,否则会出现找不到你依赖的私有库。
如果上面打tag关键一步没有做,这里会出现以下问题。


image.png

4.向私有的Repo索引远程仓库中提交podspec

注意还是在刚才私有库组件的目录下,使用 pod repo push YMSpecRepo YMCommonViewLib.podspec 命令把私有库添加到私有repo索引中


向索引远程仓提交podspec

这时候repo里已经有我们刚才创建的私有库了,前往文件夹 ~/.cocoapods/repos查看,0.1.0就是我们刚才打的tag


image.png
这时候使用pod search YMCommonViewLib 已经可以搜索到
私有库搜索

5. pod私有库使用

打开项目的podfile文件
引入 pod 'YMCommonViewLib',并且在podfile最上面要指定source(索引库地址),否则会报找不到的错误,执行pod install之后,在pod文件夹下就可以看到我们自己的私有库了

注意source为索引库的地址,而不是私有库地址,索引库里面已经有了私有库的podspec了。
pod私有库使用

6. pod私有库的更新

如果私有库有文件更新,那么就必须要修改podspec文件中的version,同时tag也还是要和version保持一致,然后按之前的方法推送到私有库远端和索引库,否则将会失败。

7. pod私有库包含.a或.framework静态库的处理

如果依赖有静态库,需要像以下方式添加依赖

  s.vendored_libraries  = 'YMCommonViewLib/Classes/Lib/*.{a}'    //该目录下的.a静态库
  s.vendored_framework  = 'YMCommonViewLib/Classes/Framework/***.framework'  //Framework目录下的***.framework静态库
  s.static_framework = true  //指定pod加静态库标签

包含静态库在做验证和推送到索引库时时也要添加拼接一些命令

pod repo push YMSpecRepo YMCommonViewLib.podspec --allow-warnings --skip-import-validation --use-libraries --verbose

如果依赖的第三方有自己的私有库,在校验的时候需要指定source,后面要添加你索引库的地址

pod lib lint --sources=https://github.com/CocoaPods/Specs.git,http://******/ymspecrepo.git --allow-warnings --verbose --skip-import-validation

8. 私有库的子模块

如果你想引用一个私有库里面的一小部分功能,但是又不想把整个库导入,那么私有库的子模块正和你意
这里举例定义一个宏定义的子模块,里面是一些宏定义文件,外部可单独依赖这个子模块

  #子模块的定义,也还是在.podspec文件中
  #子模块 —— 宏定义
  s.subspec 'Macro' do |submacro|
      submacro.source_files = 'YMCommonViewLib/Classes/Macro/*.{h,m}'
  end
  #使用子模块时只需在podfile中添加  pod 'YMCommonViewLib/Macro' 即可

8. 使用私有库组件开发技巧

在实际项目开发过程中,因为有些私有库在推送到索引库时时间可能会有10-20分钟,频繁的提交到索引库并不现实,而且不适合做私有库版本控制,所以这边建议主工程可依赖私有库的分支,而不是索引库对应的tag版本,到最后项目上线或者私有库需要定个版本的时候再打tag提交到索引库。

//主工程podfile
  pod 'YMCommonViewLib',:git => 'http://****/ymcommonviewlib.git', :branch => 'branchName' #直接使用远程厂库的branchName最新提交,而不是通过ymspecrepo索引库中的tag标签
  //还有一种方式,直接使用本地的仓库
#  pod 'YMCommonViewLib',:path => '/Users/max/Project/YMCommonViewLib' #直接使用本地厂库, '/Users/max/Project/YMCommonViewLib' 是私有库在本地的目录,这种更方便于开发,在当前主工程项目里即可编译运行看到修改的效果。

如果想在私有库中添加像在PCH中导入的头文件,直接在Support Files下的prefix.pch中导入头文件,一旦在私有库工程中执行pod install操作,就会被重置,所以需要在.podspec文件中进行配置

   s.prefix_header_contents = '#import <Masonry/Masonry.h>','#import "YYCategories.h"'
上一篇下一篇

猜你喜欢

热点阅读