美文网首页我的组件化日记
iOS 我的组件化日记 part3:演习

iOS 我的组件化日记 part3:演习

作者: 破弓 | 来源:发表于2017-08-14 10:54 被阅读129次

    首先声明我对pod的应用在实践组件化以前,停留在写个Podfile的水平上.所以如果你对pod的使用炉火纯青,这篇就不用看了.

    1.如何创建私有 CocoaPods 仓库

    先看下CocoaPods公有库:
    打开隐藏目录
    进入目录:

    /Users/[yourUserName]/.cocoapods/repos
    

    可以看到repos有一个master目录,这也就是公有库的所在.
    同一份CocoaPods的代码(如何制作自己的CocoaPods后面说)即可以提交到公有库,也可以提交到你自己建的私有库内.不同就在于提交到公有库,所有人可以应用你的代码,提交到私有库当然就是你自己用咯.

    下面开始建私有库github(git建私有项目是收钱的,所以你任性你上...),码云,码市都可以.

    • step1:
    git_specs_create.JPG
    • step2:

    进入目录:

    /Users/[yourUserName]/.cocoapods/repos
    

    clone下来.

    • step3:

    执行命令:

    pod repo add [YOUR_REPO_NAME] [YOUR_SOURCE_URL]
    

    比如我就是:

    pod repo add PGSpecs https://git.oschina.net/pogongzhang/PGSpecs.git
    
    加私有库完成.png

    2.制作自己的CocoaPods

    • step1:建项-->clone


      git_code_create.jpg

    clone后得到:


    after_clone.png
    • step2:添加你的工程
      将你要贡献出来的代码(.h+.m+.swift...)与资源(.xib+.storyboard+.png....)放在特定的目录下.方便后面写podspec文件时可以对应指定目录下的东西.
      add_project_outside.png
    add_project_inside.png
    当然文件路径不一定非要这么写,只要文件路径你能描述清楚都可以.
    
    • step3:添加podspec文件


      add_podspec.png

      podspec文件是绝对难点,podspec文件主要描述:

    你写就的pod包含的代码+资源在哪?
    你写就的pod现在是什么版本?
    你写就的pod要依赖什么系统库?
    你写就的pod要依赖什么加入的库?
    你写就的pod要依赖什么其他pod?
    作者的个人消息
    等等
    

    以上问题下面会一一解答,以下是样板(东西很多慢慢看,不看仔细,写的时候一定会有各种问题,我深有体会):

    Pod::Spec.new do |s|
    s.name         = "PGBaseComponent"                #名称
    s.version      = "0.0.1"              #版本号
    s.summary      = "zc PGBaseComponent summary"     #简短介绍
    s.description  = "zc PGBaseComponent description"
    
    s.homepage     = "http://git.oschina.net/pogongzhang/PGBaseComponent"
    s.license      = "MIT"                #开源协议
    s.author             = { "pogong" => "564917199@qq.com" }
    
    s.source       = { :git => "https://git.oschina.net/pogongzhang/PGBaseComponent.git", :tag => "0.0.1" }  #tag与版本号要保持一致
    
    s.platform     = :ios, "8.0"          #支持的平台及版本,这里我们呢用swift,直接上9.0
    s.requires_arc = true                 #是否使用ARC
    s.module_name = 'PGBaseComponent'             #模块名称
    
    #难点1:描述你的代码+资源在哪里.特别注意xib虽然在你的工程中与代码放在一起但写描述的时候要写在s.resources内
    s.source_files  = "PGBaseComponentDemo/PGBaseComponentDemo/Contribute/code/*.{h,m}"
    s.resources  = "PGBaseComponentDemo/PGBaseComponentDemo/Contribute/code/*.xib","PGBaseComponentDemo/PGBaseComponentDemo/Contribute/resources/*.png"
    
    #难点2:在工程引入什么了系统库这里都要全写出来.特别注意像引入了libz.tbtd,这里写个'z'就可以了
    s.frameworks = 'UIKit', 'Foundation'  #所需的系统的framework,多个用逗号隔开
    #s.libraries = 'z'     #所需的系统的lib,多个用逗号隔开
    #^(本文的所展示的工程不需要这个,只是为了说注意点而已,所以是注释掉的)
    
    #难点3:有的时候我们需要自己在工程内拽入一些framework+lib
    #s.vendored_frameworks = 'PGBaseComponentDemo/PGBaseComponentDemo/Contribute/SDK/*.framework'    #工程自带的framework,多个用逗号隔开
    #^(本文的所展示的工程不需要这个,只是为了说注意点而已,所以是注释掉的)
    #s.vendored_libraries = 'PGBaseComponentDemo/PGBaseComponentDemo/Contribute/SDK/libWeChatSDK.a'    #工程自带的lib,多个用逗号隔开
    #^(本文的所展示的工程不需要这个,只是为了说注意点而已,所以是注释掉的)
    
    #难点4:有的时候我们上传的工程已经不是一个project,而是一个写了podFile的workspace.那么我们用到的pod也要在这写出来
    #s.dependency  'Masonry'
    #s.dependency  'AFNetworking'
    #s.dependency  'SVProgressHUD'
    #^(本文的所展示的工程不需要这个,只是为了说注意点而已,所以是注释掉的)
    
    end
    
    • step4:收尾
    cd到指定目录:
    PGBaseComponent
        └── README.md
        └── LICENSE
        └── PGBaseComponentDemo
        └── PGBaseComponent.podspec
    
    step4.1:校验
    执行命令:
    pod lib lint --allow-warnings --verbose
    成功标准:命令行打印==>PGBaseComponent passed validation.
    温馨提示:这一步报错概率特别大.出错了,一般都是podspec文件描述的与工程的信息不符合,看看报错信息,改掉再校验
    
    step4.2:push code
    git status
    git add .
    git commit 
    git push origin master
    
    step4.3:打tag
    git tag 0.0.1
    git push --tags
    
    step4.4:加入仓库
    pod repo push PGSpecs PGBaseComponent.podspec  --allow-warnings --verbose
    

    现在你可以去自己的私有库内看看是不是有一个你建的pod了.

    私有库加入第一个私有pod完成.png

    1.step4.4:是加入私有库的命令.提交给cocopods官方做开源项目与建私有pod的过程有一点点不一样,本文就不详细介绍了.有兴趣的同学清戳==>Cocoapods系列教程(二)——开源主义接班人
    2.step4.1:校验,因为现在提交的代码比较简单所以命令行也非常简单.到了真正用pod实现组件化的时候会有更复杂的命令(下一篇会细说).

    4.用私有pod,podFile有一点不一样

    私有仓库写就
    私有仓库加入了私有的pod
    现在该用用这个私有的pod了

    写个项目试试:
    加入Podfile,Podfile内容如下:

    platform:ios,8.0
    target 'TestPrivatePodDemo' do
     #use_frameworks!
    
    pod 'PGBaseComponent', '~> 0.0.1'
    
    end
    

    执行:

    pod install --verbose --no-repo-update
    

    报错:

    [!] Unable to find a specification for `PGBaseComponent (~> 0.0.1)`
    

    找不到,😢

    那是因为默认都是去公有库里面找的.用到私有库内的私有的pod,podFile还要加点东西.
    Podfile改成如下:

    source 'https://github.com/CocoaPods/Specs.git'        #官方仓库地址
    source 'https://git.oschina.net/pogongzhang/PGSpecs.git'       #私有仓库地址
    
    platform:ios,8.0
    target 'TestPrivatePodDemo' do
     #use_frameworks!
    
    pod 'PGBaseComponent', '~> 0.0.1'
    
    end
    

    再跑一遍pod install --verbose --no-repo-update,成功.

    使用私有pod成功.png

    打开workspace,注意看私有pod被引入后的资源文件的路径.

    多了个Resources文件夹.
    不仅图片在里面,xib也在里面.
    

    这都是为了后面pod贡献资源的应用.

    私有pod被引入后的资源文件的路径.png

    到目前为止,[建私有pod仓库==>私有pod仓库加入私有pod==>用私有pod]全部完成.但正如本文的标题==>演习,会这些距离pod实现组件化还有一段距离.真刀真枪请看下一篇.


    文章参考:
    如何创建私有 CocoaPods 仓库
    制作 CocoaPods 依赖库
    Cocoapods系列教程(二)——开源主义接班人

    相关文章

      网友评论

        本文标题:iOS 我的组件化日记 part3:演习

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