美文网首页iOS Dev
pod package践行篇

pod package践行篇

作者: 奔哥小木屋 | 来源:发表于2017-07-18 19:03 被阅读186次

    一枚iOS coder, 貌似对pod这个工具熟悉的不行不行了吧, pod除了管理三方库之外, 还能干很多事, 今天聊聊pod的一个plugin:pod package.

    pod package, 顾名思义, 就是一个打包工具, 可以把代码打包成静态库(.a和.framework)和动态库(.framework), 当然Xcode也可以打包, 只是比pod package会麻烦一些. 网上关于使用Xcode打包的说明已经很多, 不再赘述.

    为什么要使用打包为二进制文件

    二进制化指的是通过编译把组件的源码转换成静态库或动态库,以提高该组件在App项目中的编译速度。

    1. 为了项目组件化. 将单一功能的代码写成一个仓库, 在项目的podfile里面去引入

    2. 二进制化的话就节省了很多源文件的编译时间,直接使用编译好的二进制文件。

    0. 安装pod package

    详见GitHub cocoapods-packager, 不赘述

    1. package的参数说明

    如果要使用podpackage, 首先, 你得有个podsepc, 简单说明一下

    0.使用pod创建仓库

    pod lib create Demo
    根据提示, 一步一步去搞, 不赘述

    1.参数

    到Demo.podspec的目录下, 执行 pod package --help
    如下:

    WechatIMG192.jpeg

    //强制覆盖之前已经生成过的二进制库
    --force

    //生成静态.framework
    --embedded

    //生成静态.a
    --library

    //生成动态.framework
    --dynamic

    //动态.framework是需要签名的,所以只有生成动态库的时候需要这个BundleId
    --bundle-identifier

    //不包含依赖的符号表,生成动态库的时候不能包含这个命令,静态库一定需要包含依赖的符号表。
    --exclude-deps

    //表示生成的库是debug还是release,默认是release。
    --configuration=Debug //设置为debug的

    相关文章

      网友评论

      • zruibin:楼主有没发现用pod package打出来的.a包跟用xcode打出来的.a包大小会差很多的,我看了下pod package打包时没有哪个配置可以优化编译级别的,你这方面有什么好的建议么?谢谢
      • 起个名字想破头:有个问题请教一下,我的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
        奔哥小木屋:打包命令(动态库):
        pod package TestPod.podspec --dynamic --no-mangle --spec-sources=http://(你们如果有内网私有库的话, 这里是内网私有库的链接), https://github.com/CocoaPods/Specs.git
        奔哥小木屋:补充一点:

        ss.vendored_frameworks = "frameworks(路径)/Aframework.framework"
        奔哥小木屋:最近一直比较忙, 很久没有登录过简书了.....

        只想对外提供Bframework, B中又依赖了A, 可以以subspec的形式引入:

        s.subspec 'Aframework' do |ss|
        ss.xcconfig = {
        #此处是xcoode配置, 如下 是配置 ENABLE_BITCODE, xcode中ENABLE_BITCODE默认是yes
        # 'ENABLE_BITCODE' => 'NO'
        }
        ss.vendored_frameworks = "frameworks(路径)/Aframework"
        # ss.frameworks = ['AVFoundation', 'VideoToolbox'] //Aframework依赖的系统动态framework
        # ss.libraries = [ 'c++', 'z'] // Aframework依赖的系统静态library
        # ss.dependency 'AFNetworking', '~> 3.0' // Aframework依赖的三方库, 依赖的三方库可能很
        多, 如下:
        # ss.dependency 'XXX'
        # ss.dependency 'YYY'
        end

      本文标题:pod package践行篇

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