组件化开发之CocoaPods私有库制作

作者: SemyonXu | 来源:发表于2017-02-27 18:07 被阅读1166次

    iOS中如果涉及到多个APP的同时开发,那么有些公共的代码可能需要有个统一的修改的地方,那么组件化功能就势在必行。CocoaPods的使用,我们一般使用pod库里面的公共框架,比如AFNetworking,但是我们不希望我们业务相关的代码提供给别人,这里讨论一下使用CocoaPods来制作私有库。

    CocoaPods 私有库制作方式一

    1. 新建私有git库

    可以gitlab,也可以github,当然github是公共的,私有的得交费。

    2. 创建工程

    可以使用pod命令来自动创建,命令:

    pod lib create TestKit

    中间会有很多配置,根据自己的需求配置即可。

    如果想自动创建工程,那么需要将你的代码放到一个文件夹下,自己制作.podspec文件即可。

    pod spec cretae TestKit

    创建完之后,将工程提交到远端git库

    3. 添加私有库到本地pod库:

    命令:

    pod repo add TestKit git@git.xxxx.git

    git@git.xxxx.git: 远端库的地址

    成功之后,我们可以查看一下:

    cd ~/.cocoapods/repos
    open .

    这里除了master之外,新增了一个TestKit文件夹

    4. 开发代码,提交git,并打tag

    开发完代码之后,修改一下.podspec 文件,然后提交git代码,并打tag
    注意:这里.podspec 中的version必须跟git所打tag版本一致

    git add --all
    git commit -m "update podspec"
    git push origin master
    git tag 0.0.1
    git push --tags

    如果不确定podspec有么有问题,可用先执行【5】pod检测,再打tag

    5. 检测一下pod库是否可用

    命令:

    pod lib lint

    如果有警告可以使用命令忽略:

    pod lib lint --allow-warnings

    如果有问题,那么一般是podspec配置问题。

    成功提示:

    TestKit.podspec passed validation.

    6.本地测试库是否可用

    新建工程

    pod init

    修改podfile文件, 并添加上本地库路径

    pod 'TestKit', :path => '/Users/xxx/Documents/TestKit'

    拉取pod代码

    pod install

    成功后,可用看到我们的库并没有在pods里面,而是在Development Pods里面,可用先检测代码有没有问题。

    7.提交本地库,向Spec Repo提交podspec

    命令:

    pod repo push TestKit TestKit.podspec

    如果没有什么问题,那么恭喜成功了。

    8.测试一下

    pod搜索一下:

    pod search TestKit

    在新工程中的podfile文件中,新增

    pod 'TestKit'

    如果报错,拉取不下来,可以更新一下pod

    pod update

    如果还是报错:
    [!] An unexpected version directory Assets was encountered for the /Users/xxx/.cocoapods/repos/TestKit Pod in the TestKit repository.
    修改podfile文件:

    pod 'TestKit', :git => 'https://xxx/TestKit.git'

    此处git是你远端git库的地址,如果git@git.xxxx.git不可以,换成https的地址即可。

    CocoaPods 私有库制作方式二

    此方式是使用公共库的制作方式,将代码以framework的形式呈现,那么源码也是别人无法看到的。这种方式需要维护两个git库,一个是源码库,一个是framework库。维护相对来说麻烦一些,但是制作的跟公共库一样,使用方便。

    1. 新建git私有库

    新建一个git库工程

    2. 创建工程

    创建的方式跟法【一】的一样

    3. 检测podspec文件是否正确

    命令:

    pod spec lint TestKit.podspec

    此处很可能有问题,根据问题提示修改即可

    4. 提交远端,并打tag

    命令参考法【一】

    5. 打framework包

    使用cocoapods-packager工具,可以使用命令查看自己电脑有没有安装:

    gem list

    如果没有的话,安装一下:

    sudo gem install cocoapods-packager

    如果报错,没有权限,新系统修改一下

    sudo gem install -n /usr/local/bin cocoapods-packager

    使用打包命令:

    pod package TestKit.podspec --force

    此处--force是强制覆盖的意思

    如果你想把framework放到其他目录下,切换到你想存的目录下, 把TestKit.podspec路径补充完全即可

    cd xxx
    pod package xxx/xxx/TestKit.podspec --force

    注意:tag很重要,必须保证跟TestKit.podspec中的一致,因为打包会根据.podspec文件中的version去git库找tag标记对应的代码。

    6. 新建framework库

    一般是公有的,其他人可以访问的,比如:github

    7. 新建fremwork工程

    跟上面2新建工程一样,区别在于将源码替换成framework

    如果不想新建,可以直接复制之前新建的工程替换即可。

    新建完,可以再检测一下podspec文件是否正取。

    完成后,提交git,并打tag

    8. 上传pod官方库

    使用cocoapods-trunk工具

    如果没有的话,安装一下:

    sudo gem install cocoapods-trunk

    如果报错,没有权限,新系统修改一下

    sudo gem install -n /usr/local/bin cocoapods-trunk

    发布podspec:

    pod trunk push TestKit.podspec

    如果没有问题,可以搜一下:

    pod search TestKit

    如果没有搜到,可以重新setup一下pod,这个过程是比较漫长的,会重新拉取pod官方库master文件:

    pod setup

    9. 测试

    直接在podfile文件中添加

    pod 'TestKit'

    OK, 大功告成,以后的维护工作,就是重复这个步骤(不用新建git库、pod工程),修改完代码别忘了打tag,修改podspec文件version。

    参考:
    http://guides.cocoapods.org/making/private-cocoapods.html

    如果文中有什么错误,欢迎大家指正。

    转载请注明出处:http://semyonxu.com

    相关文章

      网友评论

      • 不離:[!] An unexpected version directory Assets was encountered for the /Users/xxx/.cocoapods/repos/TestKit Pod in the TestKit repository.

        // 你的这个文章解决了我私有库pod 不下来bundle的问题 ,感谢~
        SemyonXu:@不離 哈哈,客气
      • rapunzelyeah:一个git库下建立多个组件,是不是应该建立多个组件的文件目录,每个组件对应自己的podspec文件?那podspec的tag是不是对应整个git库的tag?
      • 起个名字想破头:有个问题请教一下,我的podspec中需要引入一个私有frameworkA,使用vendored_frameworks进行标识,使用pod package打包生成frameworkB,当把生成的frameworkB拖到工程中编译时,提示Undefined symbols for architecture,而牵扯的方法都是frameworkA中的。也就是说使用pod package并没有把frameworkA打包进frameworkB中,想问下,怎么能把frameworkA打包进frameworkB呢,从而只需给用户提供一个frameworkB即可。

        以下是我的podspec:
        Pod::Spec.new do |s|
        s.name = "frameworkB"
        s.source_files = "TestPod/TestPod/*.{h,m}"
        s.public_header_files = "TestPod/TestPod/TestPodPublic.h"

        #这里标识了需要引用的私有库
        s.vendored_frameworks = "TestPod/TestPod/frameworkA.framework"
        end

        打包命令如下:
        pod package TestPod.podspec --no-mangle --force --embedded

        ps:创建一个工程,使用podfile,引用源码的方式,是可以正常运行代码的。
        SemyonXu:@起个名字想破头 这个我觉得不需要用pod设置,直接将frameworkA当成代码加到工程里,编译进去。具体我没有测,希望能帮到你。
      • 青空逸隐:您好, 能否详细说下[!] An unexpected version directory Assets was encountered for the /Users/xxx/.cocoapods/repos/TestKit Pod in the TestKit repository.的具体解决方法?
        是这样的我这边开始执行$ pod search报Assets这个错误,因为我没有引入图片资源之类的,所以我直接把Assets这个空文件夹删除了, 提交到远端之后再执行$ pod search,会提示[!] An unexpected version directory `Classes` was encountered for the 'xxx'错误
        SemyonXu:@書冩傳奇 具体应该是找不到这个路径下的文件。因为是私有库,所以试试把私有库的地址放进去。如果还是没有解决,再看下pod文件是否写错。

      本文标题:组件化开发之CocoaPods私有库制作

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