美文网首页Cocoapods xcode 环境快捷组件化
iOS组件化 (pod私有库,包含静态库)

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

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

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

    • 创建一个远程仓库,作为私有的repo索引库
    • 创建一个远程仓库,作为我们需要封装的模块组件仓库(存放待封装的项目文件,需要拆分成几个模块就要需要几个仓库,这里以一个为例)
    • 添加文件到组件仓库,配置 pod.spec 文件,并上传至pod远程私有库
    • 添加tag,并推送至远端私有库(tag要与.podspec文件中的version保持一致)
    • 向私有的Repo索引库提交podspec
    • 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


    跳过警告
    • 验证及推送常用的补充命令
      --allow-warnings //Allows push even if there are lint warnings
      --use-libraries //Linter uses static libraries to install the spec
      --swift-version=VERSION T//he SWIFT_VERSION that should be used to lint the spec.
      This takes precedence over a .swift-version file.
      --skip-import-validation //Lint skips validating that the pod can be imported
      --skip-tests //Lint skips building and running tests during validation
      --silent //Show nothing
      --verbose //Show more debugging information
      --no-ansi // Show output without ANSI codes
      --help // Show help banner of specified command

    接下来就要将本地的项目与远端库建立连接,使用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"'
    

    相关文章

      网友评论

        本文标题:iOS组件化 (pod私有库,包含静态库)

        本文链接:https://www.haomeiwen.com/subject/shkvvqtx.html